121 lines
No EOL
5.6 KiB
Markdown
121 lines
No EOL
5.6 KiB
Markdown
# Randomizované algoritmy
|
|
|
|
## Motivace
|
|
|
|
Mějme pole prvků, které je tvořeno stejným počtem prvků **a** a **b** v neznámém pořadí. Cílem je najít znak **a**.
|
|
|
|
Deterministicky:
|
|
- $n/2$ kroků v nejhorším případě (pokud napřed budou všechna **b**)
|
|
|
|
Randomizovaně:
|
|
- kontrola v náhodném pořadí
|
|
- s velkou pravděpodobností najdeme **a** brzy bez ohledu na vstup
|
|
- tzv. Las Vegas algoritmus
|
|
|
|
+ randomizovaný algoritmus může být jednodušší než deteministický při stejném nejhorším případě jako deterministický (např. quicksort)
|
|
+ jednoduchou deterministickou heuristikou s dobrými výsledky může být možné převést na algoritmus s dobrým nejhorším případem dodání náhodnosti (např. medián)
|
|
+ někdy náhodnost může řešit problémy, které deterministicky není možné řešit (problémy řešené orákulem) nebo se zdají nemožné
|
|
|
|
Randomizace
|
|
- vhodný nástroj pro vylepšování algoritmů, které mají špatný nejhorší případ a dobrý průměrný případ
|
|
- nejhorší případ zůstává, ale závisí na štěstí, ne na pořadí vstupních dat
|
|
- využití v kryptografii, kvantových výpočtech, hrách, simulacích, ...
|
|
|
|
## Randomizované algoritmy
|
|
|
|
- dělá nedeterministická, náhodná rozhodnutí
|
|
- např. uvažuje vstupní data v náhodném pořadí, vybírá alternativu podle prahování na základě náhodného čísla
|
|
- v určitém momentu dělá náhodný výběr
|
|
- inkrementální - náhodné pořadí vkládání
|
|
- D&C - náhodný výběr vzorku
|
|
- obvykle jednodušší implementace, v praxi často rychlejší
|
|
|
|
Převod na nerandomizovaný alg.
|
|
- není jasné, jestli je to vždy možné bez zhoršení výkonu
|
|
- není znám žádný randomizovaný polynomiální algoritmus pro NP-úplné problémy
|
|
- existují problémy, kde je znám účinný randomizovaný algoritmus, ale není znám účinný deterministický algoritmus
|
|
- a není známo, zda jde o P nebo NP problém (např. test prvočísel)
|
|
|
|
**Dělení**
|
|
- randomizované inkrementální algoritmy
|
|
- lineární programování
|
|
- rozděl a panuj
|
|
|
|
### Vzorkování
|
|
|
|
- nezjišťujeme hodnotu pro každou osobu nebo množinu jednotek, ale jen pro některé náhodné nebo nenáhodné
|
|
- důvody: čas a peníze
|
|
- ze vzorků odhady pro celou populaci
|
|
- vzorek musí být dostatečně velký
|
|
|
|
**Náhodné vzorkování**
|
|
- u všech položek stejná pravděpodobnost výběru
|
|
- není zkleslení vlivem výběru jednotek do vzorku
|
|
- používáno u D&C - pro dělení použita náhodně vybraná podmnožina
|
|
- využíváno pro vyhledávácí datové stuktury a přibližná řešení
|
|
- typy
|
|
- jednoduché
|
|
- každá položka má stejnou šanci na zařazení do výběru
|
|
- jednoduché, pro malé aplikace snadné, pro velké problematické
|
|
- systematické (intervalové)
|
|
- mezi výběry interval, 1. index vybrán náhodně
|
|
- často v průmyslu nebo obchodu
|
|
- výhody: dobré rozložení v populaci
|
|
- nevýhody: úchylky ve struktuře => zkreslení výsledků
|
|
- stratifikované
|
|
- rozdělení populace do různých skupin (strat - věk, pohlaví, stát, ...)
|
|
- vhodné, pokud jsou skupiny jednoduché a dobře porovnatelné, přičemž uvnitř skupiny jsou podobné názory
|
|
- shlukované
|
|
- rozdělit populaci na náhodný počet shluků, do vzorku zahrnout všechny jednotky vybraných shluků
|
|
- z nevybraných shluků se nic nevybírá
|
|
- výhody: redukce ceny, vzorek lokalizován v několika shlucích
|
|
- nevýhody: méně přesné výsledky, větší vzorkovací chyba
|
|
- víceúrovňové
|
|
- jako shlukové, ale zahrnuje výběr vzorku z každého vybraného shluku (ten se nepoužije celý)
|
|
- výběr vzorků na nejméně dvou úrovních
|
|
- v 1. zvoleny velké skupiny
|
|
- ve 2. jednotky
|
|
- výhody: pohodlné, ekonomické, účinné
|
|
- nevýhody: malá přesnost kvůli vyšší vzorkovací chybě
|
|
|
|
### Jiné dělení randomizovaných
|
|
|
|
**Monte Carlo**
|
|
- vždy dostaneme odpověď, ne vždy ale správnou
|
|
- náhodnost použita pro vedení algoritmu k řešení rychlejším způsobem s rizikem chyby
|
|
- nelze určit, zda odpověď algoritmu je správná
|
|
- můžeme algoritmus spouštět opakovaně a srovnat výsledky
|
|
- výstup chápán jako náhodná proměnná
|
|
- příklad: ověření prvočísla
|
|
- využijeme hledání dělitele - $a$ z intervalu $2\dots n/2$ takové, že $n$ je dělitelné $a$
|
|
- randomizovaný algoritmus
|
|
- vzorkuje se 10 čísel z intervalu, podle toho odpoví
|
|
- typy
|
|
- s jednostrannou chybou
|
|
- pouze pro rozhodovací problémy
|
|
- neřekne ano, pokud nemá požadovanou vlastnost
|
|
- někdy řekne ne, i když má tuto vlastnost
|
|
- velmi praktické, drastická redukce složitosti
|
|
- s oboustrannou chybou
|
|
- nechat algoritmus běžet $t$-krát a vzít převažující výsledek
|
|
- s neohraničenou chybou
|
|
- obecný randomizovaný algoritmus
|
|
- může potřebovat exponenciální počet běhů pro podstatný nárůst pravděpodobnosti úspěchu
|
|
|
|
**Las Vegas**
|
|
- vždy správná odpověď, ale náhodná doba běhu
|
|
- náhodnost využita k nalezení kratší cesty ke správné odpovědi
|
|
- někdy selže - vybraná cesta nevede k řešení
|
|
- složitost lze chápat jako náhodnou proměnnou
|
|
- lze jej změnit na Monte Carlo tím, že se po stanoveném čase ukončí a vydá libovolnou odpověď
|
|
- příklady
|
|
- randomizovaný quicksort
|
|
|
|
## Náhodná čísla
|
|
|
|
- na deterministickém zařízení nelze dosáhnout úplné náhodnosti, můžeme doufat jen v pseudonáhodná čísla
|
|
- **špatný generátor** - vážné důsledky (obzvláště v kryptografii)
|
|
- nejčastěji lineární kongruentní generátor
|
|
- $R_{n} = (aR_{n-1} + c) \mod n$
|
|
- pro 32 bitů: $R_{0} = 0, a = 1366, c = 150889$
|
|
- hodnoty bez znalosti teorie neměnit |