4.9 KiB
4.9 KiB
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 \}
- pro danou dvojici
- 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říkladX' = \{((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))
- tedy
- nutný počet listů:
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 existujefalse
: 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ý naX_{2}
, kdyžX_{1}(a) = X_{2}(f(a))
- funkce
f()
musí být vyhodnotitelná v polynomiálním čase
- funkce
- vstup pro problém
X_{1}
je možné funkcíf()
převést na vstup pro problémX_{2}
- problém
X_{1}
je možné vyřešit algoritmem řešícímX_{2}
- je-li
X_{2}
polynomiální, pak je iX_{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