Rumah > pembangunan bahagian belakang > C++ > Bagaimana Saya Boleh Menjana Semua k-Kombinasi n Item dalam C ?

Bagaimana Saya Boleh Menjana Semua k-Kombinasi n Item dalam C ?

Patricia Arquette
Lepaskan: 2024-11-21 01:06:14
asal
318 orang telah melayarinya

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

Gabungan Item dalam C

Pengenalan

Menjana semua kemungkinan kombinasi item ialah satu cabaran biasa dalam banyak aplikasi. Artikel ini meneroka algoritma yang cekap untuk menjana semua kombinasi k bagi n item dalam C .

Algoritma

Algoritma menggunakan teknik bitmask untuk mewakili gabungan:

  • Pelaksanaan Kod

Output

#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;
}
Salin selepas log masuk

Analisis

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
Salin selepas log masuk
Kerumitan algoritma ialah O(n * 2^n), dengan n ialah bilangan item. Ini kerana ia berulang melalui semua nilai bitmask yang mungkin, setiap satunya mewakili gabungan unik.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menjana Semua k-Kombinasi n Item dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan