다중 집합의 분산 된 순열 두 개를 무작위로 생성하는 효율적인 알고리즘


13

배경

두 개의 동일한 대리석 배치가 있다고 가정 합니다. 각 대리석은 인 색상 중 하나 일 수 있습니다 . 하자 색상의 구슬의 수를 나타내는 각 배치에있다.c c n n i inccnnii

하자 MULTISET 수 하나 개의 배치를 나타내는. 에서는 주파수 표현 , 또한로서 기록 될 수있다 .{ n 1 1 , , 1 ,SS(1n1{1,,1n1,2,,2n2,,1c,,cnc}S(1n12n2cnc)

의 고유 한 순열 수는 다항식으로 제공됩니다 . \ left | \ mfS _ {\ msS} \ right | = \ binom {n} {n_1, n_2, \ dots, n_c} = \ frac {n!} { n_1! \, n_2! \ cdots n_c!} = n! \ prod_ {i = 1} ^ c \ frac1 {n_i!}.S

|SS|=(nn1,n2,,nc)=n!n1!n2!nc!=n!i=1c1ni!.

질문

\ msS 의 두 개의 분산 된 배열 순열 PQ 를 무작위 로 생성하는 효율적인 알고리즘이 있습니까? (분포는 균일해야합니다.)QS

  • 순열 P확산 마다 별개의 요소의 경우 iP 의 경우 i 에서 거의 균일하게 이격되는 P .

    예를 들어, S=(1424)={1,1,1,1,2,2,2,2} .

    • {1,1,1,2,2,2,2,1} 는 확산되지 않습니다
    • {1,2,1,2,1,2,1,2} 는 확산

    더 엄격하게 :

    • 경우 , 하나의 인스턴스 만이 "밖으로 공간"에 , 이렇게하자 .i P Δ ( i ) = 0ni=1iPΔ(i)=0
    • 그렇지 않으면 를 의 인스턴스 와 인스턴스  사이의 거리로  둡니다 . 인스턴스 간 예상 거리를 빼고 다음을 정의합니다. 경우 균일하게 이격되는 후 0이어야하거나 매우 가까운 제로 경우 .J J + 1 I P I δ ( I , J ) = D ( I , J ) - Nd(i,j)jj+1iPi i P Δ ( i ) n in
      δ(i,j)=d(i,j)nniΔ(i)=j=1ni1δ(i,j)2
      iPΔ(i)nin

    이제 통계량 를 정의 하여 에서 가 균등하게 간격을 두는 정도를 측정하십시오 . 가 0에 가까우거나 대략 경우 확산을 호출 합니다. (하나가 임계 값을 선택할 수 특정 되도록 확산이면 ).I P P S ( P ) ( P ) « N 2 K « 1s(P)=i=1cΔ(i)iPPs(P)s(P)n2k1 P s ( P ) < k n 2SPs(P)<kn2

    이 제약 조건 은 다중 세트 ( ) 및 밀도 바람개비 문제라고하는보다 엄격한 실시간 스케줄링 문제를 회상합니다. . 목적은 길이 의 임의의 서브 시퀀스 가 적어도 하나의 인스턴스를 포함 하도록 순환 무한 시퀀스 를 스케줄링하는 것이다. 다시 말해서, 실행 가능한 스케줄은 모든 ; 경우 치밀 ( )이면 및 . 바람개비 문제가 NP- 완전한 것으로 보입니다.a i = n / n i ρ = c i = 1 n i / n = 1 P a i i d ( i , j ) a i A ρ = 1 d ( i , j ) = a i s ( P ) = 0A=n/Sai=n/niρ=i=1cni/n=1Paiid(i,j)aiAρ=1d(i,j)=ais(P)=0

  • 두 순열 와 된다 미친 경우 A는 교란 의 ; 즉, 모든 인덱스 대해 입니다 .Q P Q P iQ i i [ n ]PQPQPiQii[n]

    예를 들어, .S=(1222)={1,1,2,2}

    • { 1 , 1 , 2 , 2 }{1,2,1,2} 및 는 정렬되지 않았습니다.{1,1,2,2}
    • { 2 , 1 , 2 , 1 }{1,2,1,2} 및 가 분리되었습니다.{2,1,2,1}

탐색 적 분석

대해 및 인 다중 세트 제품군에 관심이 있습니다. 특히, .n i = 4 i 4 D = ( 1 4n=20ni=4i4D=(1424344352617181)

  • 두 랜덤 순열을 확률 및 중 되어 미친은 3 %에 관한 것이다.Q DPQD

    가 번째 Laguerre 다항식 인 경우 다음과 같이 계산할 수 있습니다 . 설명 은 여기 를 참조 하십시오 . k | D D |Lkk

    |DD|=0dteti=1cLni(t)=0dtet(L4(t))3(L3(t))(L2(t))(L1(t))3=4.5×1011|SD|=n!i=1c1ni!=20!(4!)3(3!)(2!)(1!)3=1.5×1013p=|DD|/|SD|0.03
  • 랜덤 순열 확률 의 인 확산은 거의 임의의 임계 값 설정에 대해 0.01 % 인 .D S ( P ) < 25PDs(P)<25

    아래는 의 100,000 개 샘플에 대한 경험적 확률도입니다. 여기서 는 의 임의 순열입니다 .P Ds(P)PD

    중간 표본 크기에서 입니다.s(P)Gamma(α8,β18)

    Ps(P)cdf(s(P)){1,8,2,3,4,1,5,2,3,6,1,4,2,3,7,1,5,2,4,3}1191<105{8,2,3,4,1,6,5,2,3,4,1,7,1,2,3,5,4,1,2,3}140916<104{3,6,5,1,3,4,2,1,2,7,8,5,2,4,1,3,3,2,1,4}650972<10.05{3,1,3,4,8,2,2,1,1,5,3,3,2,6,4,4,2,1,7,5}12239136<10.45{4,1,1,4,5,5,1,3,3,7,1,2,2,4,3,3,8,2,2,6}16979189<10.80

두 개의 임의 순열이 유효 할 확률 (확산 및 배열 모두)은 약 입니다.v(0.03)(0.0001)21010

비효율적 인 알고리즘

세트의 무작위 배열을 생성하는 일반적인 "빠른"알고리즘은 거부 기반입니다.

이렇게
     P ← random_permutation ( D를 )
is_derangement ( D , P )까지P를 
반환

대략 가능한 배열 이 있기 때문에 대략 반복 이 필요 합니다. 그러나 거부 기반의 무작위 알고리즘은 반복 순서로 수행 문제에는 효율적이지 않습니다 .en!/e1/v1010

Sage가 사용하는 알고리즘 에서, 다중 집합의 무작위 배열은“가능한 모든 배열 목록에서 무작위로 요소를 선택함으로써 형성됩니다.” 그러나 열거 할 유효한 순열 이 있기 때문에 비효율적이며 , 어쨌든이를 수행하는 알고리즘이 필요합니다.v|SD|21016

추가 질문

이 문제의 복잡성은 무엇입니까? 네트워크 흐름, 그래프 채색 또는 선형 프로그래밍과 같은 친숙한 패러다임으로 줄일 수 있습니까?


당신이 "밖으로 간격"당신의 정의를하지 않으려에 대해서는 에 과 센티넬로? 즉, 단일 요소는 중간에 있어야하고 2 개는 순열을 3 분의 1로 분할해야합니다. d(i,j)n/(ni+1)0ijn+1P0=Pn+1=i
Raphael

사악한 대해 경우 어떻게됩니까 (작지만 크지 만). 우리는 심지어 않습니다 보다 확산 순열을? 우리는 분명히 두 가지 이상한 것들을 찾기 위해 변화를 서 있지 않습니다! 번 이상 요소가 발생할 수없는 것 같습니다 . S={1nk,2k}kn/2
Raphael

1
모든 확산 순열 쌍 중 모든 정렬 된 순열 쌍의 비율은 얼마입니까? 마찬가지로, 정렬 된 순열의 모든 쌍 중에서 몇 개의 확산 된 순열로 구성됩니까? (두 비율이 "높음"인 경우 프로세스의 절반에 노력을 집중하고 나머지는 거부 할 수 있습니다.)
Raphael

1
@Raphael 100 만 임의 순열 (#의 3A) , 이 561 확산 사람이 있었다 . 쌍이 . Ds(P)306118/(5612)=6118/1570803.9%
hftf

1
@Raphael (# 3b) 의 천만개의 임의의 순열 쌍 중 306893 쌍이 배열되었습니다. 이 쌍 중 29 개만 두 순열을 모두 . 다음은 히스토그램 ( values )입니다. Ds(P)50
hftf

답변:


3

한 가지 접근 방식 :이 문제를 다음 문제로 줄일 수 있습니다. 부울 수식 주어지면 만족스러운 대입 중에서 무작위 로 대입 를 임의로 선택하십시오 . 이 문제는 NP-hard이지만, 거의 균일하게 분포 된 를 생성하는 표준 알고리즘이 있습니다 . 예를 들어, 하나의 방법은 해시 함수를 선택하는 , 그 범위 (의 할당 만족의 수와 동일한 크기를 엄선 크기 갖는다 ) 랜덤 값으로 균일하게 선택할 의 범위 내에서x φ ( x ) x h φ y h φ ( x ) ( h ( x ) = y ) hφ(x)xφ(x)xhφyh그런 다음 SAT 솔버를 사용하여 수식 만족스러운 대입을 찾으십시오 . 효율적으로 만들기 위해 를 희소 선형 맵으로 선택할 수 있습니다 .φ(x)(h(x)=y)h

대포로 벼룩을 찍을 수도 있지만, 다른 접근 방법이 없다면 시도해 볼 수 있습니다.


따라하기 어려운 찾기. 는 부울 값이고 는 이진 문자열 (이진 변수 집합)입니까? 마지막 방정식은 ...? h ( x )φ(x)h(x)
vzn

0

이 문제에 대한 확장 된 토론 / 분석은 cs chat 에서 시작 하여 문제의 복잡한 요구 사항에 대한 일부 주관성을 발견했지만 명백한 오류나 감독을 찾지 못했습니다. 1

다음은 SAT를 기반으로 한 다른 솔루션과 비교할 때 상대적으로 "빠르고 더러움"이지만 디버그하기가 쉽지 않은 일부 테스트 / 분석 된 코드입니다. 그 느슨하게 개념적으로 예 다소 유사한 지역 의사 / 욕심 최적화 방식에 따라 2-OPT를 위한 TSP . 기본적인 아이디어는 일부 제약 조건에 맞는 임의의 솔루션으로 시작한 다음 개선 사항을 찾고, 탐욕스럽게 개선 사항을 검색하고 반복하고, 모든 로컬 개선 사항이 다 끝나면 종료하는 것입니다. 설계 기준은 알고리즘이 가능한 한 효율적이고 거부를 피해야한다는 것이었다.

예를 들어 SAGE [5]에서 사용되는 디 포지셔닝 알고리즘 [4]에 대한 연구가 있지만 멀티 세트를 중심으로하지는 않습니다.

단순한 섭동은 튜플에서 두 위치의 "스왑"일뿐입니다. 구현은 루비입니다. 다음은 라인 번호에 대한 몇 가지 개요 / 노트입니다.

qb2.rb (gist-github)

여기서 접근 방식은 두 개의 정렬되지 않은 튜플 (# 106)로 시작한 다음 분산을 derangesperse유지하면서 (# 97) 이라는 개념으로 결합 된 분산 (# 107)을 국부적으로 / 탐욕스럽게 개선하는 것 입니다. 튜플 쌍에서 두 개의 동일한 위치를 바꾸면 분산이 유지되고 분산이 개선 될 수 있으며 이는 분산 방법 / 전략의 일부입니다.

derange루틴 나중에 스왑 동일한 소자 (# 10)에 있지 않은 배열 요소 어레이 (MULTISET)과 스왑에 좌우로 작동한다. 마지막 위치에서 스왑이 더 이상 발생하지 않고 두 튜플이 여전히 정렬 해제되어 있으면 알고리즘이 성공합니다 (# 16).

초기 튜플을 정리하는 방법에는 3 가지가 있습니다. 두 번째 튜플 p2은 항상 섞입니다. "최고 1 차 순서"(# 128), 셔플 순서 (# 127) 및 "최하위 1 차 순서"( "최상위 마지막 순서") (# 126) 순서 로 튜플 1 ( p1)로 시작할 수 있습니다 .a.b.c.

분산 루틴 disperse은 더 복잡하지만 개념적으로 그렇게 어렵지는 않습니다. 다시 스왑을 사용합니다. 모든 요소에 대해 일반적으로 분산을 최적화하려고하기보다는 현재 최악의 경우를 반복적으로 완화하려고합니다. 아이디어는 1 개 찾을 수 있습니다 왼쪽에서 오른쪽으로 최소 분산 요소를. 섭동은 x, y가장 분산이 적은 쌍 의 왼쪽 또는 오른쪽 요소 ( 인덱스)를 다른 요소와 교환하지만 항상 분산을 감소시키는 쌍 사이에있는 요소는 절대로 바꾸지 않고 같은 요소로 교체하려는 시도를 건너 뜁니다 ( select# 71). . m쌍의 중간 점 인덱스입니다 (# 65).

그러나 분산은 각 쌍 (# 25, # 44)의 "최소 / 가장 왼쪽"분산을 사용하여 쌍 (# 40)의 두 튜플에 대해 측정 / 최적화됩니다.

알고리즘은 "가장 먼"요소를 1 ( sort_by / reverse# 71)로 바꾸려고 시도합니다 .

true, false최소 분산 쌍 (# 80)의 왼쪽 또는 오른쪽 요소를 바꿀지 여부를 결정하기위한 두 가지 전략이 있습니다 (스왑 위치의 왼쪽 요소를 왼쪽 / 오른쪽 요소로 오른쪽으로, 또는 가장 왼쪽 또는 오른쪽 요소로). 스왑 요소의 분산 쌍에서.

알고리즘은 더 이상 분산을 개선 할 수 없을 때 종료됩니다 (# 91).

통계는 c3 가지 접근 방식 (# 116) 및 c= 1000 범위 초과 분산 (# 97)에 대한 = 1000 범위 이상 거부에 대한 거부에 대해 출력되며, 거부 로부터 거리가 떨어진 쌍 (# 19, # 106)에 대한 2 개의 분산 알고리즘을 확인합니다. 후자는 총 평균 분산을 추적합니다 (확장 된 보증 해제 후). 예제 실행은 다음과 같습니다.

c       0.661000
b       0.824000
a       0.927000
[2.484, 2, 4]
[2.668, 2, 4]

이것은 a-true알고리즘이 ~ 92 % 비 거절 및 평균 최악의 분산 거리 ~ 2.6으로 가장 우수한 결과를 제공하며 1000 회 이상 시행 된 최소 2 회, 즉 모든 동일한 요소 쌍 사이에 최소 1 개의 비 균일 개입 요소를 보장합니다. 3 개의 비 균등 중재 요소만큼 높은 솔루션을 찾았습니다.

배열 해제 알고리즘은 선형 시간 사전 거부이며 (분할 된 입력에서 실행되는) 분산 알고리즘은 ~ 있습니다.O(nlogn)

문제는 "풍수"[1] 또는 "좋은"는 다소 주관적이고 아직 "공식적으로"정량화하는 "좋은"무작위 순서 소위 만족하는 quizbowl 패킷 준비를 찾을 수 있습니다; 문제의 저자는 퀴즈 커뮤니티와 "풍수 전문가"의 연구에 근거하여 문제를 분산 / 분산 기준으로 분석 / 축소했습니다. [2] "풍수 규칙"에 대한 다른 아이디어가 있습니다. 일부 "게시 된"연구는 알고리즘에 대해 수행되었지만 초기 단계에 나타납니다. [3]

[1] 패킷 풍수 / QBWiki

[2] 퀴즈 패킷 및 풍수 / Lifshitz

[3] 질문 배치 , HSQuizbowl 리소스 센터 포럼

[4] 무작위 변위 생성 / Martinez, Panholzer, Prodinger

[5] 세이지 배열 알고리즘 (python) / McAndrew


참고로, derange 루틴에 결함이 있으며 항상 derange되지는 않습니다. 스왑 위치는 아무 것도 바꾸지 않고 진행될 수 있습니다. 성공을 올바르게 테스트하기위한 간단한 수정 사항이 있습니다.
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.