Ordinamento con una media di


10

Esiste un algoritmo di ordinamento confronto-based che utilizza una media di confronti?lg(n!)+o(n)

Esistenza di un caso peggiore algoritmo di confronto è un problema aperto, ma i suffissi caso medio per un algoritmo randomizzato con previsto l g ( n ! ) + O ( n ) confronti per ogni ingresso . Il significato di l g ( n ! ) + O ( n ) è che è o ( n ) confronti dall'ottimale, sprecando una media di solo olg(n!)+o(n)lg(n!)+o(n)lg(n!)+o(n)o(n) confronti per elemento.o(1)

Dal momento che ho già un tale algoritmo, lo sto includendo come risposta (usando il formato Q / A ), ma accolgo con favore ulteriori risposte, inclusi altri algoritmi, se tale algoritmo fosse già noto, migliorando e peggio- case l g ( n ! ) + o ( n ) .o(n)lg(n!)+o(n)

Lavoro precedente:
Unisci ordinamento utilizza confronti (anche nel caso peggiore). Merge-inserzione (noto anche come Ford-Johnson sort) utilizza anche l g ( n ! ) + Θ ( n ) confronti ma con una costante molto più piccolo in Θ ( n ) . Miglioramento della complessità media per l'ordinamento basato sul confronto (di Kazuo Iwama e Junichi Teruyama) - il loro algoritmo di inserimento (1,2) ricorda una parte della mia risposta di seguito.lg(n!)+Θ(n)
lg(n!)+Θ(n)Θ(n)


Questa domanda si sovrappone all'ordinamento del confronto randomizzato ottimale , ma data la diversa enfasi (comportamento asintotico specifico qui - rispetto allo stato generale di conoscenza, tutte le dimensioni di input e la differenza dal caso peggiore lì), ho deciso di usare una nuova domanda.
Dmytro Taranovsky,

Risposte:


4

Aggiornamento: Ho ampliato questa risposta in un documento ordinamento con una media di confrontilg(n!)+o(n) .

Sì, esiste un tale algoritmo. Dimostrerò solo legato, ma in base a una presunta ipotesi di randomizzazione otteniamo anche l g ( n ! ) + O ( n 1 - ε ) . Descriverò anche un tentativo per n 0,5 + o ( 1 ) e O ( n 0,5 - ε ) .lg(n!)+o(n)lg(n!)+O(n1ε)n0.5+o(1)O(n0.5ε)

Possiamo presumere che tutti gli elementi siano distinti, annotandoli se necessario; il caso medio utilizza elementi distinti in ordine casuale. Possiamo calcolare il numero medio di confronti aggiungendo la perdita di entropia per ciascun confronto rispetto all'uso di una moneta equa.

Il punto di partenza è insertion sort con una ricerca binaria per decidere dove inserire l'elemento successivo nella ordinata sottoinsieme . Quando ( 1 - ε ) 2 m| S | 2 m - 1 , un inserimento utilizza al massimo m confronti, che (in termini di entropia) è ottimale fino a un fattore additivo O ( ε ) (e per la complessità del caso medio, 2 m| S |( 1 + ε ) 2 mS(1ε)2m|S|2m1mO(ε)2m|S|(1+ε)2mfunziona anche). Ora, quando non è vicino a una potenza di 2, l'inserimento di un elemento A non è ottimale (anche nel caso medio e indipendentemente da come bilanciamo ogni query), ma se si sprecano o ( 1 ) confronti, si potrebbe indirizzare A a una distribuzione approssimativamente uniforme su un intervallo di S di lunghezza vicino a una potenza di 2, otteniamo l'ottimalità desiderata.|S|Ao(1)AS

Raggiungiamo questo obiettivo aggiungendo elementi in lotti e talvolta confrontando in modo efficiente elementi del lotto tra loro, in modo tale che l'intervallo di corrispondente a un elemento A diminuisca in modo quasi casuale (e con la distribuzione di probabilità di A all'interno dell'intervallo quasi uniforme), e quando la lunghezza dell'intervallo è abbastanza vicino a una potenza di 2, facendo la ricerca binaria per inserire a .SAAA

Costrutti comuni

Manterremo un sottoinsieme di elementi ordinati, e per ciascun elemento indifferenziati A , terremo traccia del minimo dell'intervallo I A di S dove A è noto per essere collocata. | I A | è la lunghezza di I A ; I A = I B è in base all'identità degli intervalli.SAIASA|IA|IAIA=IB

Sia essere: confronta A con B , quindi (in ordine casuale) confronta A e B con gli elementi corrispondenti di S fino a quando i loro intervalli sono disgiunti (o hanno lunghezza 1). L'elemento di S è scelto (in modo coerente) per rendere le probabilità per il confronto più vicino a 1/2 come possibile, presumendo che quando C o m p a r e viene chiamato, ( A , B )Compare(A,B)ABABSSCompare(A,B)è distribuita uniformemente su . A causa della disgiunzione alla fine, C o m p a r e preserva l'assunzione uniformità.IAIBCompare

Le seguenti sezioni possono essere lette indipendentemente l'una dall'altra.

A algoritmolg(n!)+o(n)

Dato: un elenco ordinato e un batch di m elementi non ordinati; m ω ( 1 ) o ( | S | ) ; gli elementi indifferenziati sono relative casuale S .Smmω(1)o(|S|)S

Ripeti (1) - (3) quando possibile:
1. Scegli due elementi e B dal lotto con I A = I B (qualsiasi scelta funzionerà). 2. Eseguire C o m p a r e ( A , B ) . 3. Se | I A | è abbastanza vicino a una potenza di 2, (nota 1) rimuovere A dal lotto (senza dimenticare I A ); e fare in modo simile con B . Infine: inserisci tutti gli elementi inABIA=IB
Compare(A,B)
|IA|AIAB
e completa l'ordinamento.S

Nota 1: per "abbastanza vicino", qualsiasi errore relativo (in funzione di m ) funziona fintanto che gli elementi m - o ( m ) saranno rimossi nel passaggio (4) (possibile con la nota 2). In base a un'ipotesi di randomizzazione congetturata, l'uso di c log log m / log m errore relativo acquisisce m ( 1 - log - Θ ( c ) m ) elementi, consentendo a l g ( n ! )o(1)mmo(m)cloglogm/logmm(1logΘ(c)m) algoritmo di ordinamento comparativo medio.lg(n!)+O(nloglogn/logn)

Nota 2: poiché la stessa sequenza di confronti porta allo stesso intervallo di delimitazione, quasi tutti gli elementi passeranno attraverso i passaggi (1) volte (a meno che non vengano rimossi nel passaggio 4). All'inizio, se A < B e scegliamo A , confrontiamo A con l'elemento S [ ( 1 - 1 / Ω(logm)A<BAAe ogni applicazione del passaggio da (3) adAhaprobabilitàO(1)di ridurre| IA| in1/(1-1/S[(11/2)|S|]AO(1)|IA|volte. Ora per ogni rapportoa>1che non è un potere razionale di 2, abbiamoε>0d>0m,nN1/(11/2)a>1, e quindi otteniamo illimiteo(n).ε>0d>0m,nN1ε<amd2n<1+εo(n)

Un probabile algoritmo lg(n!)+O(n1ε)

Modulo un'ipotesi di randomizzazione, possiamo ottenere i confronti medi come segue.lg(n!)+O(n1ε)

  • Mescola casualmente gli oggetti e ordina la prima metà in un elenco , mantenendo la seconda metà come batch non ordinato.S


  • AbatchG={Bbatch:|P(A<B)0.5|<n0.51ε}GAS

    1. BGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA|nεAS
    2. BGCompare(A,B)BG

AnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1ε)AB

Compare(A,B)ε(1ε)/4/log4/320.09

Un approccio forse molto migliore è attendere fino a quando un intervallo è vicino a una potenza di 2, controllando non le singole lunghezze dell'intervallo ma le distribuzioni delle lunghezze.

lg(n!)+n0.5+o(1)

|S|=nnIA|IA|n1o(1)|IA|2lg|IA|A<S[i]n0.5+o(1)
|IA|2lg|IA|

S

|IA|2lg|IA||IA|/2lg|IA||IA|2lg|IA|

Compare(A,B)P(A<B)0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)kΘ(logk)k

1/2+n0.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)n1o(1)nε/2o(1)lg(n!)+O(n1ε)O(n0.5ε)ε

lg(n!)+o(n)1.5n+o(n)(2+ε)nO(1)


1
Penso che dovresti scrivere questo come un documento.
Emil Jeřábek,

@ EmilJeřábek Concordato. Come sito a livello di ricerca, molte domande e risposte qui sono mini-documenti, ma con la lunghezza e l'importanza qui, è desiderabile un documento formale. Sentiti libero di farmi sapere (a dmytro@mit.edu) su quali parti dovrebbero essere espanse nel documento (con questa risposta che rimane come una versione concisa).
Dmytro Taranovsky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.