Limitato allo spazio per l'algoritmo di selezione?


11

Esiste un noto algoritmo di selezione caso peggiore per trovare il 'esimo elemento più grande in un array di numeri interi. Usa un approccio mediano delle mediane per trovare un pivot abbastanza buono, partiziona l'array di input sul posto e poi ricorsivamente continua nella sua ricerca dell'elemento più grande.O(n) KK

E se non ci fosse permesso di toccare l'array di input, quanto spazio aggiuntivo sarebbe necessario per trovare il 'esimo elemento più grande nel tempo ? Potremmo trovare il 'esimo elemento più grande nello spazio extra di e mantenere comunque il runtime ? Ad esempio, trovare l'elemento massimo o minimo richiede tempo e spazio. KO(n)KO(1)O(n)O(n)O(1)

Intuitivamente, non riesco a immaginare che potremmo fare meglio di spazio, ma c'è una prova di questo?O(n)

Qualcuno può indicare un riferimento o elaborare un argomento per cui il 'elemento richiederebbe che O ( n ) spazio fosse trovato nel tempo O ( n ) ?n/2O(n)O(n)


2
Non sono un esperto, ma forse questi articoli sono utili: limiti di spazio-tempo
Vor

Risposte:


13

È un problema aperto se puoi fare la selezione con tempo e O ( 1 ) celle di memoria extra senza cambiare l'ingresso (vedi qui ). Ma puoi avvicinarti molto a questo.O(n)O(1)

O(n1+ε)O(1/ε)ε>0

O(n)pp

pUN(K)ε=1/KUN(K)UN(K-1)UN(1)algoritmo. La giusta dimensione del blocco (e facendo i calcoli) ti dà tempo di esecuzione e requisiti di spazio come indicato sopra.

A proposito, gli algoritmi che stai cercando, sono stati recentemente chiamati algoritmi di spazio di lavoro costante .

Non sono a conoscenza di alcun limite inferiore.

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.