C 语言中项目的组合
简介
生成所有可能的项目组合是许多应用中的共同挑战。本文探讨了一种在 C 中生成 n 个项目的所有 k 组合的有效算法。
该算法
该算法采用位掩码技术来表示组合:
代码实现
#include <iostream> #include <vector> using namespace std; void combinations(vector<int>& items, int k) { int n = items.size(); for (int bitmask = 0; bitmask < (1 << n); bitmask++) { vector<int> combination; for (int i = 0; i < n; i++) { if ((bitmask >> i) & 1) { combination.push_back(items[i]); } } cout << "Combination: "; for (int item : combination) { cout << item << " "; } cout << endl; } } int main() { vector<int> items = {1, 2, 3, 4, 5}; int k = 3; combinations(items, k); return 0; }
输出
Combination: 1 2 3 Combination: 1 2 4 Combination: 1 2 5 Combination: 1 3 4 Combination: 1 3 5 Combination: 1 4 5 Combination: 2 3 4 Combination: 2 3 5 Combination: 2 4 5 Combination: 3 4 5
分析
算法的复杂度为 O(n * 2^n),其中 n 是项目数。这是因为它会迭代所有可能的位掩码值,每个位掩码都代表一个唯一的组合。
以上是如何在 C 中生成 n 个项目的所有 k 组合?的详细内容。更多信息请关注PHP中文网其他相关文章!