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

5.6 KiB

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