> 백엔드 개발 > C++ > `std::next_permutation` 알고리즘은 어떻게 작동하며, `i`, `j`, `k` 변수는 무엇을 나타냅니까?

`std::next_permutation` 알고리즘은 어떻게 작동하며, `i`, `j`, `k` 변수는 무엇을 나타냅니까?

Barbara Streisand
풀어 주다: 2024-11-08 03:23:02
원래의
229명이 탐색했습니다.

How does the `std::next_permutation` algorithm work, and what do the variables `i`, `j`, and `k` represent?

std::next_permutation 구현 설명

질문:

std::next_permutation 알고리즘이 작동하나요? i, j, k 변수는 무엇을 나타내며, 실행 중에 해당 값이 어떻게 변경되나요?

개념:

std::next_permutation을 이해하기 위해 순열을 숫자로 요소로 표현되는 숫자로 볼 수 있습니다. 목표는 "오름차순"으로 다음 순열을 생성하여 숫자가 증가하는 양을 최소화하는 것입니다.

핵심 루프:

핵심 루프 알고리즘은 while 루프에 있습니다.

while (true) {
    It j = i;
    --i;

    if (*i < *j) {
        // ...
    }

    if (i == begin) {
        // ...
    }
}
로그인 후 복사

이 루프는 마지막 요소에서 첫 번째 요소까지 역방향으로 반복됩니다. 중요한 통찰력은 오른쪽에 있는 모든 것이 내림차순일 때만 숫자의 위치를 ​​변경하면 된다는 것입니다.

가장 왼쪽 내림차순 찾기:

If ij가 가리키는 요소는 오름차순이므로 가장 왼쪽의 내림차순을 찾았습니다.

교환 및 재정렬:

가장 왼쪽 내림차순 시퀀스를 찾으면 i가 가리키는 숫자를 오른쪽의 "다음으로 큰" 숫자로 바꿉니다. 이 숫자는 끝부터 반복하고 i보다 큰 숫자를 찾으면 중지하여 식별됩니다.

교체 후 오른쪽의 나머지 숫자는 이미 내림차순이므로 간단히 다음 순열을 얻으려면 이를 뒤집으세요.

특정 변수:

  • i: 내림차순 시퀀스의 가장 왼쪽 요소에 대한 포인터입니다.
  • j: i 오른쪽에 있는 요소에 대한 포인터.
  • k: i에 대한 요소에 대한 포인터 i의 오른쪽은
  • i
보다 즉시 큽니다.

위 내용은 `std::next_permutation` 알고리즘은 어떻게 작동하며, `i`, `j`, `k` 변수는 무엇을 나타냅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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