DomJudge - SuMin

2.73 s C++

2.40 - 8.06 s Java

22.76 - 29.26 s Python

Rýchle usporiadanie QuickSort

http://videolectures.net/mit6046jf05_leiserson_lec04/

Medián v lineárnom čase Median of medians/BFPRT

1973 Blum, Floyd, Pratt, Rivest, Tarján

image.png

Nájdenie $k$-teho najmenšieho prvku v poli (pre medián $k = \left\lfloor\frac{n}{2}\right\rfloor$)

Ak hľadáme prvok, tak určite nemusíme prhľadávať "štvrtinu" tabuľky ... konkrétne 3 riadky a $\left\lceil\frac{n}{10} \right\rceil$ stĺpcov. IMG_20240318_093451.jpg

Krok Zložitosť
prvky rozdelíme do 5-prvkových stĺpcov
každý stĺpec usporiadame (pre dôkaz zložitosti, v praxi stačí nájsť mediány) $\frac{n}{5} \cdot O(1)$
"usporiadame stĺpce" podľa prostredného riadku, vyberieme prostredný prvok z daného riadku (medián mediánov) $T\left(\frac{n}{5}\right)$
podľa vybraného prvku pivotujeme pole ... teda zistíme jeho $index$ $O(n)$
ďalej pokračujeme v ľavej alebo v pravej časti podľa toho, či $k \gtrless index$ $T\left(\frac{7n}{10}\right)$
$$ T(n)= \frac{n}{5} \cdot O(1)+T\left(\frac{n}{5}\right)+O(n)+T\left(\frac{7n}{10}\right)$$$$ T(n)= T\left(\frac{n}{5}\right)+T\left(\frac{7n}{10}\right)+O(n) $$

Usporiadanie známok

Zložitosť tohto algoritmu $O(n \cdot k)$, kde $k$ je rozsah hodnôt.

Len jedným prechodom

Vidíme, že časová zložitosť $O(n+k)$.

Známky na VŠ - A, B, C, D, E, Fx

Reťazce

Známky osôb

Usporiadanie počítaním (Counting Sort)

image.png

IMG_20240318_102727.jpg

Číslicové usporiadanie Radix Sort

Priehradkové usporiadanie Bucket Sort

Rozdelíme na priehradky, napr.:

00-24: 24 9 6 ... delíme na 00-09, 10-19, 20-24
25-49: 29 25 43
50-74: 50 56 56 54
75-99: 

V niektorých prípadoch nám stačí spracovať prvé cifry (MSD) a vieme kde má byť v usporiadaní (teda nemusíme ani prečítať celé číslo).

Ďalšie algoritmy

https://en.wikipedia.org/wiki/Smoothsort

https://en.wikipedia.org/wiki/Library_sort

Algoritmy usporiadania

https://www.youtube.com/watch?v=GIvjJwzrHBU (Listening to Sorting Algorithms!)

https://www.youtube.com/watch?v=FNAUuYmkMPE (The Sorting Algorithm Olympics - Who is the Fastest of them All)

https://www.toptal.com/developers/sorting-algorithms (Sorting Algorithms Animations)

https://imgur.com/gallery/voutF (Sorting Algorithms Visualized)

https://sortvisualizer.com/ (Sort Visualizer)

Vlastnosti algoritmov usporiadania