> 백엔드 개발 > C++ > 본문

C의 `std::next_permutation`을 어떻게 사용하여 주어진 크기의 모든 조합을 생성할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-11-28 03:58:13
원래의
705명이 탐색했습니다.

How Can C  's `std::next_permutation` Be Used to Generate All Combinations of a Given Size?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿