Bc. Vojtěch Hordějčuk

„Dejte mi pevný bod a já pohnu Zemí.” - Archimedes

Domů » Wiki » Algoritmus » Řadící algoritmy

Řadící algoritmy

Řazení podle určitého kritéria je velmi častý problém, který je nutné algoritmicky řešit. Odhaduje se, že řazením aplikace stráví až čtvrtinu času. Řazení se totiž objevuje jako častá podúloha v mnoha dalších algoritmech. Proto byl tento problém zkoumán a řešen mnoha významnými informatiky.

Bylo dokázáno, že asymptotická časová složitost žádného řadícího algoritmu založeného na porovnávání dvou prvků nemůže růst pomaleji než lineárně-logaritmicky v závislosti na počtu řazených prvků. Výpočet si totiž lze představit jako průchod binárním stromem, který má n! listů a každý z nich představuje jednu permutaci. Výška tohoto stromu je log(n!), což je asymptoticky n*log(n).

Formální definice

Nechť R1Rn jsou prvky určené k seřazení. Aby bylo množné prvky jednoznačně seřadit, musí existovat injektivní zobrazení f, které každému prvku přiřadí tzv. klíč. Množina všech klíčů generovaných tímto zobrazením musí být uspořádaná – každý klíč tedy musí být jednoznačně porovnatelný se všemi ostatními klíči. To znamená, že pro každou dvojici klíčů je možné jednoznačně určit, který z nich je větší, který menší, či zda se klíče rovnají. Klíč prvku Ri bude značen jako Ki. Seřadit prvky R1Rn znamená nalézt takovou jejich posloupnost, pro kterou platí:

(R_{i_1}, ..., R_{i_n}) \;|\; K_{i_1} \leq \ldots \leq K_{i_n}

Získávání klíče

Přirozená, celá a reálná čísla jsou triviálně uspořádaná a zároveň s nimi počítače umí dobře pracovat. Proto se v praxi často používají jako klíče. Řadí-li se například data, lze je převést na přirozená čísla tímto způsobem:

1.4.2008 \sim 20080401, 30.12.1987 \sim 19871230 , \ldots

Znaky lze považovat za celá čísla, řetězce za posloupnosti čísel:

\text{B} \sim 2, \text{O} \sim 15, \text{BOB} \sim 21502

Protože prvky bývají mnohem objemnější než jejich klíče, řadící algoritmy pracují pouze s klíči. Jiné informace nejsou pro běh řadících algoritmů potřebné.

Vlastnosti řadících algoritmů

  • časová složitost – přibližný řád růstu doby výpočtu v závislosti na počtu řazených prvků
  • paměťová složitost -řád velikosti potřebné paměti v závislosti na počtu řazených prvků
  • stabilita – stabilní řadící algoritmus zachovává relativní pořadí prvků se stejným klíčem
  • přirozenost – rychlost přirozeného řadícího algoritmu roste s rostoucím podílem seřazených prvků na vstupu

Vícenásobné řazení

Řadící algoritmus se označuje jako stabilní pokud zachovává relativní pořadí prvků se stejným klíčem. Jsou-li například osoby seřazeny podle jména a řadí se podle příjmení, stabilní řadící algoritmus zachová abecední pořadí jmen, přestože o něm vůbec neví – již pouze nemění pořadí osob se stejným příjmením. Dalo by se o něm říci, že zbytečně nepřesouvá prvky, které nemusí.

Řadící algoritmy

Paralelní vnitřní řazení

Algoritmus Asymptotická časová složitost Stabilní Přirozený
Enumeration Sort ano ne
EOT Sort
Shear Sort

Sekvenční vnitřní řazení

Algoritmus Asymptotická časová složitost Stabilní Přirozený
Selection Sort až kvadratická ne ne
Insertion Sort až kvadratická ano ano
Bubble Sort až kvadratická ano ano
Quick Sort lineárně-logaritmická až kvadratická ano ne
Merge Sort lineárně-logaritmická ano ano
Heap Sort lineárně-logaritmická ne ne