From: Martin Mares Date: Wed, 21 Dec 2011 18:37:25 +0000 (+0100) Subject: Prevody: Prepsana prvni cast X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=cc6544f23ce2aa3d0a124e27311f8224b8001ff8;p=ads2.git Prevody: Prepsana prvni cast --- diff --git a/8-prevody/8-prevody.tex b/8-prevody/8-prevody.tex index 7cb1fcc..e5fc025 100644 --- a/8-prevody/8-prevody.tex +++ b/8-prevody/8-prevody.tex @@ -2,26 +2,51 @@ \prednaska{8}{Pøevody problémù a NP-úplnost}{} -\>Na této pøedná¹ce se budeme zabývat rozhodovacími problémy a jejich obtí¾ností. -Za jednoduché budeme trochu zjednodu¹enì pova¾ovat ty problémy, na~nì¾ známe algoritmus -pracující v~polynomiálním èase. - -\s{Definice:} {\I Rozhodovací problém} je takový problém, jeho¾ výstupem je v¾dy {\csc ano}, nebo {\csc ne}. -[Formálnì bychom se na~nìj mohli dívat jako na~mno¾inu $L$ vstupù, na~které je odpovìï {\csc ano}, -a místo $L(x)=\hbox{\csc ano}$ psát prostì $x\in L$.] - -Vstupy mìjme zakódované jen pomocí nul a jednièek (obecnì je jedno, jaký základ pro soustavu -kódování zvolíme, pøevody mezi soustavami o nìjakém základu $\neq$ 1 jsou co do velikosti -zápisu polynomiální). Rozhodovací problém je tedy -$f:\ \{0,1\}^{\ast} \to \{0,1\}$, to jest funkce z mno¾iny v¹ech øetìzcù jednièek a nul -do mno¾iny $\{1,0\}$, kde 1 na výstupu znamená {\csc ano}, 0 {\csc ne}. - -\s{Pøíklad:} Je dán bipartitní graf $G$ a $k \in {\bb N}$. Existuje v $G$ -párování, které obsahuje alespoò $k$ hran? - -To, co bychom ve~vìt¹inì pøípadù chtìli, je samozøejmì nejen zjistit, zda takové párování -existuje, ale také nìjaké konkrétní najít. V¹imnìme si ale, ¾e kdy¾ umíme rozhodovat -existenci párování v~polynomiálním èase, mù¾eme ho polynomiálnì rychle i najít: +V¹echny úlohy, které jsme zatím potkali, jsme umìli vyøe¹it algoritmem +s~polynomiální èasovou slo¾itostí. V~prvním pøiblí¾ení mù¾eme øíci, ¾e +polynomialita docela dobøe vystihuje praktickou pou¾itelnost algoritmu.% +\foot{Jistì vás napadne spousta protipøíkladù, jako tøeba algoritmus se +slo¾itostí $\O(1.001^n)$, který nejspí¹ je pou¾itelný, aèkoliv není polynomiální, +a~jiný se slo¾itostí $\O(n^{100})$, u~kterého je tomu naopak. V¹ak jsme +øíkali, ¾e nám jde o~první pøiblí¾ení, které navíc u~vìt¹iny problémù +funguje pøekvapivì dobøe.} + +Existují tedy polynomiální algoritmy pro v¹echny úlohy? Zajisté ne, +jsou dokonce i takové úlohy, je¾ ¾ádným algoritmem vyøe¹it nelze. +Ale i mezi tìmi algoritmicky øe¹itelnými potkáme spoustu úloh, +pro které zatím ¾ádný polynomialní algoritmus není známý (ale ani neumíme +dokázat, ¾e neexistuje). Takové úlohy jsou pøekvapivì èasté, proto se +na této pøedná¹ce podíváme na nìkolik typických pøíkladù. + +Navíc uvidíme, ¾e aèkoliv tyto úlohy neumíme efektivnì øe¹it, lze mezi +nimi nalézt zajímavé vztahy a pomocí tìchto vztahù obtí¾nost problémù +vzájemnì porovnávat. Z~tìchto úvah vyrùstá i skuteèná teorie slo¾itosti +se svými hierarchiemi slo¾itostních tøíd. Mù¾ete tedy následující kapitolu +pova¾ovat za malou ochutnávku toho, jak lze k~tøídám problémù pøistupovat. + +\h{Rozhodovací problémy a pøevody mezi nimi} + +Aby se nám teorie pøíli¹ nerozko¹atila, omezíme své úvahy na rozhodovací +problémy. To jsou úlohy, jejich¾ výstupem je jediný bit -- máme tedy rozhodnout, +zda vstup má èi nemá urèenou vlastnost. Vstup pøitom budeme reprezentovat øetìzcem +nul a jednièek -- libovolnou jinou \uv{rozumnou} reprezentaci doká¾eme na tyto +øetìzce pøevést v~polynomiálním èase. Formálnìji: + +\s{Definice:} {\I Rozhodovací problém} (zkrácenì {\I problém}) je funkce z~mno¾iny $\{0,1\}^*$ v¹ech +øetìzcù nad binární abecedou do mno¾iny $\{0,1\}$.% +\foot{Ekvivalentnì bychom se na~problém mohli také dívat jako na nìjakou +mno¾inu $A\subseteq \{0,1\}^*$ vstupù, na nì¾ je odpovìï~1. Tento pøístup +mají rádi v~teorii automatù.} + +\s{Pøíklad:} Je dán bipartitní graf $G$ a $k \in {\bb N}$ (respektive nìjaké +jejich kódování øetìzci bitù). Existuje v $G$ párování, které obsahuje alespoò $k$ +hran? (Také bychom se mohli ptát, zda existuje párování o~právì~$k$ hranách, +co¾ je toté¾, nebo» pøebyteèné hrany mù¾eme prostì odstranit.) + +\s{Odboèka:} Ve~vìt¹inì pøípadù bychom chtìli nejen zjistit, jestli takové +párování existuje, ale také nìjaké konkrétní najít. Obvykle ale bývá snadné +pomocí rozhodovací verze problému hledaný objekt sestrojit. Uka¾me si, jak +to udìlat u~párování. Mìjme èernou skøíòku (fungující v polynomiálním èase), která odpoví, zda daný graf má nebo nemá párování o~$k$ hranách. Odebereme z~grafu libovolnou hranu @@ -33,49 +58,69 @@ vrchol byly navzájem spárované, a tedy nemohou být spárované s~¾ádnými jinými vrcholy. Na~nový graf aplikujeme znovu tentý¾ postup. Výsledkem je mno¾ina hran, které patøí do hledaného párování. Hran, a tedy i iterací na¹eho algoritmu, je polynomiálnì -mnoho a skøíòka funguje v polynomiálním èase, tak¾e celý algoritmus je polynomiální. - -A~jak ná¹ rozhodovací problém øe¹it? Nejsnáze tak, ¾e ho pøevedeme -na~{jiný,\footnote{${}^{\dag}$}{vìrni matfyzáckým vtipùm}} který -u¾ vyøe¹it umíme. Tento postup jsme (právì u~hledání párování) u¾ pou¾ili -v~kapitole o~Dinicovì algoritmu. Vytvoøili jsme vhodnou sí», pro kterou -platilo, ¾e v~ní existuje tok velikosti~$k$ právì tehdy, kdy¾ -v~pùvodním grafu existuje párování velikosti~$k$. - -Takovéto pøevody mezi problémy mù¾eme definovat obecnì: - -\s{Definice:} Jsou-li $A$, $B$ rozhodovací problémy, pak øíkáme, ¾e $A$ lze {\I -redukovat} (neboli {\it pøevést}) na $B$ (pí¹eme $A \rightarrow B$) právì tehdy, -kdy¾ existuje funkce $f$ spoèitatelná v polynomiálním èase taková, ¾e pro $\forall -x: A(x) = B(f(x))$. V¹imnìme si, ¾e $f$ pracující v polynomiálním èase vstup -zvìt¹í nejvíce polynomiálnì. +mnoho a skøíòka funguje v polynomiálním èase, tak¾e celý algoritmus je polynomiální.% +\foot{Zde se skrývá hlavní dùvod, proè informatici mají tak rádi polynomiální +algoritmy. Tøída v¹ech polynomù je toti¾ nejmen¹í tøídou funkcí, která obsahuje +v¹echny \uv{základní} funkce (konstanty, $n$, $n^2$) a je uzavøená na sèítání, +odèítání, násobení i skládání funkcí.} + +\s{Zpìt z~odboèky:} Jak párovací problém vyøe¹it? Vìrni matfyzáckým vtipùm, +pøevedeme ho na nìjaký, který u¾ vyøe¹it umíme. To u¾ ostatnì umíme -- na~toky +v~sítích. Poka¾dé, kdy¾ se ptáme na existenci párování velikosti alespoò~$k$ +v~nìjakém bipartitním grafu, umíme efektivnì sestrojit nìjakou sí» a zeptat se, +zda v~této síti existuje tok velikosti alespoò~$k$. Chceme tedy pøelo¾it vstup +jednoho problému na vstup jiného problému tak, aby odpovìï zùstala stejná. + +Takovéto pøevody mezi problémy mù¾eme definovat i~obecnìji: + +\s{Definice:} Jsou-li $A$, $B$ rozhodovací problémy, øíkáme, ¾e $A$ lze {\I +pøevést} (neboli {\I redukovat}) na~$B$ (pí¹eme $A \rightarrow B$) právì tehdy, +kdy¾ existuje funkce $f: \{0,1\}^* \rightarrow \{0,1\}^*$, spoèitatelná v~polynomiálním +èase, taková, ¾e pro $\forall x\in \{0,1\}^*: A(x) = B(f(x))$. \s{Pozorování:} $A\rightarrow B$ také znamená, ¾e problém~$B$ je alespoò tak tì¾ký -jako problém~$A$ (tím myslíme, ¾e pokud lze $B$ øe¹it v~polynomiálním èase, -lze tak øe¹it i~$A$): Nech» problém~$B$ umíme øe¹it v~èase $\O(b^k)$, kde -$b$ je délka jeho vstupu. Nech» dále funkce $f$ pøevádìjící $A$ na $B$ pracuje -v~èase $\O(a^\ell)$ pro vstup délky~$a$. Spustíme-li tedy $B(f(x))$ na~nìjaký -vstup~$x$ problému~$A$, bude mít $f(x)$ délku $\O(a^\ell)$, kde $a=|q|$; tak¾e -$B(f(x))$ pobì¾í v~èase $\O(a^\ell + (a^\ell)^k) = \O(a^{k\ell})$, co¾ je -polynomiální v~délce vstupu~$a$. +jako problém~$A$. Tím myslíme, ¾e kdykoliv umíme øe¹it~$B$, je vyøe¹it~$A$ nejvý¹e +polynomiálnì obtí¾nìj¹í. Speciálnì platí: +\s{Lemma:} Pokud $A\rightarrow B$ a $B$~lze øe¹it v~polynomiálním èase, +pak i~$A$ lze øe¹it v~polynomiálním èase. -\s{Pozorování:} Pøevoditelnost je +\proof +Nech» existuje algoritmus øe¹ící problém~$B$ v~èase $\O(b^k)$, kde $b$~je +délka vstupu tohoto problému a $k$~konstanta. Mìjme dále funkci~$f$ pøevádìjící +$A$ na~$B$ v~èase $\O(a^\ell)$ pro vstup délky~$a$. Chceme-li nyní spoèítat +$A(x)$ pro nìjaký vstup~$x$ délky~$a$, spoèítáme nejprve $f(x)$. To bude trvat +$\O(a^\ell)$ a vyjde výstup délky takté¾ $\O(a^\ell)$ -- del¹í v~daném èase +funkce~$f$ nestihne vypsat. Tento vstup pak pøedáme algoritmu pro problém~$B$, +který nad ním stráví èas $\O((a^\ell)^k) = \O(a^{k\ell})$, co¾ je polynom +v~délce pùvodního vstupu. +\qed + +\s{Pozorování:} O~relaci pøevoditelnosti na mno¾inì v¹ech problémù platí: \itemize\ibull -\:reflexivní (úlohu mù¾eme pøevést na tu stejnou identickým zobrazením): $A \rightarrow A$, -\:tranzitivní: Je-li $A \rightarrow B$ funkcí $f$, $B \rightarrow C$ funkcí $g$, -pak $A \rightarrow C$ slo¾enou funkcí $g \circ f$ -(slo¾ení dvou polynomiálních funkcí je zase polynomiální funkce, jak u¾ jsme zpozorovali -v~pøedchozím odstavci). +\:{\I Je reflexivní} ($A\rightarrow A$) -- úlohu mù¾eme pøevést na tuté¾ identickým zobrazením. +\:{\I Je tranzitivní} ($A\rightarrow B \land B\rightarrow C \Rightarrow A\rightarrow C$) -- +pokud funkce~$f$ pøevádí $A$ na~$B$ a funkce~$g$ pøevádí $B$ na~$C$, pak funkce $g\circ f$ +pøevádí $A$ na~$C$. Slo¾ení dvou polynomiálnì vyèíslitelných funkcí je zase polynomiálnì +vyèíslitelná funkce, jak u¾ jsme zpozorovali v~dùkazu pøedchozího lemmatu. +\:{\I Není antisymetrická} -- napøíklad problémy \uv{na vstupu je øetìzec zaèínající nulou} +a \uv{na vstupu je øetìzec konèící nulou} lze mezi sebou pøevádìt obìma smìry. +\:Existují {\I navzájem nepøevoditelné problémy} -- tøeba pro problémy $A(x)=0$ a $B(y)=1$ +nemù¾e existovat pøevod ani jedním smìrem. \endlist -\>Takovýmto relacím øíkáme kvaziuspoøádání -- nesplòují obecnì antisymetrii, tedy mù¾e nastat -$A\rightarrow B$ a $B\rightarrow A$. Omezíme-li se v¹ak na tøídy navzájem pøevoditelných -problémù, dostáváme ji¾ (èásteèné) uspoøádání. Existují i navzájem nepøevoditelné problémy -- -napøíklad problém v¾dy odpovídající 1 a problém v¾dy odpovídající 0. -Nyní se ji¾ podíváme na nìjaké zajímavé problémy. Obecnì to budou problémy, na které -polynomiální algoritmus není znám, a vzájemnými pøevody zjistíme ¾e jsou stejnì tì¾ké. - -\h{1. problém: SAT} + +\>Relacím, které jsou reflexivní a tranzitivní, ale obecnì nesplòují antisymetrii, +se øíká {\I kvaziuspoøádání}. Pøevoditelnost je tedy èásteèné kvaziuspoøádání na mno¾inì +v¹ech problémù.\foot{Kdybychom z~nìj chtìli vyrobit opravdové (by» èásteèné) uspoøádání, +mohli bychom definovat ekvivalenci $A\sim B \equiv A\rightarrow B \land B\rightarrow A$ +a relaci pøevoditelnosti zavést jen na tøídách této ekvivalence. Taková pøevoditelnosti +by u¾ byla slabì antisymetrická. To je v~matematice dost bì¾ný trik, øíká se mu {\I faktorizace} kvaziuspoøádání.} + +Nyní se ji¾ podíváme na pøíklady nìkolika problémù, které se obecnì pova¾ují +za tì¾ké. Uvidíme, ¾e ka¾dý z~nich je mo¾né pøevést na v¹echny ostatní, tak¾e +z~na¹eho \uv{polynomiálního} pohledu jsou stejnì obtí¾né. + +\h{SAT -- Splnitelnost logických formulí v~CNF} \>Splnitelnost (satisfiability) logických formulí, tj. dosazení 1 èi 0 za promìnné v logické formuli tak, aby formule dala výsledek 1.