Quicksort ha sempre un runtime quadratico se si sceglie un elemento massimo come pivot?


9

Se disponi di un algoritmo di ordinamento rapido e selezioni sempre l'elemento più piccolo (o più grande) come pivot; ho ragione nel dare per scontato che se fornisci un set di dati già ordinato, otterrai sempre prestazioni nel caso peggiore, indipendentemente dal fatto che l'elenco "già ordinato" sia in ordine crescente o decrescente?

Il mio pensiero è che, se scegli sempre l'elemento più piccolo per il tuo pivot, allora se il tuo input "già ordinato" è ordinato in ordine crescente o decrescente, non importa perché il sottoinsieme scelto per essere ordinato rispetto al tuo pivot sarà sempre il stessa misura?


2
Il tuo pensiero è corretto, ma puoi anche discutere direttamente e calcolare il tempo di esecuzione di quicksort in questo caso: otterrai . O(n2)
Yuval Filmus,

Risposte:


15

La complessità del caso peggiore per quicksort è . Ciò si ottiene selezionando i perni che dividono l'insieme in modo tale che un gruppo abbia un solo membro. Con un cattivo algoritmo di pivot picking, questo può essere facilmente ottenuto selezionando un'estremità di un set ordinato. Il tuo presupposto è corretto.Θ(n2)


2
Era meglio scriverlo: "... Questo si ottiene selezionando i perni che dividono il set in modo tale che un gruppo abbia solo un membro O (1)"

@Saeed Amiri: esatto, ma è meglio essere precisi.
MMS

1
@SaeedAmiri: O (1) indica che è proporzionale a 1, il che significa che può essere k * 1. Il caso peggiore si ottiene quando è esattamente 1. Ti garantirò che O (1) può ancora portare a O (n ^ 2).
walrii,

@MMS, ho scritto per essere precisi, walrii Hai scritto: "La complessità nel caso peggiore per quicksort è Θ ( n 2 ) ..", ma in realtà l'unico modo per raggiungere Θ ( n 2 ) non è il come hai detto, sì, il modo in cui hai descritto è il caso peggiore in assoluto, ma non l'unico Θ ( n 2 ) . O(1)Θ(n2)Θ(n2)Θ(n2)

5

Sì! Stai pensando è assolutamente giusto! E come correttamente citato da Yuval Filmus, il tempo di esecuzione sarà Θ(n2)


3

01(n-1)O(n2)

t(n)=t(n-1)+t(0)+O(n)=O(n2)
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.