在 C 中创建 n 个项目的所有可能的 k 组合
给定一组从 1 到 n 的整数,任务是生成打印 k 个不同的所有可能的组合elements.
算法:
这个问题可以使用基于位掩码的方法来解决。位掩码是数字的表示,其中每个位指示集合中元素的存在或不存在。
算法的工作原理如下:
代码:
#include <algorithm> #include <iostream> #include <string> void comb(int N, int K) { std::string bitmask(K, 1); bitmask.resize(N, 0); do { for (int i = 0; i < N; ++i) { if (bitmask[i]) std::cout << " " << i; } std::cout << std::endl; } while (std::prev_permutation(bitmask.begin(), bitmask.end())); } int main() { comb(5, 3); }
输出:
0 1 2 0 1 3 0 1 4 0 2 3 0 2 4 0 3 4 1 2 3 1 2 4 1 3 4 2 3 4
分析:
该算法通过以下方式生成组合操作位掩码,这是表示元素集的有效方法。生成所有可能的组合的时间复杂度为 O(n^k)。
以上是如何在 C 中生成 n 个项目的所有可能的 k 个组合?的详细内容。更多信息请关注PHP中文网其他相关文章!