업데이트 : 나는이 답변을 평균 비교lg(n!)+o(n) 로 종이 정렬 로 확장했습니다 .
예, 그러한 알고리즘이 존재합니다. 나는 바운드 만 증명할 것이지만 무작위 배정 가정에서는 . 또한 및 시도에 대해서도 설명합니다 .l g ( n ! ) + O ( n 1 - ε ) n 0.5 + o ( 1 ) O ( n 0.5 - ε )lg(n!)+o(n)lg(n!)+O(n1−ε)n0.5+o(1)O(n0.5−ε)
필요한 경우 주석을 달아 모든 요소가 고유하다고 가정 할 수 있습니다. 평균 사례는 고유 한 요소를 임의 순서로 사용합니다. 우리는 공정한 동전을 사용하는 것과 비교하여 각 비교에 대한 엔트로피 손실을 추가하여 평균 비교 수를 계산할 수 있습니다.
시작점은 정렬 된 서브 세트 다음 요소를 삽입 할 위치를 결정하기 위해 이진 검색을 사용한 삽입 정렬입니다 . 경우 , 삽입은 최대 비교를 사용하며 , 엔트로피 측면에서 최대 가산 계수까지 (최소의 경우 복잡도는 도 작동합니다). 이제2의 거듭 제곱에 가까우면 요소 삽입이 (최소의 경우에도 각 쿼리의 균형을 잡는 방법에 관계없이) 차선책이지만 비교를 낭비하면 를 대략 균일 한 분포로 조정할 수 있습니다 간격을두고( 1 − ε ) 2 m ≤ | S | ≤ 2 m - 1 m O ( ε ) 2 m ≤ | S | ≤ ( 1 + ε ) 2 m | S | A o ( 1 ) A SS(1−ε)2m≤|S|≤2m−1mO(ε)2m≤|S|≤(1+ε)2m|S|Ao(1)AS2의 거듭 제곱에 가까운 길이의 는 원하는 최적 성을 얻습니다.
요소를 배치로 추가하고 때로는 배치의 요소를 서로 효율적으로 비교 하여 요소 해당하는 의 간격이 준 무작위 방식으로 감소 하고 간격 내에서 의 확률 분포가 감소 하도록이를 달성합니다. 간격 길이가 2의 거듭 제곱에 충분히 가까울 때 이진 검색을 수행하여 를 삽입하십시오 .A A ASAAA
일반적인 구성
우리는 부분 집합 유지합니다 정렬 된 요소를, 각 분류되지 않은 요소에 대한 , 우리는 최소한의 간격을 추적 유지합니다 의 위치 할 알려져있다. 의 길이이며 ; 는 구간의 동일성에 의한 것입니다.A I A S A | I | I A I A = I BSAIASA|IA|IAIA=IB
하자 수 : 비교 가진 하고 (임의의 순서로) 비교 와 대응 구성 요소에 대해 그들의 간격 (또는 길이 1을 가지고) 해체 될 때까지. 가 호출 될 때 가 균일하게 분포되어 있다고 가정 할 때, 의 요소는 (일관된 방식으로) 비교 확률을 1/2에 가깝게 만들기 위해 . 는 결국 불일치 때문에 균일 성 가정을 유지합니다.A B A B S S C o m p a r e ( A , B ) I A ⨯ I B C o m p a r eCompare(A,B)ABABSSCompare(A,B)IA×IBCompare
다음 섹션은 서로 독립적으로 읽을 수 있습니다.
알고리즘lg(n!)+o(n)
다음과 같이 주어진다 : 정렬 된리스트 , 분류되지 않은 요소 들의 배치 ; ; 분류되지 않은 요소는 대해 무작위 입니다.m m ∈ ω ( 1 ) ∩ O ( | S | ) SSmm∈ω(1)∩o(|S|)S
가능하면 (1)-(3)을 반복하십시오.
1. 배치에서 를 사용하여 두 개의 요소 와 를 선택하십시오 (모든 선택이 작동 함).
2. 실행하십시오 .
3.2의 거듭 제곱에 충분히 가까우며 (주 1) 배치에서 를 제거 합니다 ( 를 잊지 ). 와 유사하게 수행하십시오 . 마지막으로 : 모든 요소를 삽입 하고 정렬을 완료하십시오.B I A = I B C o m p a r e ( A , B ) | I | A I A B SABIA=IB
Compare(A,B)
|IA|AIAB
S
주 1 : "닫기"충분히 임의 들어 (의 함수로서 상대 오차 만큼 작동) 요소가 단계 (4)에서 제거한다 (주 2 가능). 추정 된 무작위 배정 가정에서 상대 오류를 사용하면 요소를 캡처 하여 평균 비교 정렬 알고리즘.m m - o ( m ) c 로그 로그 m / log m m ( 1 - log - Θ ( c ) m ) l g ( n ! ) + O ( n log log n / log n )o(1)mm−o(m)cloglogm/logmm(1−log−Θ(c)m)lg(n!)+O(nloglogn/logn)
참고 2 : 동일한 비교 순서로 동일한 경계 간격이 생성되므로 거의 모든 요소가 단계 (1) 시간 을 거치게됩니다 ( 4 단계에서 제거하지 않은 경우). 만약 처음에는 우리가 선택 우리는 비교 소자에 대하여 및 단계 (3)의 각 애플리케이션 갖고 감소 가능성 에서 번. 이제 합리적 2가 아닌 모든 비율에 이므로A < B A A S [ ≈ ( 1 − 1 / √Ω(logm)A<BAAAO(1)| I| ≈1/(1−1/ √S[≈(1−1/2–√)|S|]AO(1)|IA|a>1∀ε>0∀d>0∃m,n∈N≈1/(1−1/2–√)a>1o(n)∀ε>0∀d>0∃m,n∈N1−ε<amd2n<1+εo(n) 경계.
가능한 알고리즘lg(n!)+O(n1−ε)
모듈로 랜덤 화 가정, 다음과 같이 평균 비교를 달성 할 수 있습니다.lg(n!)+O(n1−ε)
무작위로 항목을 섞고 첫 번째 절반을 목록 로 정렬 하고 두 번째 절반은 정렬되지 않은 배치로 유지하십시오.S
배치가 비워 질 때까지 반복
하십시오 : 임의로 선택하십시오 . 하자 . 가 비어 있으면 배치에서 를 제거 하고 삽입 합니다. 그렇지 않으면:G = { B ∈ 배치 : | P ( A < B ) − 0.5 | < n − 0.51 ε } G A SA∈batchG={B∈batch:|P(A<B)−0.5|<n−0.51ε}GAS
- 이 경우 같은 그 확률 (≥0.05 말), 만드는내 2의 거듭 제곱의 상대 오차를 실행 성공했을 경우 (예 : 내에 2의 거듭 제곱의 상대 오차) 배치에서 를 제거 하고 삽입 합니다.Θ ( 1 ) C o m p a r e ( A , B ) | I | n − ε C o m p a r e ( A , B ) | I | n - ε A SB∈GΘ(1)Compare(A,B)|IA|n−εCompare(A,B)|IA|n−εAS
- 그러한 가 없으면 임의의 대해 를 실행 .C o m p a r e ( A , B ) B ∈ GB∈GCompare(A,B)B∈G
우리의 랜덤 화 가정이 잘 풀리면 (즉, 간격 길이와 위치의 분포가 충분히 랜덤 한 경우), 대부분의 프로세스에서 전형적인 를 요소 의 선택과 효율적으로 비교할 수 있습니다 ( 다른 간격 길이). 따라서, 우리는 일반적으로 위의 (1)에 대한 비교를 선택할 수 있습니다, 우리는 비교 결과에 재수 경우, 우리는 여전히 수 (경우에 따라서 달성 가능성 충분히 작은이며, 0.01 말)를 비교 알고리즘. 일부 변경 및 근사치로, 총 컴퓨팅은 quasilinear 할 수 있습니다 요소 감안할 때n Θ ( 1 ) n Θ ( 1 ) Θ ( log n ) ε l g ( n ! ) + O ( n 1 − ε ) A BAnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1−ε)A유망한 간격 길이를 계산 한 다음 대략적인 중심과 간격 길이로 를 찾습니다 .B
비교를 최적화하는 방법에는 여러 가지가 있지만 각 비교는 불행한 결과가 될 수 있으며 비교 횟수가 제한되어 있습니다. 최적화 후 가 평균 4 비교를 수행하고 1/4 확률로 '성공'하면 .ε ≈ ( 1 - ε ) / 4 / 로그 4 / 3 2 ≈ 0.09Compare(A,B)ε≈(1−ε)/4/log4/32≈0.09
더 좋은 방법은 구간이 2의 거듭 제곱에 가까워 질 때까지 대기하여 개별 구간 길이가 아니라 길이 분포를 제어하는 것입니다.
알고리즘 시도lg(n!)+n0.5+o(1)
이고 하여 간격을 요소 의 분류되지 않은 배치가 있다고 가정하십시오. 일반적으로 및 는 균일하게 분포되어 있습니다 (임의의 오류까지, 조절 되더라도 충분한 정밀도로 유지 ). 그런 다음 평균 비교를 낭비하는 항목을 다음과 같이 정렬 할 수 있습니다 .
(*) 모든 요소를 초기 순서로 삽입하십시오. . 이렇게하면 간격 길이가 2의 거듭 제곱에 가까워지면 모든 요소가 삽입됩니다.|S|=nnIA|IA|n1−o(1)|IA|2⌊lg|IA|⌋A<S[i]n0.5+o(1)
|IA|2⌊lg|IA|⌋
정렬 알고리즘은 다음과 같습니다. 목록을 임의로 섞고 전반부 정렬합니다 . 후반부를 삽입하려면 분포를 올바르게 만들고 위의 (*)를 수행하십시오.S
만들기 위해 분포 권한, 우리는 '무작위'분포를 만든 다음 각 는 나머지를 무작위 화하면서 (필요한 경우 반복). 그러나 이것은 전 세계적으로 필요한 정밀도로 로컬에서 제어 할 수 있는지 여부를 알 수 없습니다 (따라서 위의 "시도"라는 단어).|IA|2⌊lg|IA|⌋|IA|/2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋
'무작위'분포를 만들기 위해 , 초기 모두 동일하면 서브 로그 깊이에서 무작위 화를 기대하지 않는다는 점을 제외하고 와 함께 를 무작위로 사용할 수 있습니다 (즉, 긴 ). 그러나, 나는 우리의 일반화를 사용하여 (아마 합리적인 선택이 작동합니다)를 sublogarithmic 깊이에 무작위 배정을받을 것으로 추측 하는 요소를 우리가 계속하는 경우 요소가 얽혀 (즉, 비교 결과를 사용하여 연결됨), 와의 각 비교 에 대해 약 비 정류 선택 이 있어야합니다 . 이것은 허용해야합니다Compare(A,B)P(A<B)≈0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)원하는대로 임의 추출 깊이 요소가 얽 히기 위해 깊이 가 필요하기 때문에 가 너무 크지 않다고 가정 ). 충분히 작은 사용하면 계산을 준 선형으로 만들 수 있다고 기대합니다 .kΘ(logk)k
yes 확률 과 비교할 때 yes 확률은 엔트로피 만 낭비하기 때문에 경계 구간에서 요소의 초기 무작위 화 및 약간의 불균일성은 만 필요합니다. 엔트로피 폐기물. 분포 형성이 충분히 성공하면, 엔트로피 폐기물은 주로 (*) 동안의 간격 길이 불일치로 인해 발생합니다 (따라서 ).1/2+n−0.5O(1/n)no(1)n0.5+o(1)
가능한 조합 :lg(n!)+O(n0.5−ε) 분포 형성이 제대로 작동하고 배치 크기를 하고 위의 (*)에서 요소를 선택적으로 거부 하면 엔트로피 폐기물 이있는 요소를 제외한 모든 요소를 삽입 할 수 있습니다. 다음과 같습니다. 스플릿 로 삽입시 거의 동일한 간격 및하면 간격에 가라 앉았을 거부 간격 따라서 이러한 간격의 길이의 변화를 감소 너무 긴 경우 (즉, 삽입 취소)|S|+n0.5+ε≈n0.5+ε≈n0.5+εn0.5−ε/2+o(1)SnεIAΘ(nε/2)시간은 필요에 따라 임의의 길이 간격 의 길이 변화를 시간으로 줄입니다. 이제 우리는 위의 알고리즘을 사용하여 이 작 으면 낭비가 있는 나머지 요소를 삽입 할 수 있습니다 충분히. n ε / 2 - o ( 1 ) l g (n!)+O( n 1 - ε )O( n 0.5 - ε ′ ) εn1−o(1)nε/2−o(1)lg(n!)+O(n1−ε)O(n0.5−ε′)ε
최악의 정렬 복잡성 : 최악의 비교 와 정렬 알고리즘이있을 가능성이 높습니다 . 중앙값을 찾기 위해 평균 사례 ( 비교)와 최악의 경우 (적어도 비교) 사이에 선형 갭이 있습니다. 그러나 정렬에는 비교를 정렬하고 새로운 정렬 알고리즘을 찾는 데 많은 자유가 있습니다.1.5 N + O ( N ) ( 2 + ε ) N - O ( 1 )lg(n!)+o(n)1.5n+o(n)(2+ε)n−O(1)