]> mj.ucw.cz Git - ads2.git/commitdiff
Prevody: Prepsana prvni cast
authorMartin Mares <mj@ucw.cz>
Wed, 21 Dec 2011 18:37:25 +0000 (19:37 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 21 Dec 2011 18:37:25 +0000 (19:37 +0100)
8-prevody/8-prevody.tex

index 7cb1fcc2f3b60c7494b12d241d3b170f31e591c1..e5fc02533743fefdfcc7e36713399b6dd848988f 100644 (file)
@@ -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.