C에서 조합 생성
조합 생성에는 선택 순서를 고려하지 않고 주어진 집합에서 요소의 하위 집합을 선택하는 작업이 포함됩니다. C를 사용하여 조합을 생성하는 작업에 직면할 때 다음 사항을 고려하는 것이 중요합니다.
문제 정의:
주어진 집합 S = {1, 2, 3 , ..., n} 및 값 r(여기서 r은 집합에서 선택될 요소의 수임), 우리는 주어진 것으로부터 길이 r의 가능한 모든 조합을 생성하는 것을 목표로 합니다. set.
해결 방법:
이 문제를 해결하는 한 가지 방법은 C 표준 라이브러리의 std::next_permutation 함수를 사용하는 것입니다. 이 함수를 사용하면 요소 벡터의 모든 순열을 생성할 수 있습니다. 이 함수를 활용하면 선택한 요소를 나타내는 부울 값의 벡터를 생성할 수 있습니다.
구현:
다음은 std::next_permutation을 사용한 구현 예입니다.
#include <iostream> #include <vector> int main() { int n, r; std::cin >> n >> 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; }
이 구현에서는 길이가 n인 벡터를 만들고 마지막 r개 요소를 다음으로 채웁니다. 진실. 그런 다음 std::next_permutation 함수를 사용하여 벡터의 가능한 모든 순열을 생성합니다. 각 순열에 대해 벡터의 실제 값에 해당하는 요소를 인쇄합니다.
설명:
이 접근 방식은 "선택 배열"(v)을 생성하여 작동합니다. r개의 선택기를 배치하는 곳입니다. 그런 다음 이러한 선택자의 모든 순열을 생성하고 v의 현재 순열에서 선택되면 해당 집합 멤버를 인쇄합니다.
std::next_permutation 함수를 활용하면 다음에서 길이 r의 모든 조합을 효율적으로 생성할 수 있습니다. 주어진 세트.
위 내용은 C의 `std::next_permutation`을 어떻게 사용하여 주어진 크기의 모든 조합을 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!