> 백엔드 개발 > C++ > std::next_permutation은 사전순으로 더 큰 다음 순열을 어떻게 찾나요?

std::next_permutation은 사전순으로 더 큰 다음 순열을 어떻게 찾나요?

Susan Sarandon
풀어 주다: 2024-11-08 00:44:02
원래의
263명이 탐색했습니다.

How Does std::next_permutation Find the Next Lexicographically Greater Permutation?

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

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