>백엔드 개발 >C++ >C에서 n개 항목의 모든 k-조합을 어떻게 생성할 수 있나요?

C에서 n개 항목의 모든 k-조합을 어떻게 생성할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-21 01:06:14317검색

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으로 문의하세요.