먼저 두 가지 명백하지만 중요한 가정을 가정 해 보겠습니다.
_.random_item
마지막 위치를 선택할 수 있습니다.
_.random_item
확률로 모든 위치를 선택 .1n + 1
알고리즘의 정확성을 입증하려면 여기에 사용 된 것과 유사한 유도 인수가 필요합니다 .
- 싱글 톤리스트의 경우 하나의 가능성 만 있으므로 균일하게 선택됩니다.
- 원소를 가진리스트가 (모든 순열에서) 균일하게 선택 되었다고 가정하면 , 당신의 기술에 의해 얻어진 n + 1 개의 원소를 가진리스트 가 균일하게 선택되었음을 보여라 .엔n + 1
여기에서 증거는 잘못되었습니다. 올바른 증거는 아래를 참조하십시오. 나는 실수와 다음 단계 (소리가 좋은)가 교육적 일 수 있기 때문에 여기에 남겨 둡니다.
전체 순열에 대한 논쟁은 고통스럽기 때문에 유지해야하는 로컬 (즉, 요소 별) 속성을 파생시키는 것이 유용합니다. 모든 요소가 각 위치에있을 확률이 동일한 경우 순열이 균일하게 선택됩니다. 즉
∀π∈PermnPr(L=π)=1n!⟺∀i=1n ∀j=1nPr(Li=j)=1n(1)
여기서 우리는 표기법의 단순성을 위해 { 1 , … , n } 을 목록에 삽입한다고 가정 합니다.n=|L|{1,…,n}
이제, 우리가 삽입 할 때 당신의 기술이 무엇을 볼 수 있도록 번째 요소. 스왑 후 세 가지 경우를 고려해야합니다.n+1
- 목록에서 교환되지 않은 요소 중 하나, 즉 및 j ∈ { 1 , … , n }i∈{1,…,n}j∈{1,…,n}
- 목록의 요소 중 하나가 바뀌 었습니다. 즉, 및 j ∈ { 1 , … , n }i=n+1j∈{1,…,n}
- 새로운 요소, 즉 및 j = n + 1i∈{1,…,n+1}j=n+1
각 경우에 대해 요소 가 위치 i에 있을 확률을 계산합니다 . 모두 1 로 밝혀 져야한다ji ((1)때문에 충분합니다). pn=1이라고하자1n+1(1) 은 첫 번째n 개요소중 하나가이전 목록의 임의 위치에있을 확률(유도 가설)이며ps=1입니다.pn=1nn (가정 1, 2)에의해 임의의 위치가 선택 될 확률. n 개의요소가있는 목록의 코이 스와스왑 위치 선택은독립적 인 이벤트이므로 공동 이벤트의 확률은 다음과 같습니다.ps=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
위한 . 이제 계산합니다.i,j∈{1,…,n}
우리는 단지 오래된 요소 만을 고려합니다 . 이러한 요소 j는 위치에있는 난 과 마지막 삽입 전에 거기 경우만 제가 교환 위치로서 선택되어 있지이며 njii
.Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1
여기서 우리는 이전 요소 중 하나가 마지막 위치로 바뀌 었다고 생각합니다. 요소 는 이전 위치 중 하나에 있었을 수 있으므로 j 가 i 위치에 있었고 i 가 스왑 위치로 선택된 모든 확률에 대해 합산 합니다.jjii
.Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1
새 요소는 i 가 교체 위치로 선택된 경우에만 위치 에서 끝납니다.ii
.Pr(Li=j)=ps=1n+1
삽입 전략은 실제로 균일 성을 유지합니다. 유도의 힘으로, 알고리즘이 균일하게 분포 된 순열을 생성 함을 증명합니다.
경고의 한마디 : 삽입 된 요소가 서로 다른 조합이 아닌 경우이 증명은 분해됩니다. 그 이유는 첫 번째 방정식이 더 이상 유효하지 않기 때문입니다. 그러나 알고리즘은 여전히 유효합니다. 중복이있는 모든 순열은 동일한 수의 임의 실행으로 생성됩니다. 중복을 표시하여 (즉, 구별 가능하게)이를 증명하고, 위의 증명을 수행하고, 표시를 사실상 제거 할 수 있습니다. 마지막 단계는 동일한 크기의 순열 세트를 동일하게 축소합니다.
스티븐 이 주석에서 올바르게 언급 했듯이 , 위의 증거는 근본적으로 이 보유하지 않기 때문에 결함이있다 . 오른쪽을 충족하지만 왼쪽 ¹을 충족시키지 않는 순열 세트에 분포를 구성 할 수 있습니다.(1)
따라서 순열의 확률을 다루어야 할 것입니다. 결국 그다지 나쁘지 않은 것으로 판명되었습니다. random_item
포스트의 시작 부분에 요약 된 가정과 유도 구조는 그대로 유지됩니다. 하자 후리스트 나타내는 { 1 , ... , K가 } 삽입되어있다.L(k){1,…,k}
이 { 1 , … , n + 1 } 의 임의 순열 이라고하자 . 다음 과 같이 고유하게 쓸 수 있습니다.π′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
π∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1πi
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
which we had to show. By the power of induction, that proves that your algorithm creates uniformly distributed permutations.
- For example, assign every permutation in {(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)} probability 14 and all others 0. There are also examples that assign every permutation a non-zero probability.