L'ordinamento dei numeri interi è possibile in O (n) nel modello transdicotomico?


9

Per quanto ne so, non esiste un algoritmo caso peggiore che risolva il seguente problema:O(n)

Data una sequenza di lunghezza composta da numeri interi finiti, trova la permutazione in cui ogni elemento è minore o uguale al suo successore.n

Ma c'è una prova che non esiste, nel modello di calcolo transdicotomo ?


Nota che non sto limitando l'intervallo degli interi. Non sto nemmeno limitando le soluzioni ai tipi di confronto.


Per quanto ne so, potrebbe esserci un algoritmo time per SAT! Quindi la risposta è no. O(n)
Lembik,

5
AFAIK, questo è ancora un problema aperto.
Juho,

2
Non so se ci può essere una risposta significativa fino a quando non specifichi quale modello di calcolo stai usando, dato che non stai limitando il tuo computer a confronti e scambi. Con solo la RAM e confronti a due numeri, un argomento di entropia fornisce un limite di tempo ( n ) ) , anche per i computer transdicotomi. In sostanza, se invece di swap e confronti, l'ordinamento è un'operazione elementare, può essere fatto in Θ ( 1 ) . Se inserire un numero intero nel posto giusto è un'operazione elementare, Θ ( n )Ω(nlog(n))Θ(1)Θ(n) . Avevi in ​​mente uno specifico modello di scambio oltre-confronto?
Lieuwe Vinkhuijzen,

2
@LieuweVinkhuijzen La mia domanda specifica il modello di calcolo transdicotomo. In parole povere: un modello di calcolo in cui la dimensione della parola della macchina è abbastanza grande da contenere qualsiasi numero intero del problema. Quindi confrontare ogni due numeri interi è O (1), ma lo è anche aggiungere, moltiplicare, ecc. In questo modello di calcolo il limite entropico è già stato battuto, vedi Han, Yijie (2004), "Ordinamento deterministico nel tempo O (n log log n) e nello spazio lineare" .
orlp

@orlp vedo; se approfitti della struttura degli interi, puoi battere il limite entropico. Non sapevo dell'ordinamento dei numeri interi; Sarò sicuro di leggere su questo argomento!
Lieuwe Vinkhuijzen,

Risposte:


4

I numeri interi possono essere ordinati in modo stabile nel tempo con O ( 1 ) spazio aggiuntivo. O(n)O(1)Più precisamente, se hai numeri interi nell'intervallo [ 1 , n c ]n[1,nc] , possono essere ordinati in tempo O (n).

Ciò è stato dimostrato solo un paio d'anni fa da una squadra tra cui il defunto Mihai Pătrașcu (che non dovrebbe sorprendere nessuno che abbia familiarità con il suo lavoro). È un risultato notevole che sono sorpreso dal fatto che molte persone non lo sappiano, perché significa che il problema dell'ordinamento degli interi è (teoricamente) risolto.

C'è un algoritmo pratico (indicato nel documento sopra) se ti è permesso modificare le chiavi. Fondamentalmente, puoi comprimere numeri interi ordinati più di quanto puoi comprimere numeri interi non ordinati e lo spazio aggiuntivo che guadagni è esattamente uguale alla memoria aggiuntiva necessaria per eseguire l'ordinamento radix. Offrono anche un algoritmo poco pratico che supporta chiavi di sola lettura.


1
Da quello che posso capire dall'astratto questo non è generale: può solo ordinare le parole fino a in dimensioni in O ( n ) . La mia domanda menziona esplicitamente numeri interi illimitati. lognO(n)
orlp,

@orlp Il terzo algoritmo nel documento parla di numeri interi di lunghezza illimitata.
Pseudonimo del

1
Forse sto leggendo male, ma posso solo vedere una descrizione di un metodo per ridurre l' utilizzo della memoria degli algoritmi di ordinamento intero senza limiti. Citando dall'abstract (sottolineatura mia): "Un'altra questione interessante è il caso di arbitraria . Qui presentiamo una trasformazione black-box da qualsiasi algoritmo di ordinamento RAM in un algoritmo di ordinamento che utilizza solo O (1) spazio extra e ha lo stesso tempo di esecuzione ". c
Orlp,

3
Perdonami, ma allo stato attuale questa risposta non risponde affatto alla domanda . Ho esplicitamente menzionato che gli interi non sono limitati . Questa risposta risolve un problema completamente diverso.
orlp

1
Il punto finale ora non è più in un carattere piccolo :)
orlp

-1

O(bn)bn

Se non vi è alcun limite superiore per la dimensione dei numeri interi, non credo che esista un algoritmo di ordinamento lineare-temporale noto.


5
Benvenuto! Quello che dici è completamente vero ma non credo che risponda alla domanda. La domanda richiede specificamente una prova che l'algoritmo richiesto non esiste in un particolare modello di calcolo; il semplice dire che non è noto alcun algoritmo di questo tipo non dimostra che non esista.
David Richerby,

In realtà, essendo una costante del nostro problema, ritengo che questo algoritmo sia in o (n)
RFC 2549,

2
bnO(n)o(n)

Sì, sicuramente un errore di battitura;) nella sua domanda, poiché supponi che un numero corrisponda a una parola di lunghezza b, diventa una costante.
RFC 2549,

1
Questo non sta facendo della lunghezza delle parole una costante. (In caso contrario, non ci sarebbe motivo di ritenere in modo esplicito "che le operazioni su singole parole assumono un tempo costante per ogni operazione".
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.