首頁 >後端開發 >C++ >如何在 C 中產生 n 個項目的所有 k 組合?

如何在 C 中產生 n 個項目的所有 k 組合?

Patricia Arquette
Patricia Arquette原創
2024-11-21 01:06:14358瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn