FAV-ZCU/KIV PRO/02. Algoritmické strategie.md

126 lines
4.6 KiB
Markdown
Raw Normal View History

2024-01-24 22:17:22 +01:00
# Algoritmické strategie
## Brutální síla
- problém řešen prohledáním všech podmnožin, uspořádání nebo potencionálních řešení a výběrem nejlepšího
+ pro malé problémy postačující
+ často superpolynomiální složitost
+ obvykle snadná garance správnosti algoritmu
## Greedy strategie
- očekávané řešení je množina $n$ prvků
- začneme s prázdnou množinou
- vždy zafixujeme 1 položku řešení, kterou už neměníme
- takto pokračujeme dál, dokud jsou všechny zafixované
- pořadí podle slibnosti položek (od slibnějších k méně)
- "greedy" - nikdy se nevrací, nikdy nemění dřívě udělané rozhodnutí
Příklady
- greedy algoritmus pro minimální kostru
- greedy heuristika pro minimálního cestujícího
## Inkrementální strategie
- obvykle nevede k optimálním algoritmům
- obvykle implementačně jednoduché, zejména vkládání
- dovoluje různé modifikace
### Inkrementální vkládání
- budujeme řešení (strukturu) o $n$ položkách
- napřed řešení o $n-1$ položkách, pak nezbytné změny a vložení $n$-té položky
- v paměti někdy dílčí řešení, někdy jen současný stav
- zvlášť užitečné pro geometrické algoritmy
- **on-line metoda** - vstup nemusí být celý dostupný na začátku
- užitečné pro reálná data, ale část práce se dělá zbytečně
Příklady
- insertion sort
- obarvení vrcholů
- hvězdicová polygonizace
### Inkrementální konstrukce
- budujeme řešení (strukturu) inkrementálně, v každém okamžiku kousek
- vstup zpracováván v pořadí, jaké algoritmus chce, nikoliv v pořadí, jak vstupní data přicházejí
- **off-line metoda** - vstup musí být celý k dispozici
- vhodné pořadí vstupních dat někdy určeno předem (např. presort), někdy až v průběhu výpočtu
- časté pro geometrické problémy
Příklady
- selection sort
### Jiné inkrementální strategie
**Inkrementální změna**
Příklad: Generování permutací
- generujte všechny/náhodnou/další permutaci délky $n$
- permutace v poli, inkrementální změna = jeden swap v poli
- inkrementální změna generuje další permutaci z předchozí
- extrémně rychlé - až $O(0)$ v průměru pro 1 permutaci, nezávisí na $n$
## Rozděl a panuj (D&C)
- složitý problém je rozdělen na jednodušší podproblémy
- řešení podproblémů se poté spojí na celkové řešení
- pro dekomponovatelné problémy
- dělení a spojování nesmí být dražší než původní problém
- dekompozice a zejména spojování často obtížné
+ obvykle využita rekurze
+ původně vojenská strategie
Příklady
- mnoho významných, ale obvykle obtížných algoritmů
- např.: mergesort, FFT, Strassenovo maticové násobení
- quicksort
- dláždění šachovnice
- binary search, bisection (půlení intervalu)
- rychlá mocnina
- odmocnina
## Prohledávání s návratem (Backtracking)
- systematický průchod všemi možnými konfiguracemi prostoru
- obvykle prohledávání stromu do hloubky (DFS)
- menší spotřeba paměti než u prohledávání do šířky (BFS)
- pokud nelze postupovat dál směrem k listu, návrat k poslednímu rozhodovacímu místu
- odtud jiný postup (strategie pokusu a omylu)
+ vhodné také pro paralelní implementaci (spousta práce, málo komunikace)
+ množina všech možných řešení se rozdělí na podmnožiny a ty se paralelně prohledávají
+ pokud některý procesor hotov a jiný ne, přerozdělí se dosud nehotová část množiny řešení mezi hotové procesory
+ kromě přerozdělování je komunikace nutná jen pro nalezení nejlepšího řešení z nejlepších řešení jednotlivých procesorů
**Typické úlohy**
- nejčastěji permutační, herní nebo grafové
- všechny možné permutace nebo podmnožiny objektů
- průchod všech koster grafu nebo cest mezi 2 vrcholy
**Typické aplikace**
1. Optimalizační problémy, zejména komerční
- obchodní cestující, vhodné linky pro autobusy
- plánování (schůzky - sdružit seznam kandidátů se seznamem protikandidátů)
- turnajové schéma (kandidáti i protikandidáti ze stejného seznamu)
- výzkum trhu (testování výrobků)
- sladění nabídky a poptávky
- prohledávání adresáře s podadresáři
2. Hry
- šach, dáma, piškvorky, reversi, Go
3. Hádanky
- křížovky
- hádání na stěhování a přesuny
- Rubikova kostka, pokrývání šachovnice, stěhování piána
- solitéry (a: v co nejmenších tazích)
- vytváření bludiště a jeho řešení
- sudoku
- magické čtverce
Příklady
- pokrytí šachovnice
- vyvažování vah
- odporné odpory pana Odporného
- magický zapletenec