Cercare di capire i confronti di 2N lnN per quicksort


13

Stavo analizzando Quicksort nel libro Algorithms di Sedgewick. Crea la seguente relazione di ricorrenza per il numero di confronti in quicksort mentre ordina una matrice di N elementi distinti.

inserisci qui la descrizione dell'immagine

Sto facendo fatica a capire questo ... So che ci vuole 1 / N probabilità per qualsiasi elemento di diventare il perno e che se k diventa il perno, allora l'array secondario sinistro avrà elementi k-1 e sub-destro l'array avrà elementi Nk.

1.Come diventa il costo del partizionamento N + 1? Ci vuole N + 1 confronti per fare il partizionamento?

2.Sedgewick dice, per ogni valore di k, se si sommano quelli, la probabilità che l'elemento di partizionamento sia k + il costo per i due sotto-array si ottiene l'equazione di cui sopra.

  • Qualcuno può spiegare questo in modo che quelli con meno conoscenze matematiche (io) possano capire?
  • In particolare, come si ottiene il secondo termine nell'equazione?
  • Cosa significa esattamente questo termine?

1
Parte della risposta, copiata da en.wikipedia.org/wiki/Quicksort "Quindi, facendo una media su tutte le possibili divisioni e notando che il numero di confronti per la partizione è n - 1, il numero medio di confronti su tutte le permutazioni dell'input la sequenza può essere stimata in modo accurato risolvendo la relazione di ricorrenza: "Per qualche ragione qui siamo fuori da 2 - n-1 vs n + 1.
Giobbe

Risposte:


7

La funzione di costo Cper quicksort è composta da due parti. La prima parte è il costo del partizionamento dell'array in due "metà" (le metà non devono avere le stesse dimensioni, quindi le virgolette). La seconda parte è il costo dell'ordinamento di queste due metà.

  1. Il (N + 1)termine è in realtà un termine condensato, e deriva dai termini

    (N - 1) + 2
    

    Questo è il costo del partizionamento in quicksort: N-1confronta con il valore pivot e 2 ulteriori confronti a causa di alcune condizioni al contorno nel partizionamento.

  2. La seconda parte dell'equazione consiste nei costi per l'ordinamento delle due "metà" su entrambi i lati del valore pivot k.

    Dopo aver scelto un valore pivot, ti rimangono due "metà" non ordinate. Il costo dell'ordinamento di queste "metà" dipende dalle loro dimensioni ed è più facilmente descritto come un'applicazione ricorsiva della funzione di costo C. Se il pivot è il più piccolo dei Nvalori, i costi per l'ordinamento di ciascuna delle due "metà" sono rispettivamente C(0)e C(N-1)(il costo per l'ordinamento di un array con 0 elementi e il costo per l'ordinamento con uno con N-1elementi). Se il perno è il quinto più piccolo, il costo per l'ordinamento di ciascuna delle due "metà" è rispettivamente C(5)e C(N-6)(il costo per l'ordinamento di un array con 5 elementi e il costo per l'ordinamento di uno con N-6elementi). E allo stesso modo per tutti gli altri valori pivot.

    Ma quanto costa ordinare queste due "metà" se non si conosce il valore pivot? Questo viene fatto prendendo il costo per ogni possibile valore del perno e moltiplicandolo per la possibilità che quel particolare valore si presenti.

    Poiché ogni valore di pivot è ugualmente probabile, la possibilità di scegliere un determinato valore di pivot è 1/Nse si dispone di Nelementi. Per capirlo, pensa a lanciare un dado. Con un dado adeguato, la possibilità che ciascuna parte finisca scoperta è uguale, quindi la possibilità di tirare un 1 è 1/6.

    Combinato, questo dà il termine di somma in cui, per ogni possibile valore k del pivot, il costo ( C(k-1) + C(N-k)) viene moltiplicato per chance ( 1/N)

  3. L'ulteriore derivazione della formula di sommatoria nella domanda al 2N lnNnel titolo richiede troppa matematica per spiegare qui i dettagli, ma si basa sulla comprensione che il costo per l'ordinamento di una matrice di Nelementi ( C(N)) può essere espresso in termini di ordinamento di un matrice di N-1elementi ( C(N-1)) e un fattore direttamente proporzionale a N.


2
  1. Sembra che N + 1 come numero di confronti per il passaggio di partizione sia un errore nel libro. È necessario scoprire per ciascuno degli elementi non pivot N – 1 se è minore o maggiore del pivot, il che richiede un confronto; quindi N-1 confronti in totale, non N + 1. (Considera il caso più semplice, N = 2, ovvero un perno e un altro elemento: non c'è assolutamente spazio per fare tre confronti tra due elementi.)

  2. Considera il caso in cui il perno scelto risulta essere l'elemento più piccolo (k = 1). Ciò significa che l'array è diviso in una parte vuota a sinistra (non ci sono elementi inferiori al pivot) e una parte a destra che contiene tutti gli elementi tranne il pivot (tutti gli altri elementi sono maggiori del pivot ). Ciò significa che i sotto-problemi che ora si desidera risolvere ricorsivamente hanno dimensioni 0 e N – 1 (k – 1 e N – k), rispettivamente, e richiedono confronti C (0) e C (N – 1); quindi, C (0) + C (N – 1) in totale.

    Se il pivot è il secondo elemento più piccolo (k = 2), le dimensioni del sotto-problema sono 1 e N – 2 (k – 1 e N – k; un elemento a sinistra, perché è l'unico più piccolo di il perno). Pertanto, la risoluzione ricorsiva di questi sotto-problemi richiede confronti C (1) + C (N – 2). E così via se il perno è il terzo elemento più piccolo, il quarto, ecc. Queste sono le espressioni nei numeratori.

    Poiché il perno viene scelto casualmente tra gli elementi N, ogni caso (il perno è il più piccolo, il perno è il secondo più piccolo, ecc.) Si verifica con uguale probabilità 1 / N. Ecco da dove viene la N nei denominatori.

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.