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

4.6 KiB

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