Přidání 13. přednášky z PPA2
This commit is contained in:
parent
0e0c705261
commit
75fb764751
1 changed files with 102 additions and 0 deletions
102
KIV PPA2/Prednaska13.md
Normal file
102
KIV PPA2/Prednaska13.md
Normal 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
|
Loading…
Reference in a new issue