C での順列と結合のためのライブラリ関数
プログラミングでは、n 個の要素のセットが与えられた場合に、すべての要素を列挙する方法という質問が頻繁に発生します。 k個の要素の可能な組み合わせと順列は何ですか?これらのタスクのアルゴリズムは普及していますが、この記事では、これらの計算を容易にする既存の C ライブラリ関数に焦点を当てます。
std::next_combination() および std::next_permutation()
C 標準ライブラリは、具体的には std::next_combination() と std::next_permutation() という 2 つの関数を提供します。この目的のために設計されています。これらの関数は、 の一部です。 header.
std::next_combination() は n 要素のうち k 要素の可能なすべての組み合わせを生成し、std::next_permutation() は可能なすべての順列を生成します。これらの関数には、要素のコレクションの先頭と末尾を指す反復子が必要です。
使用例
たとえば、整数のベクトルを考えてみましょう。
std::vector<int> v = {1, 2, 3, 4, 5};
3 つの要素のすべての組み合わせを生成するには、次を使用できます。 std::next_combination():
std::vector<int>::iterator r = v.begin() + 3; do { // Process combination now } while (std::next_combination(v.begin(), r, v.end()));
同様に、すべての順列:
std::vector<int>::iterator r = v.end(); do { // Process permutation now } while (std::next_permutation(v.begin(), r));
その他のライブラリ関数
while std:: next_combination() と std::next_permutation() は一般的な選択肢であり、他にもいくつかありますライブラリと関数も同様の機能を提供します。注目すべきオプションの 1 つは、Boost ライブラリの boost::multi_index_container です。このライブラリは、複数のインデックスを持つデータのコレクションを保存および操作するための強力なフレームワークを提供します。 Boost のイテレータ機能を使用すると、組み合わせと順列を効率的に生成できます。
std::next_combination() や std::next_permutation() などのライブラリ関数はパフォーマンスが高度に最適化されており、ほとんどの場合に最適なオプションであることに注意してください。シナリオ。ただし、追加機能やカスタマイズが必要な場合は、他のライブラリ ソリューションを検討する価値があります。
以上がC ライブラリ関数は順列と組み合わせの生成にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。