Předmět se zabývá studiem algoritmů z teoretického hlediska a podává obecný přehled řady teoretických výsledků z této oblasti.
Na začátku se nejprve zabývá otázkou, co je to algoritmus a algoritmický problém, a ukazuje příklady různých výpočetních modelů a jejich vzájemných simulací. Dále jsou studovány otázky týkající se vyčíslitelnosti a algoritmické rozhodnutelnosti a je ukázáno, že existuje řada algoritmicky nerozhodnutelných problémů.
Dále jsou studovány otázky týkající výpočetní složitosti. Jsou ukázány některé pokročilejší techniky analýzy výpočetní složitosti algoritmů, jako jsou například analýza výpočetní složitosti rekurzivních algoritmů, amortizovaná složitost či analýza složitosti v průměrném případě. Dále je studována výpočetní složitost problémů a různé třídy složitosti. Zvláště důležitou roli zde hrají NP-úplné problémy, ale jsou diskutovány i některé další třídy složitosti.
Jsou rovněž studovány některé techniky používané při návrhu efektivních algoritmů.
Dále jsou studovány některé specifické druhy algoritmů, jako jsou například randomizované či aproximační algoritmy.
Speciální pozornost je věnována paralelním a distribuovaným algoritmům a analýze a návrhu těchto algoritmů.
Výsledky učení:
- Porozumět tomu, co je to výpočetní složitost algoritmů a být schopen tuto výpočetní složitost analyzovat.
- Rozumět tomu, že některé problémy mohou být algoritmicky nerozhodnutelné, a ty, které jsou algoritmicky řešitelné, mohou mít různou výpočetní složitost.
- Získat základní povědomí o různých třídách složitosti.
- Osvojit si některé základní techniky používané při návrhu efektivních algoritmů.
- Rozumět pojmům jako jsou aproximační algoritmy, pravděpodobnostní algoritmy apod. a umět vyhodnotit možnosti jejich použití v praxi.
- Znát některé základní techniky používané při návrhu paralelních a distribuovaných algoritmů a být schopen analyzovat výpočetní složitost těchto algoritmů.