Algoritmus je krok za krokem popsaný postup, který řeší úlohu nebo problém. Typicky přijímá vstupy, provádí posloupnost dobře definovaných operací a vrátí výstup. Algoritmus může být popsán jednoduchou větou, receptem nebo podrobným programem — důležité je, aby byl přesný, konečný a proveditelný.
Definice a základní vlastnosti
Neformálně lze algoritmus nazvat „seznamem kroků“. Formálně v informatice musí algoritmus splňovat několik vlastností:
- Definitnost: každý krok je jednoznačně definovaný a proveditelný.
- Konečnost: algoritmus se po konečném počtu kroků zastaví (terminace), pokud zvláštní případ není deklarován jinak.
- Vstup a výstup: algoritmus může přijímat nula nebo více vstupů a vždy produkuje alespoň jeden výstup.
- Efektivnost: kroky by měly být proveditelné v konečném čase s omezenými prostředky (paměť, čas).
- Obecnost: algoritmus řeší třídu problémů, ne jen jediný konkrétní případ.
Příklady
Recept je dobrým příkladem algoritmu: přijímá vstupy (ingredience), sleduje postup (kroky) a vytváří výstup (hotový pokrm). Další běžné příklady v informatice:
- Euclidův algoritmus pro nalezení největšího společného dělitele dvou čísel.
- Algoritmus řazení (např. rychlé řazení, mergesort) – uspořádá prvky podle hodnoty.
- Binární vyhledávání v setříděném poli.
- Algoritmus pro výpočet faktoriálu (iterativní či rekurzivní).
Způsoby zápisu
Algoritmy lze vyjádřit různými způsoby podle potřeby a čtenářů:
- běžný jazyk (popis „slovy“), vhodný pro přiblížení myšlenky;
- pseudokódy, které připomínají programovací jazyk, ale jsou více čitelné pro člověka;
- vývojové diagramy (flowcharty), kde jsou kroky znázorněny graficky;
- přímo v programovacích jazycích jako implementace;
- formálně jako posloupnost stavových přechodů, které by mohl provádět Turingův stroj.
Historie
Slova „algoritmus“ a dříve „algorismus“ pocházejí ze jména perského matematika Al-Khwārizmī (persky: خوارزمی, asi 780–850). Jeho práce na algebře a číslech vedly k rozšíření metod, které se později začaly nazývat algoritmy. Moderní teorie algoritmů se rozvinula s formalizací výpočtu v 20. století (práce Alana Turinga, Alonzo Churcha a dalších), která definovala pojem vypočitatelnosti a modely jako Turingův stroj.
Analýza algoritmů
Při návrhu a porovnávání algoritmů se uvažuje hlavně o dvou zdrojích nákladů:
- Časová složitost: kolik kroků nebo času algoritmus potřebuje v závislosti na velikosti vstupu (často vyjádřeno pomocí Big O, např. O(n), O(n log n)).
- Paměťová (prostorová) složitost: kolik paměti algoritmus spotřebuje.
Analýza může být prováděna pro nejlepší, průměrný i nejhorší případ.
Správnost, terminace a nerozhodnutelnost
U algoritmu je důležité prokázat správnost – tedy že pro všechny povolené vstupy vrací požadovaný výsledek. To se často dělá pomocí invariantů, indukce nebo formálních důkazů. Rovněž se zkoumá terminace: přestane algoritmus vždy po konečném počtu kroků?
Některé problémy jsou však nerozhodnutelné (nevypočitatelné) – neexistuje žádný algoritmus, který by pro všechny vstupy dokázal rozhodnout daný problém (např. halting problem).
Typy algoritmů podle přístupu
- Deterministické – v každém kroku je přesně jeden další krok (klasické programy).
- Nedeterministické – modely, které mohou zkoušet více možností současně (užitečné v teorii složitosti).
- Náhodné (randomizované) – používají generátor náhodných čísel pro volbu kroků (např. quicksort s náhodným pivotem, Monte Carlo algoritmy).
- Heuristické a aproximativní – neposkytují vždy optimální řešení, ale prakticky dobré výsledky pro NP-těžké úlohy.
Použití v informatice a praxi
Algoritmy jsou základem všech softwarových systémů a nacházejí uplatnění v:
- databázích (vyhledávání, indexování),
- síťových protokolech (směrování, plánování přenosu),
- šifrování a kryptografii,
- strojovém učení a zpracování dat,
- kompilátorech (analýza kódu, optimalizace),
- robotice a plánování pohybu.
Shrnutí
Algoritmus je přesný, konečný a proveditelný postup pro řešení úloh. Může být zapsán slovně, v pseudokódu, ve vývojovém diagramu nebo přímo v programovacím jazyce. Základní otázky kolem algoritmů zahrnují jejich správnost, terminaci, časovou a paměťovou složitost, a také otázky výpočtové omezenosti a použitelnosti v praxi.



