2012-06-04 3 views
3

문자열 집합을 만들고 싶습니다. 아래 제한이 있습니다. 동일한 숫자를 반복해서는 안됩니다.시퀀스 집합 만들기 (12345678)

문자열 범위 1-8 (12345678) 또는 1-16 (예 12345678910111213141516)
(시리즈 세트) 추천

12345678 
12345687 
12345876 
12345867 
... 
... 
87654321 

즉 2^8 (1-8)과 2^16 (1-16) 가능성이 있습니다. 적은 계산량으로 어떻게 이러한 문자열을 매우 효율적으로 생성 할 수 있습니까?

+2

이것은 무엇입니까? 일이나 학습 (숙제 포함)? 또한, 당신은 아무것도 시도한 적이 있습니까? – SirPentor

+0

인덱스 기반 압축의 일종을 만들려고합니다. 위의 시리즈에서 각 숫자는 값 위치 (8,7,4)를 나타냅니다. –

+0

'P (n, k)'가 아닌'2^n'입니까? 그래서'P (8,8) == 8! == 40,320'과'P (16,16) == 16! == 20922789888000의 가능성. –

답변

1

8 가지 경우 가능하지만 그 후에는 공간이 부족합니다.

귀하가 생각하는 것처럼 2^n 사례는 아닙니다.이 사례는 n!입니다.

8의 경우 40,320 개의 순열이 있습니다.

permute(k,n) = k!/(n-k)! 
permute(8,8) = 8!/(8-8)! = 8! = 40320 

의 경우 20922789888000 개의 순열이 있습니다. 16 바이트/순열 (permutation)에서, 그들을 저장할 때 약 304TB가 필요합니다.

@ kol 님의 답변은 당신을위한 순열을해야하지만 귀하의 요구 사항을 변경해야한다고 생각합니다.

관련 문제