나는이 문제에 대한 해결책을 찾기 위해 수 일간 연구했다. 필요한 경우 컨설팅 시간에 누군가에게 돈을 지불하면 행복 할 것입니다.알파벳의 n 번째 6 문자 순열 계산
저는 현재 파이썬 itertools을 사용하여 32 문자 알파벳의 6 문자 순열을 생성하고 있습니다. 다음 명령을 통해 :
gen = itertools.permutations('ABCDEFGHJKLMNPQRSTUVWXYZ23456789',6)
설명서에서이 함수는 "r- 길이 튜플, 가능한 모든 순서, 반복되는 요소 없음"을 생성합니다. 내가 얻을
gen2 = itertools.islice(gen,0,10)
가 결과 2 세대의 반복 :
이 예는 처음 10 순열, 0-10을 잡고 (다음 명령을 통해 결과 순열의 조각을 잡기 위해 라이브러리를 사용할 수 있습니다 정확히 내가 원하는 :
('A', 'B', 'C', 'D', 'E', 'F')
('A', 'B', 'C', 'D', 'E', 'G')
('A', 'B', 'C', 'D', 'E', 'H')
('A', 'B', 'C', 'D', 'E', 'J')
('A', 'B', 'C', 'D', 'E', 'K')
('A', 'B', 'C', 'D', 'E', 'L')
('A', 'B', 'C', 'D', 'E', 'M')
('A', 'B', 'C', 'D', 'E', 'N')
('A', 'B', 'C', 'D', 'E', 'P')
('A', 'B', 'C', 'D', 'E', 'Q')
이 매우 중요하지만 내 진짜 욕망은 임의의 순열을 선택하고 (모든 가능한 순열 값을 저장하지 않고) 순열 목록에서 잡을 수있을 것입니다 내 계산합니다. 6자를 생성 할 때 정확하다. 위에 나열된 알파벳 순서에는 652,458,240 개의 가능한 조합이 있습니다. 그래서 나는 10,353,345 번째 순열을 부여 잡는 것과 같은 것을 할 수 있기를 바란다. 문제는 위의 islice 함수를 사용하여이 순열을 가져 오는 경우 순열의 전체 집합을 최대 10,353,345 번째 요소로 반복하기 전에 반복해야한다는 것입니다. 상상할 수 있듯이 이것은 매우 비효율적이며 돌아 오는 데 오랜 시간이 걸립니다.
제 질문은 원하는 계산을 수행하는 알고리즘은 무엇입니까? 나는 factorial decomposition과 base n conversion에 관한 많은 연구를 해왔지만, 내가 원하는 것에 가까운 것을 얻기위한 방법이나이 결과를 얻기 위해 수정할 수있는 알고리즘을 찾을 수 없었다.
도움이 될 것입니다.
@jonrsharpe OP 이미 알고있는 것 같습니다. – thefourtheye
이것은 분명히 중복이 아닙니다. 영업 담당자는 http://stackoverflow.com/questions/12007820/better-ways-to-get-nth-element-from-an-unsubscriptable-iterable에서 제안 된 솔루션에 대해 알고 있지만 효율성 때문에 자신의 문제에는 완전히 적용 할 수 없습니다 이유. 아마도 몇 년이 걸릴 것입니다. – hivert