* peggiore:O (n^2)
* Best-Case:O (n log n)
* Case medio:O (n log n)
Spiegazione:
* peggiore:O (n^2)
Ciò si verifica quando l'array di input è già ordinato (in ordine crescente o discendente) o quasi ordinato. Quando l'array è ordinato, il perno sarà sempre l'elemento più piccolo (o più grande). Ciò si traduce in partizioni altamente sbilanciate.
Ad esempio, se l'array viene ordinato in ordine crescente e il primo elemento è sempre il perno:
1. Il primo elemento è scelto come perno.
2. Tutti gli altri elementi sono maggiori del perno, quindi finiscono tutti nella divisione giusta.
3. La partizione sinistra è vuota.
4. La chiamata ricorsiva viene quindi fatta su un sotto-array di dimensioni `n-1`.
Questo processo si ripete, portando a una profondità di ricorsione di `N`. Ad ogni livello `I` della ricorsione, eseguiamo confronti. Il numero totale di confronti diventa approssimativamente `n + (n-1) + (n-2) + ... + 1`, che è uguale a` n (n + 1)/2`, che è O (n^2).
* Best-Case:O (n log n)
Lo scenario migliore si verifica quando il perno divide costantemente l'array in due metà uguali (o quasi uguali). In questa situazione, la profondità di ricorsione diventa `log n`, e ad ogni livello, eseguiamo confronti` N`, risultando in una complessità temporale di `O (n log n)`.
* Case medio:O (n log n)
In media, QuickSort si comporta molto bene. Quando la selezione di perni produce costantemente partizioni ragionevolmente bilanciate, la complessità del tempo è `O (n log n)`. La "media" presuppone che l'input sia ordinato in modo casuale e che la selezione dei perni non sia costantemente negativa.
Impatto della scelta del perno:
La scelta del perno influisce in modo significativo sulle prestazioni di QuickSort. La scelta del primo elemento come perno è una strategia ingenua e può portare allo scenario peggiore in molte situazioni comuni.
Tecniche di mitigazione:
Per evitare lo scenario peggiore quando si utilizza QuickSort, è fondamentale scegliere un buon perno. Ecco alcune tecniche comuni:
* Pivot casuale: La scelta di un elemento casuale come perno è un modo semplice ed efficace per evitare lo scenario peggiore. Ciò rende le prestazioni dell'algoritmo meno dipendenti dall'ordinamento iniziale dell'input.
* Median-of-Three: Scegli la mediana del primo, medio e ultimo elementi dell'array come perno. Questo fornisce spesso un perno migliore della semplice scelta del primo elemento.
* Altre strategie di selezione dei perni: Esistono strategie di selezione dei perni più sofisticate, ma spesso aggiungono un sovraccarico che supera i loro benefici per i casi d'uso tipici.
In sintesi:
L'uso del primo elemento come perno in QuickSort può essere una strategia scadente, soprattutto se è probabile che l'array di input venga ordinato o quasi ordinato. È meglio utilizzare strategie di selezione dei perni che tentano di produrre partizioni più bilanciate per garantire che l'algoritmo funzioni più vicino alla sua complessità temporale di `O (n log n)`.
software © www.354353.com