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

C で組み合わせを効率的に生成するにはどうすればよいですか?

DDD
リリース: 2024-12-02 00:11:11
オリジナル
529 人が閲覧しました

How Can I Efficiently Generate Combinations in C  ?

C で組み合わせを効率的に生成する

C で組み合わせを決定することは、特にさまざまな入力値を処理する柔軟なソリューションを探している場合には、困難な作業になる可能性があります。

この問題に対する思慮深いアプローチには、標準 C ライブラリの next_permutation 関数の採用が含まれます。この関数は、ベクトルのすべての順列を段階的に生成します。この関数を利用する方法は次のとおりです。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n, r;
    std::cin >> n;
    std::cin >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}
ログイン後にコピー

このアプローチは、r セレクター値を含む選択配列 (v) を効果的に作成します。続いて、この選択配列のすべての順列を反復処理し、選択された位置に対応するセット メンバーを出力します。

たとえば、入力 "5 2" (S = {1, 2, 3, 4) を指定したとします。 , 5} および r = 2)、このアルゴリズムは次の出力を行います:

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
ログイン後にコピー

このメソッドは、C で組み合わせを生成するための効率的で一般化されたソリューションを提供します。 .

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート