Výpočetní složitost algoritmů
Jak měřit dobu trvání algoritmu V časových jednotkách --- ne V počtu jednoduchých operací V počtu instrukcí Turingova stroje
Maximální limitní složitost algoritmu Doba výpočtu závisí na velikosti vstupních dat, je funkcí jejich velikosti n→f(n) Zajímá nás limitní složitost, složitost je z O(g(n)), pokud limn ∞f(n)/g(n) existuje. Složitost je z Θ(g(n)), pokud limn ∞f(n)/g(n) existuje a není 0. Může nás zajímat složitost maximální, či průměrná
Příklad: součet dvou vektorů Délka vstupních dat n. Potřebný počet operací sčítání je n Potřebný počet instrukcí Turingova stroje je Θ(n).
Násobení matic Čtvercové matice n x n Potřebný počet operací je n2.(2n-1) Složitost je Θ(n3), přesněji Θ(n3/2) A,B E,F S1+S2-S4+S6 , S4+S5 C,D G,H S6+S7 , S2-S3+S5-S7 kde S1 = (B – D) (G + H), S2 = (A + D) (E + H), S3 = (A – C) (E + F), S4 = H (A + B), S5 = A (F – H), S6 = D (G – E), S7 = E (C + D). T(n) = (n), kde = log2 7 2,81 < 3,
Hledání nejkratší cesty v grafu Prozkoumáním všech cest (n!) Dijskrův algoritmus (n2)
Řazení posloupnosti podle velikosti Přímým výběrem: (n2) Bublinkové třídění: (n2) Chytřejší algoritmy: (n . ln n)
Hledání minimální kostry grafu Borůvkův algoritmus: potřebuji seřadit n2 hran podle délky Složitost (n2.ln n2) = (2 . n2.ln n) = (n2.ln n)