Obsah

Časová složitost

Časová složitost nám říká, jak se prodlouží doba běhu programu, když mu předhodíme více dat. Pomáhá programátorům předpovědět, zda jejich kód zvládne reálný provoz (miliony uživatelů) nebo zda „zkolabuje“.

1. Tři scénáře náročnosti

U každého algoritmu můžeme sledovat tři různé případy:

2. Typické příklady v praxi

Konstantní čas – $O(1)$

Počet operací je pevně daný.

Lineární čas – $O(n)$

Čas roste přímo úměrně s daty.

Logaritmický čas – $O(\log n)$

Extrémně efektivní růst.

Kvadratický čas – $O(n^2)$

Čas roste se čtvercem dat.

3. Časová složitost vs. Výkon hardwaru

Častým omylem je myslet si, že pomalý algoritmus vyřešíme rychlejším procesorem.

4. Co ovlivňuje časovou složitost?

1. **Cykly:** Jeden cyklus přes $n$ prvků znamená $O(n)$. Dva vnořené cykly znamenají $O(n^2)$.
2. **Rekurze:** Pokud funkce volá sama sebe vícekrát, složitost může růst exponenciálně.
3. **Struktura dat:** Vyhledávání v [[it_encyklopedie:ethernet|síti]] nebo databázi závisí na tom, jak jsou data indexována.
Zajímavost: Existují i algoritmy se složitostí $O(n!)$ (faktoriál), například u problému obchodního cestujícího (hledání nejkratší cesty mezi všemi městy). Pro pouhých 60 měst je počet operací větší než počet atomů v pozorovatelném vesmíru.

Zpět na Big O notaci