2013-09-29 4 views
1

두 개의 순열이 서로 반대 인 n 개의 숫자 순열을 생성하고 싶습니다. 마지막 문자에서 첫 번째 문자로 읽는 첫 번째 문자는 두번째 것). 예를 들어, n = 3이면 다음과 같이 생성합니다.서로의 거울이 아닌 순열 생성

1 2 3 //but not 3 2 1 
1 3 2 //but not 2 3 1 
2 1 3 //but not 3 1 2 

두 가지 중 어느 것이 생성되는지는 상관하지 않습니다. 알고리즘은 큰 n (> 20)에 적용 할 수 있어야합니다. 생성 된 순열이 이전에 생성 된 순열의 거울인지 확인하는 알고리즘이나 방법이 있습니까?

답변

7

std::next_permutation을 사용하고 첫 번째 요소가 마지막 요소보다 큰 순열을 무시하십시오.

+0

이것은 흥미로운 아이디어입니다 (마지막 요소와 첫 번째 요소 비교). 감사! – kenor

1

아니요, 보통의 하드웨어와 소프트웨어를 사용하면 이러한 순열의 수가 20!/2> 10^10 * 2^20이기 때문에이 작업을 수행하는 데 수년이 걸릴 수 있습니다.