셔플 알고리즘의 정확성을 증명하는 방법?


24

임의의 순서로 항목 목록을 생성하는 두 가지 방법이 있으며 이들이 공정하게 공정한지 (비 편향적인지) 확인하고 싶습니다.

내가 사용하는 첫 번째 방법은 전체 요소 목록을 구성한 다음 셔플을 수행하는 것입니다 (예 : Fisher-Yates 셔플). 두 번째 방법은 매번 삽입 할 때마다 목록을 셔플 링하는 반복적 인 방법입니다. 의사 코드에서 삽입 기능은 다음과 같습니다.

insert( list, item )
    list.append( item )
    swap( list.random_item, list.last_item )

나는이 특정 셔플 링의 공정성을 보여주는 방법에 관심이 있습니다. 이 알고리즘이 사용되는 곳의 장점은 약간 불공평하더라도 괜찮을 것입니다. 결정하기 위해서는 공정성을 평가할 방법이 필요합니다.

첫 번째 아이디어는이 방법으로 가능한 총 순열 대 최종 길이 집합에 가능한 총 순열을 계산해야한다는 것입니다. 그러나이 알고리즘으로 인한 순열을 계산하는 방법에 대해서는 약간의 손실이 있습니다. 또한 이것이 최선의 방법인지 또는 가장 쉬운 방법인지 확신 할 수 없습니다.


많은 수의 알고리즘 실행에 대한 통계 샘플을 수행하여 예상 값과 비교하거나 일종의 임의성 테스트를 수행 할 수 있습니다.
Dave Clarke

분포를 테스트하려고합니다. 균일하게 분포되어 있습니까? 그러나 여러 번 실행해야한다고 생각합니다.
Dave Clarke

내가 어떻게 할 지 잘 모르겠습니다. 그것은 내가 따르는 내용의 무작위가 아니라 순서의 무작위입니다. 주문 분포를 측정 할 수있는 방법은 무엇입니까?
edA-qa mort-ora-y

아, 바보 나, 고정 입력 세트를 사용하고 각 요소의 최종 위치를 사용하여 분포를 얻을 수 있습니다. 그래도 실제로 시뮬레이션보다 더 많은 논리적 증거를 선호합니다.
edA-qa mort-ora-y

@ edA-qamort-ora-y : 당신의 소원은 나의 명령입니다. ;)
Raphael

답변:


22

먼저 두 가지 명백하지만 중요한 가정을 가정 해 보겠습니다.

  1. _.random_item 마지막 위치를 선택할 수 있습니다.
  2. _.random_item확률로 모든 위치를 선택 .1+1

알고리즘의 정확성을 입증하려면 여기에 사용 된 것과 유사한 유도 인수가 필요합니다 .

  • 싱글 톤리스트의 경우 하나의 가능성 만 있으므로 균일하게 선택됩니다.
  • 원소를 가진리스트가 (모든 순열에서) 균일하게 선택 되었다고 가정하면 , 당신의 기술에 의해 얻어진 n + 1 개의 원소를 가진리스트 가 균일하게 선택되었음을 보여라 .+1

여기에서 증거는 잘못되었습니다. 올바른 증거는 아래를 참조하십시오. 나는 실수와 다음 단계 (소리가 좋은)가 교육적 일 수 있기 때문에 여기에 남겨 둡니다.

전체 순열에 대한 논쟁은 고통스럽기 때문에 유지해야하는 로컬 (즉, 요소 ​​별) 속성을 파생시키는 것이 유용합니다. 모든 요소가 각 위치에있을 확률이 동일한 경우 순열이 균일하게 선택됩니다. 즉

πPermnPr(L=π)=1n!i=1n j=1nPr(Li=j)=1n(1)

여기서 우리는 표기법의 단순성을 위해 { 1 , , n } 을 목록에 삽입한다고 가정 합니다.n=|L|{1,,n}

이제, 우리가 삽입 할 때 당신의 기술이 무엇을 볼 수 있도록 번째 요소. 스왑 후 세 가지 경우를 고려해야합니다.n+1

  1. 목록에서 교환되지 않은 요소 중 하나, 즉 j { 1 , , n }i{1,,n}j{1,,n}
  2. 목록의 요소 중 하나가 바뀌 었습니다. 즉, j { 1 , , n }i=n+1j{1,,n}
  3. 새로운 요소, 즉 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_itemn

Pr(Li=j,i swapped)=Pr(Li=j)Pr(i swapped)=pnps

위한 . 이제 계산합니다.i,j{1,,n}

  1. 우리는 단지 오래된 요소 만을 고려합니다 . 이러한 요소 j는 위치에있는 과 마지막 삽입 전에 거기 경우만 제가 교환 위치로서 선택되어 있지이며 njii

    .Pr(Li=j)=pn(1ps)=1nnn+1=1n+1

  2. 여기서 우리는 이전 요소 중 하나가 마지막 위치로 바뀌 었다고 생각합니다. 요소 는 이전 위치 중 하나에 있었을 수 있으므로 ji 위치에 있었고 i 가 스왑 위치로 선택된 모든 확률에 대해 합산 합니다.jjii

    .Pr(Ln+1=j)=i=1npnps=i=1n1n1n+1=1n+1

  3. 새 요소는 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),,π(i1),n+1,π(i+1),,π(n),π(i))

πPermni{1,,n+1}Pr(L(n)=π)=1n!random_itemi1n+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.


  1. 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.

4
'Observe that a permutation is uniformly chosen if every element has equal probability of being at each position' - this isn't true. For instance, the set of four permutations on four elements {(1, 2, 3, 4), (2, 3, 4, 1), (3, 4, 1, 2), (4, 1, 2, 3)} satisfies your constraint, but obviously isn't the set of all permutations. Unfortunately you have to use global properties of your permutation because no local conditions are enough to determine uniformity.
Steven Stadnicki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.