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中文網其他相關文章!