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 中国語 Web サイトの他の関連記事を参照してください。