Toto je starší verze dokumentu!
—-
IN-POS 2. Algoritmy a datové struktury
Zadání
Analýza složitosti, amortizovaná složitost.
Techniky návrhu algoritmů (rozděl a panuj, dynamické programování, hladové strategie).
Pokročilé datové struktury (haldy, union-find struktury).
Algoritmy pro práci s řetězci (algoritmy Karp-Rabin, KMP, Boyer-Moore, užití konečných automatů).
Vypracování
Analýza složitosti, amortizovaná složitost
Složitost problému
Dolní odhad složitosti problému: důkazové techniky
Horní odhad složitosti problému: složitost konkrétního algoritmu pro daný problém
Složitost problému: určeno dolním a horním odhadem, problém těsných odhadů
: asymptotická složitost
Techniky
Permutace
Generování všech permutací n-prvkové posloupnosti
počet různých permutací:
⇒ dolní odhad:
⇒ složitost problému:
Polynom
Evaluace
v bodě
.
Spracování všech koeficientů
⇒ dolní odhad:
⇒ složitost problému:
Metoda redukce
Metoda sporu
Amortizovaná složitost
Technika pro přesnější určení složitosti.
Používané metody
Metoda účtů:
Každé operaci přiřadíme kredit (číslo), které může být různé od skutečné složitosti.
Při realizaci zaplatíme skutečnou cenu kredity
nedoplatek placen z účtu
přebytek vrácen na účet
Počáteční stav kreditů je 0.
Pokud je stav kreditů po celou dobu výpočtu nezáporný. Součet kreditů je

složitosti vykonaných operací.
Pro přehlednost lze kredity lze přiřazovat/odebírat objektům, na kterých se operace realizují.
Zásobník
operace | složitost | kredity |
PUSH | 1 | 2 |
POP | 1 | 0 |
MULTIPOP | | 0 |
Nezápornost kreditů dokážeme pomocí invariantu: „Počet kreditů na účtu je rovný počtu prvků na zásobníku.“
Invariant platí na začátku.
PUSH zaplatí jeden kredit, 1 kredit dáme na účet
POP a MULTIPOP zaplatí kredity z účtu
Celá posloupnost n operací je

součet kreditů vykonaných operací.
Součet kreditů vykonaných operací je
Potenciálová funkce
Zvolíme potenciálovou funkci, která přiřadí každého hodnotě datové struktury číslo.
Po celou dobu výpočtu nesmí hodnota klesnout pod počáteční mez.
Definujeme amortizované ceny operací pomocí skutečné ceny a změně potenciálu.
Součet amortizovaných cen je

součtu skutečných cen. (Tedy je i horním odhadem složitosti posloupnosti operací.)
Techniky návrhu algoritmů
Rozděl a panuj
Dynamické programování
Hladové strategie
Pokročilé datové struktury
Haldy
Binomiální halda
Fibonacciho halda
zobecnění binární haldy
struktura může obsahovat víc stromů; ukládáme ukazatel na minimální prvek
odkládáme operace až na dobu, kdy je to nutné
Efektivně realizujeme UNION, INSERT a DECREASE_KEY, ale nezhoršujeme amortizovanou složitost ostatních operací.
Union-find struktury
Reverzní stromy (Reversed trees)
Každá množina reprezentována stromem.
Jeden vrchol stromu odpovídá jednomu prvku množiny.
Každý vrchol obsahuje odkaz na rodiče.
Kořen ukazuje na sebe a je reprezentantem množiny.
Implementace pomocí pole/seznamu.
MAKE_SET, UNION: konstantní složitost
FIND_SET: až lineární k počtu prvků prohledávané množiny
Optimalizace:
Při spojení dvou množin se kořen menší množiny stane synem kořene větší množiny.
Ke každému vrcholu asociujeme hloubku stromu jehož je kořenem.
MAKE_SET konstantní složitost
UNION, FIND_SET O(log n)
Plytké stromy (Shallow threaded trees)
Množinu reprezentujeme jako spojovaný seznam, první prvek je reprezentantem.
Každý prvek má ukazatele na následníka a na reprezentanta.
Reprezentant obsahuje údaj o kardinalitě množiny.
Stromy s kompresí (Trees with path compresion)
Algoritmy pro práci s řetězci
Karp-Rabin
KMP
Boyer-Moore
Užití konečných automatů
Zdroje:
Nahoru