From 75fb76475160e146ecdd8356a132e2ccb813c878 Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Fri, 19 May 2023 10:19:34 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1n=C3=AD=2013.=20p=C5=99edn=C3=A1?= =?UTF-8?q?=C5=A1ky=20z=20PPA2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KIV PPA2/Prednaska13.md | 102 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 KIV PPA2/Prednaska13.md diff --git a/KIV PPA2/Prednaska13.md b/KIV PPA2/Prednaska13.md new file mode 100644 index 0000000..be308ee --- /dev/null +++ b/KIV PPA2/Prednaska13.md @@ -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 \ No newline at end of file