ホームページ >バックエンド開発 >C++ >C で n 個の項目の k 個の組み合わせすべてを効率的に生成するにはどうすればよいでしょうか?

C で n 個の項目の k 個の組み合わせすべてを効率的に生成するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 03:10:11372ブラウズ

How Can We Efficiently Generate All k Combinations of n Items in C  ?

C で n 個のアイテムの k 個の組み合わせを効果的に生成する

n 個のグループから k 個の個の可能なすべての組み合わせを生成するタスクには、以下を使用する必要があります。バイナリを活用した賢いアルゴリズム

実装

アルゴリズムの本質は、最初の k ビットが 1 に設定され、残りの n - k ビットが設定された 2 進数のリストを作成することにあります。このバイナリ表現は割り当てリストとして機能し、各ビットは、特定の個人がリストに含まれるか除外されるかを示します。

アルゴリズム

アルゴリズムの主なステップは次のとおりです:

  1. 先頭に k 個の 1 と n を付けてビットマスクを初期化します。 k の末尾に 0 があります。
  2. ビットマスクを反復処理して、選択した個体を識別するためのバイナリ表現。
  3. 選択した個体を出力して組み合わせを生成します。
  4. std::prev_permutation 関数を適用して、 bitmask.

n = 5 および k = 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

分析

これこのアルゴリズムはバイナリ表現を効果的に利用して、考えられるすべての組み合わせを効率的に生成します。ビットマスク操作は、組み合わせに個人を含めるか除外するかを決定する簡単かつ迅速な方法を提供します。

最適化

効率をさらに高めるために、最適化には並べ替えが含まれます。生成された組み合わせ。厳密に必要というわけではありませんが、同じ入力パラメータの組み合わせの順序が一貫していることが保証されます。

以上がC で n 個の項目の k 個の組み合わせすべてを効率的に生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。