FAV-ZCU/KIV PRO/03. Randomizované algoritmy.md

121 lines
5.6 KiB
Markdown
Raw Normal View History

2024-01-24 22:17:22 +01:00
# Randomizované algoritmy
## Motivace
Mějme pole prvků, které je tvořeno stejným počtem prvků **a** a **b** v nejzná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