]> mj.ucw.cz Git - ads2.git/commitdiff
Korektury kapitoly o NP-uplnosti.
authorMartin Mares <mj@ucw.cz>
Mon, 21 Jan 2008 08:32:21 +0000 (09:32 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 21 Jan 2008 08:32:21 +0000 (09:32 +0100)
11-np/11-np.tex

index 346be519c797401470e271144a62db853dff3584..46b4bbf75959ca08e48c3ce6f7b5904cd11e9012 100644 (file)
@@ -2,10 +2,10 @@
 
 \prednaska{11}{NP-úplné problémy}{(zapsali F. Kaèmarik, R. Krivák, D. Remi¹)}
 
-Dosud jsme zkoumali problémy, které se nás ptali na to, jestli nìco existuje. Napøíklad: dostali jsme formuli a problém splnitelnosti se nás ptal, zda existuje ohodnocení promìnných takové, ¾e formule platí? Nebo v~pøípade nezávislých mno¾in jsme dostali graf a èíslo $k$ a ptali jsme se, jestli v~grafu existuje nezávislá mno¾ina, která je veliká alespoò $k$? Tyto otázky mìli spoleèné to, ¾e kdy¾ nám nìkdo zadal nìjaký objekt, pak jsme umìli efektivnì øíci, zda je to objekt, který hledáme. Napøíklad: pokud dostaneme ohodnocení promìnných logické formule, staèí jen dosadit a spoèítat, ¾e formule je $true$ nebo $false$. Zjistit, ¾e nìjaký objekt je ten, který hledáme, umíme efektivnì. Tì¾ké na tom je takový objekt najít. Co¾ vede k~definici obecných vyhledávacích problémù, kterým se øíká tøída problémù NP. Definujme si ji poøádnì, ale nejdøíve zaèneme tro¹ièku jednodu¹¹í tøídou.
+Dosud jsme zkoumali problémy, které se nás ptaly na to, jestli nìco existuje. Napøíklad: dostali jsme formuli a problém splnitelnosti se nás ptal, zda existuje ohodnocení promìnných takové, ¾e formule platí. Nebo v~pøípade nezávislých mno¾in jsme dostali graf a èíslo $k$ a ptali jsme se, jestli v~grafu existuje nezávislá mno¾ina, která je veliká alespoò $k$. Tyto otázky mìly spoleèné to, ¾e kdy¾ nám nìkdo zadal nìjaký objekt, umìli jsme efektivnì øíci, zda je to objekt, který hledáme. Napøíklad: pokud dostaneme ohodnocení promìnných logické formule, staèí jen dosadit a spoèítat, ¾e formule je \<true> nebo \<false>. Zjistit, ¾e nìjaký objekt je ten, který hledáme, umíme efektivnì. Tì¾ké na tom je takový objekt najít. Co¾ vede k~definici obecných vyhledávacích problémù, kterým se øíká tøída problémù NP. Definujeme si ji poøádnì, ale nejdøíve zaèneme tro¹ièku jednodu¹¹í tøídou.
 
-\s{Definice:} P je {\I tøída rozhodovacích problémù}, které jsou øe¹itelné v~polynomiálním èase. Jinak øeèeno, problém
-$L \in \rm{P}  \Leftrightarrow  \exists $ polynom $f$ a~$\exists$ algoritmus $A$ takový, ¾e $\forall x: L(x)=A(x)$ a $A(x)$ dobìhne v~èase $\leq f(x)$
+\s{Definice:} $P$ je {\I tøída rozhodovacích problémù}, které jsou øe¹itelné v~polynomiálním èase. Jinak øeèeno, problém
+$L \in P  \Leftrightarrow  \exists $ polynom $f$ a~$\exists$ algoritmus $A$ takový, ¾e $\forall x: L(x)=A(x)$ a $A(x)$ dobìhne v~èase $\O(f(x))$.
 
 Tøída P odpovídá tomu, o èem jsme se shodli, ¾e umíme efektivnì øe¹it. Nadefinujme tedy tøídu NP:
 
@@ -15,111 +15,124 @@ $\forall x$ plat
 
 \s{Pozorování:} Splnitelnost logických formulí je v~NP.
 
-Máme-li lineárnì velké nápovìdy, co¾ jsou ohodnocení promìnných zadané formule, odpovíme ano, formule je splnitelná,  pokud nám nìkdo mù¾e odpovìdìt na splòující ohodnocení. Tak¾e $K$ nám ovìøí, èi dosazením ohodnocení je formule splnìna a ptáme se tedy, èi existuje nápovìda taková, ¾e existuje ohodnocení takové, ¾e formule je splnìna. Splnitelnost logických formulí je urèitì v~tøídì NP.
-V¹imneme si, ¾e celá tøída P le¾í uvnitø NP. v~podstatì øíkáme, ¾e kdy¾ máme problém, který umíme øe¹it v~polynomiálním èase bez nápovìdy, tak to zvládneme v~polynomiálním èase i s~nápovìdou.
+Máme-li lineárnì velké nápovìdy, co¾ jsou ohodnocení promìnných zadané formule, odpovíme ano, formule je splnitelná,  pokud nám nìkdo mù¾e odpovìdìt na splòující ohodnocení. Tak¾e $K$ nám ovìøí, èi dosazením ohodnocení je formule splnìna a ptáme se tedy, èi existuje nápovìda taková, která odpovídá ohodnocení, v~nìm¾ je formule splnìna. Splnitelnost logických formulí je urèitì v~tøídì NP.
 
-Nasbírali jsme problémy, které jsou v~NP, ale nevíme, jestli jsou v~P. Dokonce by se dalo øíct, ¾e jsou to nejtì¾¹í problémy v~NP.
+\s{Pozorování:} Tøída $P$ le¾í uvnitø NP.
+V~podstatì øíkáme, ¾e kdy¾ máme problém, který umíme øe¹it v~polynomiálním èase bez nápovìdy, tak to zvládneme v~polynomiálním èase i s~nápovìdou.
+
+Nasbírali jsme problémy, které jsou v~NP, ale nevíme, jestli jsou v~P. Brzy uká¾eme, ¾e to jsou v jistém smyslu nejtì¾¹í problémy v~NP.
 Nadefinujme si:
 
-\s{Definice:} Problém $L$ je NP-tì¾ký právì tehdy, kdy¾ je pøevoditelný:
-$\forall M \in \rm{NP}: M~\rightarrow~L$.
-Také platí, ¾e pokud umíme øe¹it nìjaký NP problém v~polynomiálním èase, pak umíme vyøe¹it v~polynomiálním èase v¹e v~NP,
-pokud nìjaké takové~$\in~\rm{P} \Rightarrow \rm{P}=\rm{NP} $.
+\s{Definice:} Problém $L$ je NP-{\I tì¾ký} právì tehdy, kdy¾ je pøevoditelný:
+$\forall M \in \rm{NP}: M~\rightarrow~L$. (Viz definici pøevodù z minulé pøedná¹ky)
+
+Také platí, ¾e pokud umíme øe¹it nìjaký NP-tì¾ký problém v~polynomiálním èase, pak umíme vyøe¹it v~polynomiálním èase v¹e v~NP, pokud nìjaké takové~$\in~\rm{P} \Rightarrow \rm{P}=\rm{NP} $.
 
 My se budeme zabývat problémy, které jsou NP tì¾ké a samotné jsou v~NP. Takovým problémùm se øíká NP-úplné.
 
-\s{Definice:} Problém $L$ je NP úplný právì tehdy, kdy¾ $L$ je NP-tì¾ký a $L \in \rm{NP}$.
+\s{Definice:} Problém $L$ je NP-{\I úplný} právì tehdy, kdy¾ $L$ je NP-tì¾kýa $L \in \rm{NP}$.
 
-NP-úplné problémy jsou ve své podstatì nejtì¾¹í problémy, které le¾í v~NP. Proto¾e le¾í v~NP platí, ¾e libovolný problém z NP umíme pøevést na nì. Kdybychom umìli pøevést nìjaký NP-úplný problém, který je øe¹itelný v~polynomiálním èase, pak v¹echno v~NP je øe¹itelné v~polynomiálním èase. Bohu¾el, to se neví. Otázka jestli $\rm{P}=\rm{NP}$ je asi nejznámìj¹í otevøený problém v~celé teoretické informatice.
+NP-úplné problémy jsou ve své podstatì nejtì¾¹í problémy, které le¾í v~NP. Proto¾e NP-úplné problémy le¾í v~NP, umíme na nì pøevést libovolný problém z NP. Kdybychom umìli vyøe¹it nìjaký NP-úplný problém v~polynomiálním èase, pak v¹echno v~NP je øe¹itelné v~polynomiálním èase. Bohu¾el, to jestli nìjaký NP-úplný problém lze øe¹it v~polynomiálním se neví. Otázka, jestli $\rm{P}=\rm{NP}$ je asi nejznámìj¹í otevøený problém v~celé teoretické informatice.
 
 Uká¾eme si nìjaký NP-úplný problém. Velmi se nám bude hodit následující vìta:
 
 \s{Vìta (Cookova):} SAT je NP-úplný.
 
-\>Dùkaz je pøíli¹ technický, jenom ho pøibli¾nì naznaèíme pozdìji. Pøímím dùsledkem je, ¾e cokoli v~NP je pøevoditelné na SAT.
-Dá se dokázat vìtièka:
+\>Dùkaz je pøíli¹ technický, jenom ho pøibli¾nì naznaèíme pozdìji. Pøímým dùsledkem je, ¾e cokoli v~NP je pøevoditelné na SAT.
+K dokazování NP-úplnosti dal¹ích problémù pou¾ijeme následující vìtièku:
 
 \s{Vìtièka:} $L$ je NP-úplný a $L$ se dá pøevést na $M$ ($L \rightarrow M$), $M \in \rm{NP} \Rightarrow M$ je také NP-úplný.
 
 \proof
-Tuto vìtièku staèí dokázat pro NP tì¾kost, NP-úplnost plyne okam¾itì z toho, ¾e problémy jsou NP tì¾ké a le¾í v~NP, podle pøedpokladu.
-Víme ¾e $L$ se dá pøevést na $M$ a také z toho, ¾e $L$ je NP-úplný plyne, ¾e ka¾dý problém $Q$ z $NP$ se $Q$ dá pøevést na $L$. $Q$ se dá pøevést na $L$, $L$ se dá pøevést na $M$. Z toho plyne, ¾e $Q$ se dá pøevést na $M$. Staèí tedy slo¾it funkci $f(Q \rightarrow L)$ s~funkcí $g(L \rightarrow M)$. To urèitì také spoèteme v~polynomiálním èase. Tak nahlédneme, ¾e v¹echny problémy z $NP$ se dají pøevést na problém $M$.
+Tuto vìtièku staèí dokázat pro NP tì¾kost, NP-úplnost plyne okam¾itì z~toho, ¾e problémy jsou NP tì¾ké a le¾í v~NP, podle pøedpokladu.
+Víme ¾e $L$ se dá pøevést na $M$. $L$ je NP-úplný,z~toho plyne, ¾e ka¾dý problém $Q$ z NP se dá pøevést na $L$. $Q$ se dá pøevést na $L$, $L$ se dá pøevést na $M$. Z~toho plyne, ¾e $Q$ se dá pøevést na $M$. Staèí tedy slo¾it funkci $f(Q \rightarrow L)$ s~funkcí $g(L \rightarrow M)$. To urèitì také spoèteme v~polynomiálním èase. Tak nahlédneme, ¾e v¹echny problémy z NP se dají pøevést na problém $M$.
 \qed
 
-\s{Dùsledek:} Cokoliv, na co jsme umìli pøevést SAT je také NP-úplné. Napøíklad nezávislá mno¾ina, v¹echny varianty SATu, klika v~grafu...
+\s{Dùsledek:} Cokoliv, na co jsme umìli pøevést SAT, je také NP-úplné. Napøíklad nezávislá mno¾ina, v¹echny varianty SATu, klika v~grafu~\dots
 
-\figure{p-np.eps}{Obrázek 11.1}{2.5cm}
+Jak taková tøída NP vypadá? Pøedstavme si v¹echny problémy tøídy NP, jakoby seøazené zhora nadolu podle obtí¾nosti problémù, kde porovnání dvou problémù urèuje pøevoditelnost (viz obrázek).
+\figure{p-np.eps}{Struktura tøídy NP}{2.5cm}
 
+Obecnì mohou nastat dvì situace. Proto¾e nevíme, jestli $\rm{P}=\rm{NP}$. Jestli ano, pak v¹echno je jedna a ta samá tøída. To by bylo v nìkterých pøípadech nepraktické, napø. ka¾dá ¹ifra by byla jednodu¹e rozlu¹titelná. Jestli ne, NP-úplné problémy urèitì nele¾í v P, P a NP-úplné problémy jsou dvì disjunktní èásti NP. Taky se dá dokázat, ¾e je¹tì nìco le¾í mezi nimi. Existuje problém, který je v NP, není v P a není NP-úplný. To v¹ak dokazovat nebudeme.
 \s{Katalog NP-úplných problémù:}
 \itemize\ibull
-\:{\I logické:}
-SAT, 3-SAT, 3,3-SAT, obvodový SAT, SAT pro obecné formule
+\:{\I logické:} 
+SAT, 3-SAT, 3,3-SAT, obvodový SAT, SAT pro obecné formule (splnitelnosti logických formulí, viz pøedchozí pøedná¹ky)
 \:{\I grafové:}
-Nezávislá mno¾ina, klika v~grafu, 3D párování, 3-barvení, Hamiltonova cesta/kru¾nice
+Maximální nezávislá mno¾ina (max. mno¾ina vrcholù, které nejsou propojené hranou), klika v~grafu (najít uplný podgraf v grafu), 3D párování (tøi mno¾iny, mno¾ina kompatibilních trojic, najít perfektnù mno¾inu vyhovujících trojíc), 3-barvení (obarvit graf 3 barvami tak, aby nebyli dvì stejné barvy vedle sebe), Hamiltonova cesta (cesta v grafu,obsahuje v¹echny vrcholy grafu, ka¾dý právì jednou), Hamiltonova kru¾nice (cyklus bez opakování vrcholù, obsahuje v¹echny vrcholy grafu, ka¾dý vrchol právì jednou)
 \:{\I èíselné:}
-problém batohu, loupe¾níci, $Ax=b$, celoèíselné lineární programování
+problém batohu (daná mno¾ina èísel, zjistit zda existuje podmno¾ina se zadaným souètem), loupe¾níci (rozdìlit mno¾inu na dvì podmno¾iny se stejným souètem), $Ax=b$ (soustava celoèíslených lineárních rovnic, x mohou být pouze 0 nebo 1, jinak v¹echno poèítame v celých èíslech), celoèíselné lineární programování (existuje vektor platných nezáporných celoèísených $x$, ¾e platí $Ax \leq b$)
 \endlist
 
 \h { Pøevoditelnost 3,3-SAT na 3D-párování }
 
-Kdy¾ chceme ukázat, ¾e na nìco se dá pøevést SAT, potøebujeme obvykle dvì vìci. Konstrukci, která bude simulovat promìnné, nìco co nabývá dvou stavù $true$/$false$ a nìco co bude reprezentovat klauzule a umí zaøídit, aby ka¾dá klauzule byla splnìna alespoò jednou promìnnou.
+Kdy¾ chceme ukázat, ¾e na nìco se dá pøevést SAT, potøebujeme obvykle dvì vìci. Konstrukci, která bude simulovat promìnné, tedy nìco, co nabývá dvou stavù \<true>/\<false>, a nìco, co bude reprezentovat klauzule a umí zaøídit, aby ka¾dá klauzule byla splnìna alespoò jednou promìnnou.
 Jenom pro pøipomenutí, máme mno¾inu klukù, dìvèat, zvíøátek a nìjaké trojice, kdo se s~kým snese a chceme vybrat trojice tak, aby se v~nich ka¾dý kluk, holka, zvíøátko vyskytovalo právì jednou.
 Najdeme si takovouto konfiguraci:
 
-\figure{3d.eps}{Obrázek 11.2}{4cm}
+\fig{3d.eps}{4cm}
 
 \>4 zvíøátka, 2 kluci, 2 dívky a~takové 4 trojice, které oznaèíme $A, B, C, D$. Je¹tì pøedpokládáme, ¾e zvíøátka se mohou úèastnit nìjakých jiných trojic, ale tito ètyøi lidé se vyskytují pouze v~tìchto ètyøech trojicích a~nikde jinde.
-V¹imneme si, ¾e existují právì dvì mo¾nosti, jak tento obrázek spárovat. Abychom spárovali kluka $k_1$, tak si musíme vybrat $A$ nebo $B$. Kdy¾ si vybereme $A$, $k_1$ i $d_2$ u¾ jsou spárovaní tak¾e si nesmíme vybrat $B$ ani $D$. Pak jediná mo¾nost, jak spárovat $d_1$ a~$k_2$ je $C$. Jedna mo¾nost je tedy vybrat si $A$ a $C$ a jeliko¾ je obrázek symetrický, tak kdy¾ vybereme místo $A$ trojici $B$, tak dostaneme $B$ a~$D$. V¾dy si vybereme dvì protìj¹í trojice v~obrázku. Takovýto obrázek budeme pou¾ívat k~reprezentaci promìnných. Pro ka¾dou promìnnou si nakreslíme takový obrázek a~to, ¾e $A$ bude spárované s~$C$ bude odpovídat tomu, ¾e $x=1$
-a~spárování $B$ a~$D$ odpovídá $x=0$. Pokud jsme pou¾ili $A$ a~$C$, zvíøata se sudými èísly ,tj. $z_2$ a~$z_4$, horní a~dolní jsou nespárovaná a~pokud jsme pou¾ili $B$ a~$D$, zvíøátka $z_1$ a~$z_3$ zùstala nespárovaná. Pøes tyto nespárovaná zvíøátka mù¾eme pøedávat informaci, jestli promìnná $x$ má hodnotu $true$ nebo $false$ do dal¹ích èástí grafu.
+V¹imneme si, ¾e existují právì dvì mo¾nosti, jak tento obrázek spárovat. Abychom spárovali kluka $k_1$, tak si musíme vybrat $A$ nebo $B$. Kdy¾ si vybereme $A$, $k_1$ i $d_2$ u¾ jsou spárovaní tak¾e si nesmíme vybrat $B$ ani $D$. Pak jediná mo¾nost, jak spárovat $d_1$ a~$k_2$ je $C$. Jedna mo¾nost je tedy vybrat si $A$ a $C$ a jeliko¾ je obrázek symetrický, tak kdy¾ vybereme místo $A$ trojici $B$, dostaneme $B$ a~$D$. V¾dy si tedy vybereme dvì protìj¹í trojice v~obrázku.
+
+Takovýto obrázek budeme pou¾ívat k~reprezentaci promìnných. Pro ka¾dou promìnnou si nakreslíme takový obrázek a~to, ¾e $A$ bude spárované s~$C$, bude odpovídat tomu, ¾e $x=1$, a~spárování $B$ a~$D$ odpovídá $x=0$. Pokud jsme pou¾ili $A$ a~$C$, zvíøata se sudými èísly, tj. $z_2$ a~$z_4$, horní a~dolní jsou nespárovaná a~pokud jsme pou¾ili $B$ a~$D$, zvíøátka $z_1$ a~$z_3$ zùstala nespárovaná. Pøes tyto nespárovaná zvíøátka mù¾eme pøedávat informaci, jestli promìnná $x$ má hodnotu \<true> nebo \<false> do dal¹ích èástí grafu.
+
 Zbývá vymyslet, jak reprezentovat klauzule. Klauzule budou vypadat jako trojice literálù:
 $\kappa = (x \lor y \lor \lnot r) $
 Potøebujeme zajistit, aby $x$ bylo nastavené na $1$ nebo $y$ bylo nastavené na $1$ nebo $r$ na $0$.
 
-\figure{klauzule.eps}{Obrázek 11.3}{4cm}
+\fig{klauzule.eps}{4cm}
+
+\>Pro takovouto klauzuli si poøídíme dvojici kluk-dívka, kteøí budou figurovat ve tøech trojicích se tøemi rùznými zvíøátky, co¾ mají být volná zvíøátka z~obrázkù pro pøíslu¹né promìnné. A~zaøídíme to tak, aby ka¾dé zvíøátko bylo pou¾ité maximálnì v~jedné takové trojici, co¾ jde proto, ¾e ka¾dý literál se vyskytuje maximálnì dvakrát a~pro ka¾dý literál máme dvì volná zvíøátka, z~èeho¾ plyne, ¾e zvíøátek je dost pro v¹echny klauzule.
+
+Je¹tì nám ale urèitì zbude $2p-k$ zvíøátek, kde $p$ je poèet promìnných, tak pøidáme je¹tì $2p-k$ párù kluk-dìvèe, kteøí milují v¹echna zvíøátka, a~ti vytvoøí zbývající páry.
+
+Pokud formule byla splnitelná, pak ze splòujícího ohodnocení mù¾eme vyrobit párování s~na¹í konstrukcí. Obrázek pro ka¾dou promìnnou spárujeme podle ohodnocení, tj. promìnná je $0$ nebo $1$ a~pro ka¾dou klauzuli si vybereme nìkterou z~promìnných, kterými je ta klauzule splnìna. Funguje to také ale i~opaènì. Kdy¾ nám nìkdo dá párovaní v~na¹í konstrukci, pak z nìho doká¾eme vyrobit splòující ohodnocení dané formule. Podíváme se, v~jakém stavu je promìnná, a~to je v¹echno. Z~toho, ¾e jsou správnì spárované klauzule, u¾ okam¾itì víme, ¾e jsou v¹echny splnìné.
 
-\>Pro takovouto klauzuli si poøídíme dvojici kluk-dívka, kteøí budou figurovat ve tøech trojicích se tøemi rùznými zvíøátky, co¾ mají být volná zvíøátka z~obrázku pro pøíslu¹né promìnné. A~zaøídíme to tak, aby ka¾dé zvíøátko bylo pou¾ité maximálnì v~jedné takové trojici, co¾ jde proto, ¾e ka¾dý literál se vyskytuje maximálnì dvakrát a~pro ka¾dý literál máme dvì volná zvíøátka,
-z~èeho¾ plyne, ¾e zvíøátek je dost pro v¹echny klauzule. Pak nám ale urèitì zbude $2p-k$ zvíøátek, kde $p$ je poèet promìnných, tak pøidáme je¹tì $2p-k$ párù kluk-dìvèe, kteøí milují v¹echna zvíøátka a~ti vytvoøí zbývající páry. Pokud formule byla splnitelná, pak ze splòujícího ohodnocení mù¾eme vyrobit párování s~na¹í konstrukcí. Obrázek pro ka¾dou promìnnou spárujeme podle ohodnocení, tj. promìnná je $0$ nebo $1$ a~pro ka¾dou klauzuli si vybereme nìkterou z~promìnných, kterými je ta klauzule splnìna. Funguje to také ale i~opaènì. Kdy¾ nám nìkdo dá párovaní v~na¹í konstrukci, pak z nìho doká¾eme vyrobit splòující ohodnocení dané formule. Podíváme se, v~jakém stavu je promìnná a~to je v¹echno. Z~toho, ¾e jsou správnì spárované klauzule u¾ okam¾itì víme, ¾e jsou v¹echny splnìné. Zbývá ovìøit, ¾e na¹e redukce funguje v~polynomiálním èase. Pro ka¾dou klauzuli spotøebujeme konstantnì mnoho èasu, $2p-k$ je také polynomiálnì mnoho a~kdy¾ to seèteme, pak máme polynomiální èas vzhledem k~velikosti vstupní formule. Tím je pøevod hotový a~mù¾eme 3D-párování zaøadit mezi NP-úplné problémy.
+Zbývá ovìøit, ¾e na¹e redukce funguje v~polynomiálním èase. Pro ka¾dou klauzuli spotøebujeme konstantnì mnoho èasu, $2p-k$ je také polynomiálnì mnoho a~kdy¾ to seèteme, máme polynomiální èas vzhledem k~velikosti vstupní formule. Tím je pøevod hotový a~mù¾eme 3D-párování zaøadit mezi NP-úplné problémy.
 
 
 %RK
 
 
-\h{Náznak dùkazu Cookovy vety}
+\h{Náznak dùkazu Cookovy vìty}
 
-Abychom mohli budovat teorii NP-úplnosti, tak potøebujeme alespoò jeden problém, o kterém doká¾eme, ¾e je NP-úplný z definice. Cookova vìta øíká o NP-úplnosti SAT-u, ale nám se to hodí dokázat o tro¹ku jiném problému -- {\I obvodovém SAT-u}.
+Abychom mohli budovat teorii NP-úplnosti, potøebujeme alespoò jeden problém, o kterém doká¾eme, ¾e je NP-úplný, z definice. Cookova vìta øíká o NP-úplnosti SAT-u, ale nám se to hodí dokázat o tro¹ku jiném problému -- {\I obvodovém SAT-u}.
 
-\>{\I Obvodový SAT} je splnitelnost, která nepracuje s~formulemi, ale s~boolovskými obvody. Ka¾dá formule se dá pøepsat do boolovského obvodu, který ji poèítá, tak ¾e dává smysl zavést splnitelnost pro obvody. Na¹e obvody budou mít nìjaké vstupy a~jenom jeden výstup. Budeme se ptát, jestli se vstupy tohoto obvodu dají nastavit tak, abychom na výstupu dostali $1$.
+\>{\I Obvodový SAT} je splnitelnost, která nepracuje s~formulemi, ale s~booleovskými obvody. Ka¾dá formule se dá pøepsat do booleovského obvodu, který ji poèítá, tak¾e dává smysl zavést splnitelnost pro obvody. Na¹e obvody budou mít nìjaké vstupy a~jenom jeden výstup. Budeme se ptát, jestli se vstupy tohoto obvodu dají nastavit tak, abychom na výstupu dostali \<true>.
 
 \>Nejprve doká¾eme NP-úplnost {\I obvodového SAT-u} a~pak uká¾eme, ¾e se dá pøevést na formulový SAT. Tím bude dùkaz Cookovy vìty hotový.
 
 \s{Vìta:} Obvodový SAT je NP-úplný.
 
 \proof
-Náznak. Na základì zku¹eností principu poèítaèù intuitivnì chápeme, ¾e pokud nìjaký problém $L \in \rm{P}$, pak existuje polynomiálnì velký boolovský obvod, který poèítá $L$.
+Náznakem. Na základì zku¹eností z Principù poèítaèù intuitivnì chápeme, ¾e pokud nìjaký problém $L \in \rm{P}$, pak existuje polynomiálnì velký booleovský obvod, který poèítá $L$.
 
 \>Dovolíme si drobnou úpravu v~definici tøídy NP. Budeme chtít, aby nápovìda byla pravì tak velká jako velikost vstupu (tedy: $\vert y \vert = g(\vert x \vert)$). Proè je taková úprava BÚNO? Jistì si dovedete pøedstavit, ¾e pùvodní nápovìdu doplníme
 na po¾adovanou délku nìjakými \uv{mezerami}, které program ignoruje. (Tedy upravíme program tak, aby mu nevadilo, ¾e dostane na konci nápovìdy nìjak kódované mezery.)
 
-\>Máme nìjaký problém $L$ z~NP a~chceme dokázat, ¾e $L$ se dá pøevést na obvodový SAT. Kdy¾ nám nìkdo pøedlo¾í nìjaký vstup $x$ (chápeme jako vektor $(x_1, x_2, \dots)$), spoèítáme velikost nápovìdy $g(\vert x\vert)$. Víme, ¾e kontrolní algoritmus $K$ (který kontroluje, zda nápovìda je správnì) je v~P. Vyu¾ijeme intuice v~obvodech, abychom získali obvod, který pro konkrétní velikost vstupu $x$ poèítá to, co kontrolní algoritmus $K$. Na vstupu tohoto obvodu bude $x$ (vstup problému $L$) a~nápovìda $y$.
+\>Máme nìjaký problém $L$ z~NP a~chceme dokázat, ¾e $L$ se dá pøevést na obvodový SAT. Kdy¾ nám nìkdo pøedlo¾í nìjaký vstup $x$ (chápeme jako vektor $(x_1, x_2, \dots)$), spoèítáme velikost nápovìdy $g(\vert x\vert)$. Víme, ¾e kontrolní algoritmus $K$ (který kontroluje, zda nápovìda je správnì) je v~P. Vyu¾ijeme intuice o~obvodech, abychom získali obvod, který pro konkrétní velikost vstupu $x$ poèítá to, co kontrolní algoritmus $K$. Na vstupu tohoto obvodu bude $x$ (vstup problému $L$) a~nápovìda $y$.
 Na výstupu nám øekne, jestli je to nápovìda, která k~tomu patøí nebo nepatøí. Velikost vstupu tohoto obvodu bude tedy $\vert x\vert + g(\vert x\vert)$, co¾ je polynom.
 
-\figure{kobvod.eps}{Obrázek 11.4 - Obvod pro kontrolní algoritmus $K$}{2.3cm}
+\fig{kobvod.eps}{2.3cm}
 
-\>V tomto obvodu zafixujeme vstup $x$ (na místa vstupu dosadíme konkrétní hodnoty z $x$). Tím získáme obvod, jeho¾ vstup je jen $y$ a~ptáme se, zda za $y$ mù¾eme dosadit nìjaké hodnoty tak, aby na výstupu byla 1. Jinými slovy, ptáme se, zda je tento obvod splnitelný.
+\>V tomto obvodu zafixujeme vstup $x$ (na místa vstupu dosadíme konkrétní hodnoty z $x$). Tím získáme obvod, jeho¾ vstup je jen $y$ a~ptáme se, zda za $y$ mù¾eme dosadit nìjaké hodnoty tak, aby na výstupu bylo \<true>. Jinými slovy, ptáme se, zda je tento obvod splnitelný.
 
-\>Pro libovolný problém z~NP tak doká¾eme vyrobit funkci, která pro ka¾dý vstup $x$ v~polynomiálním èase vytvoøí obvod, který je splnitelný pravì tehdy, kdy¾ odpovìï tohoto problému na vstup $x$ má být jedna. Tedy libovolný problém z~NP se dá
-v~polnomiálním èase pøevést na obvodový SAT.
+\>Pro libovolný problém z~NP tak doká¾eme vyrobit funkci, která pro ka¾dý vstup $x$ v~polynomiálním èase vytvoøí obvod, který je splnitelný pravì tehdy, kdy¾ odpovìï tohoto problému na vstup $x$ má být \<true>. Tedy libovolný problém z~NP se dá
+v~polynomiálním èase pøevést na obvodový SAT.
 \qed
 
 \s{Lemma:} Obvodový SAT se dá pøevést na 3-SAT.
 
 \proof
-Budeme postupnì budovat formuli v~konjunktivní normální formì. Pro ka¾dé hradlo v~obvodu zavedeme novou promìnnou popisující jeho výstup. Pøidáme klauzule, které nám kontrolují, ¾e toto hradlo máme ohodnocené konzistentnì. Ka¾dý boolovský obvod se dá pøevést na ekvivalentní obvod, v~kterém se vyskytují jen hradla {\sc and} a {\sc not}, tak ¾e staèí najít klauzule odpovídající tìmto hradlùm.
+Budeme postupnì budovat formuli v~konjunktivní normální formì. Pro ka¾dé hradlo v~obvodu zavedeme novou promìnnou popisující jeho výstup. Pøidáme klauzule, které nám kontrolují, ¾e toto hradlo máme ohodnocené konzistentnì. Ka¾dý booleovský obvod se dá pøevést na ekvivalentní obvod, ve~kterém se vyskytují jen hradla {\sc and} a {\sc not}, tak¾e staèí najít klauzule odpovídající tìmto hradlùm.
 
 \>{\I Pøevod hradla \sc not}: na vstupu hradla budeme mít nìjakou promìnnou $x$ (která pøi¹la buïto pøímo ze~vstupu toho celého obvodu nebo je to promìnná, která vznikla na výstupu nìjakého hradla) a na výstupu promìnnou $y$. Pøidáme klauzule, které nám zaruèí, ¾e jedna promìnná bude negací té druhé:
 $$\matrix{ (x \lor y), \cr
   (\neg{x} \lor \neg{y}). \cr }$$
-\figure{not.eps}{Obrázek 11.5 - Hradlo \sc not}{0.8cm}
+\fig{not.eps}{0.8cm}
 
 \>{\I Pøevod hradla \sc and}: Hradlo má vstupy $x, y$ a~výstup $z$. Potøebujeme pøidat klauzule, které nám popisují, jak se má hradlo {\sc and} chovat. Tyto vztahy pøepí¹eme do~konjunktivní normální formy:
 $$
@@ -136,17 +149,17 @@ $$
  (\neg{z} \lor x)              \cr
  (\neg{z} \lor y)              \cr
  } $$
-\figure{and.eps}{Obrázek 11.6 - Hradlo \sc and}{0.9cm}
+\fig{and.eps}{0.9cm}
 
-\>Kdy¾ chceme pøevádìt obvodový SAT na 3-SAT, tak ten obvod nejdøíve pøelo¾íme na obvod, v~kterém jsou jen hradla {\sc and} a~{\sc not} a~pak hradla tohoto obvodu pøelo¾íme na klauzule. Formule vzniklá z~takovýchto klauzulí je splnitelná pravì tehdy, kdy¾ je splnitelný daný obvod.
+\>Kdy¾ chceme pøevádìt obvodový SAT na 3-SAT, obvod nejdøíve pøelo¾íme na takový, v~kterém jsou jen hradla {\sc and} a~{\sc not}, a~pak hradla tohoto obvodu pøelo¾íme na klauzule. Formule vzniklá z~takovýchto klauzulí je splnitelná pravì tehdy, kdy¾ je splnitelný daný obvod. Pøevod pracuje v polynomiálním èase.
 \qed
 
 \s{Poznámka:}
 Kdy¾ jsme zavádìli SAT, omezili jsme se jen na formule, které jsou
 v~konjunktivní normální formì (CNF). Teï u¾ víme, ¾e splnitelnost obecné
-boolovské formule doká¾eme pøevést na obvodovou splnitelnost a tu pak
+booleovské formule doká¾eme pøevést na obvodovou splnitelnost a tu pak
 pøevést na 3-SAT. SAT bychom si tedy mohli definovat i jako problém
-splnitelnosti obecných boolovských formulí.
+splnitelnosti obecných booleovských formulí.
 
 
 \bye