Přidání 13. přednášky z PPA2

This commit is contained in:
Filip Znachor 2023-05-19 10:19:34 +02:00
parent 0e0c705261
commit 75fb764751
1 changed files with 102 additions and 0 deletions

102
KIV PPA2/Prednaska13.md Normal file
View File

@ -0,0 +1,102 @@
# Vypočítatelnost, složitost problémů
**Motivace**
- spousta algoritmů řazení
- různé složitosti
- stále stejný problém
- existuje pro daný problém lepší (rychlejší) algoritmus?
**Problém**
- množina vstupů A a množina výstupů B
- $A \times B$ - kartézský součin
- pro danou dvojici $(a, b), a \in A, b \in B$ říká, zda pro vstup a je b řešením problému
- podmnožina $X = \{ (\{1\}, 1), (\{1,2\}, 1), (\{2,3\}, 2), \dots \}$
- hledáme takové $b \in B$ pro dané $a \in A$, že $(a, b) \in X$
- problém řeší algoritmus
- a je vstup
- b je výstup
- algoritmus musí vrátit nic, pokud pro $a \in A$ neexistuje žádné $b \in B$ tak, že $(a, b) \in X$
- rozhodovací problém
- určuje, zda existuje řešení hlavního problému
- máme druhou množinu $X'$, která označuje, jestli existuje $(a, b) \in X$, například $X' = \{((10, 15), \text{true}), ((7, 3), \text{false})\}$
- určitě není složitější než hlavní problém
**Existuje pro každý problém algoritmus?**
- Záleží na programovacím jazyce?
- každý algoritmus může být vykonán tzv. Turingový strojem
- pokud v nějakém jazyce jde implementovat Turinguův stroj, pak lze popsat libovolný algoritmus
**Problém zastavení** (halting problem)
- $A:$ všechny možné programy v Javě včetně hodnot parametrů
- $B: \{\text{true}, \text{false}\}$
- $X:$ skončí program po konečném počtu kroků?
- problém je algoritmicky nerozhodnutelný
**Algoritmická neřešitelnost**
- pro řešení některých problémů prokazatelně neexistuje žádný algoritmus
- než začneme problém řešit, zamysleme se, zda je vůbec řešitelný
- má smysl hledat efektivnější algoritmus?
**Stromová reprezentace**
- list
- permutace vstupů
- všechny permutace musí být možné
- počet permutací: $n!$
- výška stromu
- maximální počet provedených operací
+ nejlepší možný strom
- nutný počet listů: $n!$
- největší možný počet listů: $2^h$ (úplný strom)
+ $n! = 2^h$
+ $\log_{2}(n!) = h$
+ platí $\log_{2}(n!) \in \Omega(n \log(n))$ (Stirlingova aproximace)
+ tedy $h \in \Omega(n \log(n))$
+ nemůže tedy existovat lepší řadící algoritmus než se složitostí $\Omega(n \log(n))$
**Třída problémů P**
- pro řešení problému v této třídě existuje (polynomiální) algoritmus se složitostí $\mathcal{O}(n^k)$
**Třída problémů NP**
- pro řešení problému v této třídě existuje nedeterministický algoritmus s polynomiální složitostí $\mathcal{O}(n^k)$
- "řeší" rozhodovací úlohy
- binární výstup, ale jiná interpretace
- `true`: ano, řešení obecné úlohy existuje
- `false`: nevíme
- nedeterministický skok
- provede náhodné volby a ověří, jestli je to správně
- pokud je řešením pro vstup $a \in A$
- `true`, pak musí existovat posloupnost náhodných voleb (tzv. certifikát) taková, která povede na odpověď `true`
- `false`, pak nesmí existovat posloupnost náhodných voleb taková, která povede na odpověď `true`
**Polynomiální převoditelnost**
- problém $X_{1}$ je polynomiálně převoditelný na $X_{2}$, když $X_{1}(a) = X_{2}(f(a))$
- funkce $f()$ musí být vyhodnotitelná v polynomiálním čase
+ vstup pro problém $X_{1}$ je možné funkcí $f()$ převést na vstup pro problém $X_{2}$
+ problém $X_{1}$ je možné vyřešit algoritmem řešícím $X_{2}$
+ je-li $X_{2}$ polynomiální, pak je i $X_{1}$ polynomiální
+ z hlediska polynomiality není $X_{1}$ složitější než $X_{2}$
**Cookova-Levinova věta**
- každá NP úloha je polynomiálně převoditelná na problém splnitelnosti logické formule
- důkaz (náznak)
- algoritmus ověřující řešení obecné úlohy lze popsat Turingovým strojem
- Turingův stroj lze popsat logickou formulí
- splnitelnost formule implikuje existenci řešení obecné úlohy
- důsledky
- pokud by existoval polynomiální algoritmus na SAT (satisfyability), pak by existoval polynomiální algoritmus na všechny NP problémy
- NP je velmi široká třída problémů a nezdá se pravděpodobné, že by pro všechny existoval polynomiální algoritmus
- není to ale nemožné
**NP-úplné problémy** (NP-Complete, NPC)
- množina problémů, na které lze převést všechny NP problémy
- SAT je NPC (krátká formulace Cookovy-Levinovy věty)
- dı́ky tomu lze NP-úplnost dokázat snadněji
- stačı́ ukázat, že SAT je převoditelná na daný NP problém X
- tranzitivitou převoditelnosti je dokázáno, že všechny NP jsou převoditelné na X
**NP-těžké problémy** (NP-Hard)
- problémy které jsou přinejmenšı́m tak těžké jako NP-úplné
- obecné problémy odpovı́dajı́cı́ NP-úplným rozhodovacı́m úlohám
- tzn. v polynomiálnı́m čase ověřı́me řešenı́, které ale musı́me uhodnout
- v praxi častějšı́ než NP-úplné
- stejné praktické důsledky jako NP-úplnost