std::next_permutation 작동 방식
std::next_permutation은 시퀀스를 재정렬하는 C 표준 템플릿 라이브러리(STL)의 함수입니다. 다음 사전순으로 더 큰 순열로 들어갑니다. 구현을 이해하려면 각 요소가 숫자를 나타내는 숫자로 시퀀스를 시각화하는 것이 도움이 됩니다.
핵심 논리
알고리즘은 다음 원칙에 따라 작동합니다.
-
피벗 찾기: 시퀀스의 끝에서 시작하여 오른쪽 요소(j)보다 작은 첫 번째 요소(i)를 찾습니다. 이는 i 오른쪽의 숫자가 내림차순임을 나타냅니다.
-
Swap and Reverse: i를 찾으면 끝부터 첫 번째 요소(k)를 검색합니다. 나보다 크다. 이 요소는 i로 교체되어 앞에 배치됩니다. 그런 다음 j 오른쪽에 있는 나머지 요소(j부터 끝까지)가 반전됩니다.
-
피벗 증가: 피벗이 발견되면(i가 시작이 아님) 프로세스가 반복됩니다. i와 j를 감소시킵니다.
-
역방향 및 종료: 피벗을 찾을 수 없는 경우(i가 시작) 시퀀스가 역전되고 함수가 false를 반환하여 더 이상 순열이 없음을 나타냅니다. 가능합니다.
코드의 변수
-
i: 가장 왼쪽 피벗 요소를 나타냅니다.
-
j: i보다 작은 오른쪽의 요소를 나타냅니다.
-
k: i보다 크고 오른쪽의 요소를 나타냅니다. i로 바꾸세요.
예
1, 3, 2, 4 순서를 고려하세요.
-
피벗 찾기: i는 처음에 4로 설정되어 있지만 4가 2보다 크거나 같으므로 i = 2로 이동합니다. 2가 4보다 작으므로 i가 피벗입니다.
-
교환 및 역방향: j는 3으로 설정되고 k는 1로 설정됩니다. 이는 오른쪽에서 2보다 큰 첫 번째 요소입니다. 1은 2로 교체되어 1, 2, 3이 됩니다. , 4. j에서 끝(2, 3, 4)까지의 나머지 요소는 역전되어 1, 2, 4, 3이 됩니다.
-
피벗 증가: i는 1로 감소됩니다. (j는 이미 2로 설정되어 있습니다). 1이 2보다 작으므로 프로세스가 반복됩니다.
-
피벗 찾기: i는 첫 번째 요소(시작)로 감소되어 피벗을 찾을 수 없음을 나타냅니다.
-
역방향 및 종료: 시퀀스가 원래 상태 1, 2, 3, 4로 역전되고 함수는 false를 반환하여 더 이상 순열이 불가능함을 나타냅니다.
위 내용은 std::next_permutation은 사전순으로 더 큰 다음 순열을 어떻게 찾나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!