Han's


38

Qualcuno ha familiarità con Yijie Han , spazio lineare, algoritmo di ordinamento intero? Questo risultato appare in un documento abbastanza breve ( ordinamento deterministico in tempo e spazio lineare . J. Alg. 50: 96-105, 2004) che fondamentalmente incolla molti risultati precedenti, con adattamenti. Il mio problema è che è scritto in modo piuttosto agitato a mano senza andare molto in profondità nei dettagli. Si basa fortemente su documenti precedenti, tra cui spicca un altro documento di Han ( Ordinamento rapido migliorato degli interi nello spazio lineareO(nloglogn)O(nloglogn). Informazione e calcolo 170 (1): 81–94) scritti più o meno nello stesso stile. Sto avendo notevoli difficoltà a comprendere questi due articoli, in particolare il modo in cui si adattano e utilizzano i risultati precedenti. Gradirei qualsiasi aiuto.

Questo è ovviamente troppo ampio e vago per essere considerato una domanda adeguata, ma spero di sviluppare una discussione attraverso diverse domande e risposte ben definite e mirate.

Per iniziare, ecco la mia prima domanda specifica. In Lemma 2 dell'Info. Comp. carta esiste un algoritmo ricorsivo per trovare il numero intero più piccolo in un insieme di numeri interi piccoli impacchettati ciascuno in parole RAM. La descrizione dell'algoritmo non menziona come viene gestito il caso di base . In questo caso è necessario eseguire la selezione in . Come si può fare?O(n/klogk)nKK=O(n)O(logK)


13
Sarebbe perfettamente appropriato scrivergli: hanyij@umkc.edu.
Joseph O'Rourke,

Sì. Abbiamo già discusso di questo problema generale in precedenza e il modo giusto per risolverlo è inviare un'e-mail all'autore.
Suresh Venkat,

17
Ciò include una domanda specifica su un documento di 7 anni che ha già superato il processo di revisione tra pari. Mentre Ari potrebbe inviare un'e-mail all'autore, questa sembra una domanda ideale per questo sito. Non capisco la deflessione.
Huck Bennett,

18
Ovviamente la prima cosa che ho fatto è stata scrivere Han. Nessuna risposta. Poi ho contattato un altro che ha fatto una ricerca per smistamento di numeri interi e ha detto che, per esame, aveva trovato i documenti troppo disordinati per meritare ulteriori investimenti del suo tempo. Questo è quando sono venuto qui. Se c'è qualcuno là fuori che conosce Han e può attirare la sua attenzione da parte mia, sarebbe fantastico.
Ari,

4
L'ordinamento generale non ha un limite inferiore . Al contrario, è l'ordinamento limitato ai confronti che ha questo limite. Il problema qui non sta limitando l'input ma piuttosto migliorando il modello computazionale. Il mio modello computazionale è una qualsiasi delle unità RAM a costo unitario e consentirò qualsiasi ipotesi ragionevole (come la disponibilità di costanti che dipendono dalla lunghezza della parola). Ω(nlogn)
Ari,

Risposte:


18

Mi stavo giusto domandando la stessa cosa.

Fortunatamente, sono stato in grado di trovare un articolo di giornale pubblicato nel 2011 che spiega proprio questa cosa; Inoltre, non è necessario un abbonamento per visualizzarlo: implementazione e analisi delle prestazioni di ordinamento esponenziale dell'albero

Consiglio di leggere l'intero articolo per sapere come può essere implementato e per comprendere meglio la sua teoria di base. Mostra anche come gli alberi esponenziali si sovrappongono agli alberi di ordinamento rapido e binari. Ecco l'estratto pertinente relativo al tempo O ( n log log n ) di Han , spazio lineare, algoritmo di ordinamento interoO(nloglogn) :

Yijie Han ha dato un'idea che riduce la complessità al tempo previsto nello spazio lineare. [6] La tecnica da lui utilizzata è il trasferimento coordinato degli interi sull'albero di ricerca esponenziale di Andersson [8] e il tempo lineare multi-divisione dei bit degli interi. Invece di inserire un numero uno alla volta nell'albero di ricerca esponenziale, ha passato tutti gli interi un livello dell'albero di ricerca esponenziale alla volta. Tale passaggio coordinato offre la possibilità di eseguire la divisione multipla in tempo lineare e quindi di accelerare l'algoritmo. Questa idea può accelerare, ma nell'implementazione pratica è molto difficile gestire numeri interi in batch.

[6] Y. Han, ordinamento deterministico in O (n log log n) tempo e spazio lineare, 34 ° STOC, 2002.

[8] A. Andersson, Ordinamento e ricerca deterministici rapidi nello spazio lineare, Simposio IEEE su Foundations of Computer Science, 1996.


Perché il downvote?
Suresh Venkat,

1
Ho appena aggiunto questo link articolo-giornale alla pagina wikipedia dell'albero esponenziale . Cordiali saluti: Questo articolo potrebbe essere stato pubblicato dopo la domanda.
AT

@AT, potresti ampliare un po 'la tua risposta e spiegare come risponde alla domanda. In questo momento l'unica cosa che dà è un link ad un articolo in un diario.
Kaveh,

1
Bene, ho già rinunciato al documento di Han, quindi sono contento che tu sia stato in grado di fornire questo aiuto. Non mi aspettavo davvero di vedere nulla quando sono tornato qui oggi. Grazie! Leggerò questo nuovo documento e vedrò se mi aiuta a fare progressi sul documento di Han.
Ari,

2
Bene, ora l'ho letto e permetterò che forse l'ho completamente frainteso, ma a parte questo, sembra esserci un leggero problema. Gli autori affermano che il loro albero ha altezza O , ma se l'albero ha altezza h , allora ha ( h + 1 ) ! lascia, e quindi meno di 2 ( h + 1 ) ! nodi in totale. Supponiamo generosamente che ogni nodo contenga chiavi h + 2 . Quindi l'albero contiene meno di 2 ( h + 2 )(loglogn)h(h+1)!2(h+1)!h+2chiavi. Se 2 ( h + 2 ) ! = n quindi h = Ω ( registro n / registro registro n ) . Comunque, anche se gli autori hanno ragione, non ottengono l'ordinamentoO ( log log n ) , né spiegano Han, quindi non è utile. 2(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)
Ari,

1

non sono sicuro della risposta (non ho esaminato la carta) ma penso che questo dovrebbe aiutare. I numeri sono raggruppati in una sola parola, quindi le operazioni su una sola parola richiedono O (1) tempo. Se ci sono, per esempio, k numeri di h bit ciascuno, allora la dimensione della parola dipende da k, h che a sua volta dipende anche dall'intervallo di numeri. Quindi usiamo tecniche di riduzione dell'intervallo che possono ridurre l'intervallo di numeri in modo che molti numeri possano stare in una sola parola. Quindi creando maschere di bit appropriate, possiamo trovare interi più grandi separati da quelli più corti considerando due parole alla volta. Questo può essere fatto in O (1) tempo. (Ontuition: per questo ogni numero memorizzato in una parola ha un bit di bandiera associato ad esso e quindi sottraggiamo due parole ... se il bit di bandiera va allora è più piccolo un numero).

Allo stesso modo usando sopra possiamo anche ordinare qualsiasi parola contenente k numeri nel tempo O (log k) (ordinamento bitonico).

Modifica: algoritmo per ordinare 2k numeri nell'intervallo da 0 a m-1 impacchettati in una parola in cui ogni numero ha la dimensione L di = log (m + k) +2.

essere 1: 000000 1: 000000 1: 000000 1: 000000 ....... così via dove il bit prima dei due punti è anche chiamato bit flag e ogni sequenza è lunga L bit e viene ripetuta 2k volte nella parola K_1 (I due punti sono solo per la comprensione)K1

è (2k-1) (2k-2) .... 1 scritto in binario. Schizzo dell'algoritmo:K2

Ripetere l'operazione per t = log k su 0.

Parte 1: separa la parola originale Z in due parole A e B.

  1. Sia T ottenuto spostando , (posizioni L-1-t) a sinistra e ANDing il risultato con K 1 . Sia M = T- (T spostato L-1 posizioni).K2K1

  2. 2tL

  3. B = Z- (Z & M).

Parte 2

  1. K1K1

  2. M = M- (M spostato a sinistra L-1 posizioni).

  3. MIN = (B&M) OR (A- (A&M))

  4. MAX = (A&M) OPPURE (B- (B&M))

  5. 2tL

  6. Finalmente opportunamente ORing MAX e MIN torniamo Z.

Ho dato lo schizzo, spero che tu possa riempire i dettagli necessari richiesti.


Non sono chiaro su cosa stai suggerendo. L'ipotesi è che gli interi siano già piccoli e che k siano già racchiusi in una sola parola. Stai proponendo di ridurne ulteriormente le dimensioni? Se è così, cosa fai allora? Inoltre, so come ordinare una sequenza bitonica racchiusa in una singola parola nel tempo O (log k) o come ordinare una sequenza generale (non bitonica) nel tempo O (log ^ 2 k). Se conosci un algoritmo che ordina una sequenza generale in O (log k), potresti descriverla in modo più dettagliato? (Un simile algoritmo risolverebbe ovviamente il problema della selezione.)
Ari,

Non sto riducendo ulteriormente le dimensioni, stavo suggerendo come ridurre le dimensioni che non erano richieste nella tua risposta. Dispiace per la confusione.
singhsumit,

A meno che non lo abbia frainteso, questo sembra l'algoritmo per ordinare le sequenze bitoniche. Non ordina le sequenze generali. Ad esempio, ordina la sequenza 3,0,2,0, dove 3 è nel campo più a sinistra (più significativo)?
Ari,

3 0 2 0 è separato n otteniamo A = 3 2 e B = 0 0 quindi MAX diventa 3 2 e MIN è 0 0. Quindi abbiamo una nuova Z come 3 2 0 0. Qualsiasi sequenza generale ha una sequenza bitonica di dimensione 2. ad ogni iterazione queste dimensioni si raddoppiano e finalmente nel log k time abbiamo la nostra risposta.
singhsumit,

No. I numeri non vengono compattati, ma solo spostati verso il basso. Nella prima iterazione dividiamo coppie di numeri che differiscono nel bit alto della loro posizione in modo da ottenere A = 0 3 0 2 e B = 0 0 0 0, quindi MIN = 0 0 0 0, MAX = 0 3 0 2 e Z = 3 0 2 0. Nella seconda iterazione dividiamo le coppie differendo nel bit basso della loro posizione, quindi di nuovo otteniamo A = 0 3 0 2, B = 0 0 0 0 e di nuovo Z rimane invariato.
Ari,
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.