Qual è il vantaggio di Quicksort randomizzato?


18

Nel loro libro Randomized Algorithms , Motwani e Raghavan aprono l'introduzione con una descrizione della loro funzione RandQS - Randomized quicksort - dove il perno, usato per dividere il set in due parti, viene scelto a caso.

Da un po 'di tempo mi sto rompendo il cervello (per certi versi un po' sottodimensionato), ma non sono stato in grado di vedere quale vantaggio questo algoritmo rispetto alla semplice scelta, diciamo, dell'elemento centrale (in indice, non di dimensione) ogni volta.

Suppongo che ciò che non riesco a vedere sia questo: se il set iniziale è in un ordine casuale, qual è la differenza tra scegliere un elemento in una posizione casuale nel set e scegliere un elemento in una posizione fissa?

Qualcuno può illuminarmi, in termini abbastanza semplici?

Risposte:


19

Se l'array di input viene distribuito uniformemente in modo casuale, allora (come hai notato) non c'è differenza tra scegliere sempre un elemento in una posizione fissa (ad esempio quello di mezzo come suggerisci) o scegliere un elemento scelto a caso.

Se tuttavia il tuo array di input non è realmente in ordine casuale (come accade in quasi tutti gli scenari pratici), allora è necessario "preshufle" l'array in modo che gli elementi in esso siano posizionati in ordine casuale, oppure ( equivalentemente) considera sempre un elemento casuale come perno. Ciò garantisce la fase di partizionamento delle partizioni quicksort gli array in sotto-array di dimensioni quasi uguali e quindi che il tempo di esecuzione previsto rimanga O(nlogn)

Quindi la tua confusione sembra derivare dal fatto che in qualche modo supponi che un algoritmo di ordinamento possa (in pratica) aspettarsi che l'array di input sia sempre distribuito casualmente.


7
O(nlogn)O(n2)

n!1n!

@ RobertS.Barnes Sì
Jernej

4

Come osservato da Jernej, l'ipotesi che tutte le permutazioni dell'input siano ugualmente probabili non vale sempre nella realtà. La prima idea potrebbe essere quella di permutare l'array di input. Funzionerebbe, ma è più semplice analizzare la situazione in cui un perno viene scelto a caso. Questo è anche noto come campionamento casuale .

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.