Vyčíslitelnost a složitost výpočtů

Výpočetní složitost běžných programů

Shrnutí kapitoly

Pro určení časové složitosti (času výpočtu v nejhorším případě) běžných počítačových programů si musíme všímat programových konstrukcí jako jsou podmínky, cykly a vzájemné volání funkcí, zejména rekurzívní. Výpočty času u jednoduchých nebo vnořených cyklů se provádějí většinou pomocí (vícenásobných) sum, výpočet často vede na aritmetickou nebo geometrickou řadu. Problémem mohou být cykly while, kde je někdy obtížné určit počet opakování.

U rekurzívních funkcí se čas výpočtu zapíše pomocí speciální soustavy rovnic, tzv. rekurence. K jejímu vyřešení existuje v literatuře (např. Graham, Knuth, Patashnik: Concrete mathematics) řada speciálních metod. Nejjednodušší a často použitelnou metodou je opakované vzájemné dosazování rekurentních rovnic, anebo tzv. Mistrovská metoda (Master method)

Z praktického hlediska je nejdůležitější identifikovat programy nebo metody, jejichž délka výpočtu roste exponenciálně vzhledem k některému vstupnímu parametru. Takové programy mohou být výpočetně nezvládnutelné už pro poměrně nízké hodnoty parametrů.