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

Patricia Arquette
リリース: 2024-11-21 01:06:14
オリジナル
308 人が閲覧しました

How Can I Generate All k-Combinations of n Items in C  ?

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

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