share: true
aliases:
- QuickSort
- quick sort
- QS
QuickSort
-
Náhodně z pole vyberu pivota (ideálně skoromedián)
-
Vlevo od pivota jsou menší prvky, vpravo větší
-
Navíc, efektivnější řešení:
- Pointer jde zleva, druhý pointer z prava
- Posouvají se ke středu, případně swapnou prvky
- Kde se potkají, tam je pivot
-
Strom rekurzivních volání má hloubku
-
V součtu přes všechny hladiny proto časová složitost
-
Hardware-friendly algoritmus
- Máme i další algoritmy s podobnou časovou složitostí
- Ty ale třeba využívají další pomocná pole, nebo randomně skáčou v poli
- QS je proto lepší, že projíždí sekvenčně, CPU ho dokáže lépe optimalizovat a predikovat
-
Jakmile nějaké 2 prvky mezi sebou porovná, už je nikdy neporovná znovu
Analýza
Indikátor
- Indikátor je náhodná veličina, pokud nabývá pouze hodnot 0 nebo 1
- Zda něco nastalo nebo ne
- Počítáme pravděpodobnost, jestli náhodná veličiny vrátí 0 nebo 1
- Střední hodnota indikátoru = pravděpodobnost , že vrátí 1
Věta o linearitě střední hodnoty
Součet harmonické řady
- Pro součet harmonické řady platí, že
- její součet je zhruba
- (a víme, že )
Důkaz věty o analýze QuickSortu
-
Vstupní posloupnost:
-
Výstupní posloupnost: tedy seřazená
-
Pro každou dvojici v posloupnosti zavedeme
- pokud během řazení došlo k porovnání s
- jinak
- Indikátor, jestli byly prvky spolu porovnány
-
Pravděpodobnost
- Tady pravděpodobnost, že se dva prvky porovnají
- To nastane pouze tehdy, když jeden z nich byl zvolen za pivota
- A žádný prvek mezi nimi (v seřazené posloupnosti) za pivota zvolen nebyl
-
Střední hodnota
-
= celkový počet všech porovnání
Složitost QuickSortu v průměru přes všechny vstupy
- Vybírání pivota z pevné deterministické pozice není odolné proti hnusnému vstupu
- Proto je lepší volit náhodnou pozici pivota
- Nebo vstup zpermutovat (zrandomizovat pozice)
- Poté se v průměru bude chovat vždycky relativně dobře
Vytvořeno: 7. 8. 2024, 13:25
Poslední aktualizace: 7. 8. 2024, 13:25