Essendo la profondità di ricorsione il numero massimo di chiamate ricorsive successive prima che QuickSort colpisca il suo caso base, e notando che esso (profondità di ricorsione) è una variabile casuale, poiché dipende dal pivot scelto.QuickSort stima della profondità di ricorsione
Quello che voglio è quello di stimare la profondità minima-possibile e massima possibile ricorsione di QuickSort.
La procedura seguente descrive il modo in cui questo è QuickSort viene normalmente attuato:
QUICKSORT(A,p,r)
if p<r
q ← PARTITION(A,p,r)
QUICKSORT(A,p,q−1)
QUICKSORT(A,q+1,r)
return A
PARTITION(A,p,r)
x←A[r]
i←p−1
for j ←p to r−1
if A[j] ≤ x
i ← i +1
exchange A[i] ↔ A[j]
exchange A[i +1] ↔ A[r]
return i +1
La seconda chiamata ricorsiva in QuickSort non è realmente necessario; può essere evitato usando una struttura di controllo iterativa. Questa tecnica è chiamata anche coda ricorsione, e può essere implementato come:
QUICKSORT_tail(A,p,r)
while p<r
q ← PARTITION(A,p,r)
QUICKSORT(A,p,q−1)
p ← q+1
return A
In questa versione, le informazioni per la chiamata più recente è in cima alla pila, e le informazioni per la chiamata iniziale è il fondo. Quando viene invocata una procedura, le sue informazioni vengono inserite nello stack; quando termina, le sue informazioni sono spuntate. Poiché presumo che i parametri dell'array siano rappresentati da puntatori, le informazioni per ogni chiamata di procedura nello stack richiedono O (1) spazio di stack. Credo inoltre che lo spazio di stack massimo possibile con questa versione dovrebbe essere θ (n).
Quindi, dopo tutto questo, ha detto, come posso stimare la profondità minima-possibile e massima possibile ricorsione di ciascuna versione QuickSort? Ho ragione nell'inferenza di cui sopra?
Grazie in anticipo.
@ 500-InternalServerError: Mi corregga se sbaglio, ma sono sono sicuro che questo quicksort non contiene il meccanismo di "cauzione se già ordinato", rendendo il caso migliore una profondità di 'ciel (log (n))' –