From: Martin Mares Date: Mon, 18 Jan 2010 23:21:05 +0000 (+0100) Subject: NP-uplnost: korektury. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;ds=sidebyside;h=ae1fcefb856336fc42bf409af8c1417f0e736c4d;p=ads2.git NP-uplnost: korektury. --- diff --git a/11-np/11-np.tex b/11-np/11-np.tex index 1007575..bbe61b8 100644 --- a/11-np/11-np.tex +++ b/11-np/11-np.tex @@ -3,12 +3,26 @@ \prednaska{11}{NP-úplné problémy}{\vbox{\hbox{(zapsali F. Kaèmarik, R. Krivák, D. Remi¹} \hbox{ Michal Kozák, Vojta Tùma)}}} -Dosud jsme zkoumali problémy, které se nás ptaly na to, jestli nìco existuje. Napøíklad jsme dostali 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á obsahuje alespoò~$k$ vrcholù. 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 \ nebo \. 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 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: +Dosud jsme zkoumali problémy, které se nás ptaly na to, jestli nìco existuje. +Napøíklad jsme dostali 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á obsahuje alespoò~$k$ vrcholù. +Tyto otázky mìly spoleèné to, ¾e kdy¾ nám nìkdo napovìdìl nìjaký objekt, umìli +jsme efektivnì øíci, zda je to ten, který hledáme. Napøíklad pokud dostaneme +ohodnocení promìnných logické formule, staèí jen dosadit a spoèítat, kde +formule dá \ nebo \. 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. +Nadefinujeme 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 $\O(f(x))$. + +Tøída P tedy odpovídá tomu, o èem jsme se shodli, ¾e umíme efektivnì øe¹it. +Nadefinujme nyní tøídu NP: \s{Definice:} NP je {\I tøída rozhodovacích problémù} takových, ¾e $L \in {\rm NP}$ právì tehdy, kdy¾ $\exists $ problém $K\in{\rm P}$ a $\exists$ polynom $g$ takový, ¾e pro @@ -17,21 +31,22 @@ $\forall x$ plat \s{Pozorování:} Splnitelnost logických formulí je v~NP. Staèí si toti¾ nechat napovìdìt, jak ohodnotit jednotlivé promìnné a pak ovìøit, jestli je formule splnìna. Nápovìda je polynomiálnì velká (dokonce lineárnì), splnìní zkontrolujeme také v~lineárním èase. Odpovíme tedy ano právì -tehdy, existuje-li nápovìda, která nás pøesvìdèí, tedy pokud je formule splnitelná. +tehdy, existuje-li nápovìda, která nás pøesvìdèí, èili pokud je formule splnitelná. \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. +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. Problémy z minulé pøedná¹ky jsou v¹echny v NP (napø. pro nezávislou -mno¾inu je onou nápovìdou pøímo mno¾ina vrcholù deklarující nezávislost), -o jejich pøíslu¹nosti do P ale nevíme nic. +mno¾inu je onou nápovìdou pøímo mno¾ina vrcholù deklarující nezávislost), +o jejich pøíslu¹nosti do P ale nevíme nic. Brzy uká¾eme, ¾e to jsou v jistém smyslu nejtì¾¹í problémy v~NP. Nadefinujme si: \s{Definice:} Problém $L$ je NP-{\I tì¾ký} právì tehdy, kdy¾ je na~nìj pøevoditelný ka¾dý problém z~NP (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, +Rozmyslete si, ¾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, a tedy ${\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é. @@ -49,10 +64,11 @@ Kde ale n \s{Vìta (Cookova):} SAT je NP-úplný. -\>Dùkaz je znaènì technický, pøibli¾nì ho naznaèíme pozdìji. Pøímým dùsledkem je, ¾e cokoli v~NP je pøevoditelné na SAT. +\>Dùkaz je znaènì technický, pøibli¾nì ho naznaèíme pozdìji. Pøímým dùsledkem +Cookovy vìty 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:} Pokud problém $L$ je NP-úplný a $L$ se dá pøevést na $M\in{\rm NP}$ ($L \rightarrow M$), pak $M$ je také NP-úplný. +\s{Vìtièka:} Pokud problém $L$ je NP-úplný a $L$ se dá pøevést na nìjaký problém $M\in{\rm NP}$, pak $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 @@ -65,23 +81,26 @@ op dá 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, rùzné varianty SATu, klika v~grafu~\dots +\s{Dùsledek:} Cokoliv, na co jsme umìli pøevést SAT, je také NP-úplné. +Napøíklad nezávislá mno¾ina, rùzné varianty SATu, klika v~grafu~\dots -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ù (tedy navzdor gravitaci), kde porovnání dvou +Jak taková tøída NP vypadá? Pøedstavme si v¹echny problémy tøídy NP, jakoby seøazené +zhora dolu podle obtí¾nosti problémù (tedy navzdor gravitaci), 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á. +\foot{Poznámka o ¹ifrách -- libovolnou funkci vyèíslitelnou v polynomiálním +èase bychom umìli v polynomiálním èase také invertovat.} Jestli ne, NP-úplné problémy urèitì nele¾í v P, tak¾e P a NP-úplné problémy jsou dvì disjunktní èásti NP. Také se dá dokázat (to dìlat nebudeme, ale je dobré to vìdìt), ¾e je¹tì nìco le¾í mezi nimi, tedy ¾e existuje problém, který -je v~NP, není v~P a není NP-úplný (dokonce je takových problémù nekoneènì mnoho, +je v~NP, není v~P a není NP-úplný (dokonce je takových problémù nekoneènì mnoho, v nekoneènì tøídách). - + \s{Katalog NP-úplných problémù} Uká¾eme si nìkolik základních NP-úplných problémù. O~nìkterých jsme to dokázali @@ -99,101 +118,105 @@ na~cvi \endlist \:{\I grafové:} \itemize\ibull - \:Nezávislá mno¾ina (mno¾ina alespoò~$k$ vrcholù taková, ¾e ¾ádné dva nejsou propojeny hranou) - \:Klika (úplný podgraf na~$k$ vrcholech) - \:3D párování (tøi mno¾iny se zadanými trojicemi, najít takovou mno¾inu disjunktních trojic, ve~které jsou v¹echny prvky) - \:Barvení grafu (obarvit vrcholy $k$~barvami tak, aby vrcholy stejné barvy nebyly nikdy spojeny hranou; NP-úplné u¾ pro~$k=3$) + \:Nezávislá mno¾ina (existuje mno¾ina alespoò~$k$ vrcholù taková, ¾e ¾ádné dva nejsou propojeny hranou?) + \:Klika (existuje úplný podgraf na~$k$ vrcholech?) + \:3D párování (tøi mno¾iny se zadanými trojicemi, existuje taková mno¾ina disjunktních trojic, ve~které jsou v¹echny prvky?) + \:Barvení grafu (lze obarvit vrcholy $k$~barvami tak, aby vrcholy stejné barvy nebyly nikdy spojeny hranou? NP-úplné u¾ pro~$k=3$) \:Hamiltonovská cesta (cesta obsahující v¹echny vrcholy [právì jednou]) \:Hamiltonovská kru¾nice (kru¾nice, která nav¹tíví v¹echny vrcholy [právì jednou]) \endlist \:{\I èíselné:} \itemize\ibull \:Batoh (nejjednodu¹¹í verze: dána mno¾ina èísel, zjistit, zda existuje podmno¾ina se zadaným souètem) - \:Batoh -- optimalizace (podobnì jako u pøedchozího problému, ale místo mno¾iny èísel máme mno¾inu - pøedmìtù s váhami a cenami, chceme co nejdra¾¹í podmno¾inu její¾ váha nepøesáhne zadanou kapacitu + \:Batoh -- optimalizace (podobnì jako u pøedchozího problému, ale místo mno¾iny èísel máme mno¾inu + pøedmìtù s vahami a cenami, chceme co nejdra¾¹í podmno¾inu její¾ váha nepøesáhne zadanou kapacitu batohu) - \:Loupe¾níci (rozdìlit mno¾inu na~dvì podmno¾iny se stejným souètem) + \:Loupe¾níci (lze rozdìlit danou mno¾inu èísel na~dvì podmno¾iny se stejným souètem) \:$Ax=b$ (soustava celoèíslených lineárních rovnic; $x_i$ mohou být pouze 0 nebo 1; NP-úplné i pokud $A_{ij}\in\{0,1\}$ a $b_i\in\{0,1\}$) - \:Celoèíselné lineární programování (existuje vektor nezáporných celoèísených $x$ takový, ¾e $Ax \leq b$) + \:Celoèíselné lineární programování (existuje vektor nezáporných celoèísených $x$ takový, ¾e $Ax \leq b$ ?) \endlist \endlist -Nyní si uká¾eme, jak pøevést SAT na nìjaký problém. 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ù -\/\; a nìco, co bude reprezentovat klauzule a umí zaøídit, aby -ka¾dá klauzule byla splnìna alespoò jednou promìnnou. +Nyní si uká¾eme, jak pøevést SAT na nìjaký problém. 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ù +\/\; a nìco, co bude reprezentovat klauzule a umí zaøídit, aby +ka¾dá klauzule byla splnìna alespoò jednou promìnnou. +Roz¹iøme tedy ná¹ katalog problémù o následující: \h{3D párování (3D matching)} -\>{\I Vstup:} Tøi mno¾iny, napø. $K$ (kluci), $H$ (holky), $Z$ (zvíøátka) a -mno¾ina $T$ kompatibilních trojic (tìch, kteøí se spolu snesou), +\>{\I Vstup:} Tøi mno¾iny, napø. $K$ (kluci), $H$ (holky), $Z$ (zvíøátka) a +mno¾ina $T$ kompatibilních trojic (tìch, kteøí se spolu snesou), tj. $T \subseteq K\times H\times Z$. -\>{\I Výstup:} Perfektní podmno¾ina trojic $P\subseteq K\times H \times Z$ -- - tj. taková podmno¾ina trojic, ¾e $(\forall k\in K\ \exists !p\in P, k\in p) - \wedge(\forall h\in H\ \exists !p\in P, h\in p) - \wedge(\forall z\in Z\ \exists !p\in P, z\in p)$ -- tedy ka¾dý byl vybrán +\>{\I Výstup:} Perfektní podmno¾ina trojic $P\subseteq K\times H \times Z$ -- + tj. taková podmno¾ina trojic, ¾e $(\forall k\in K\ \exists !p\in P: k\in p) + \wedge(\forall h\in H\ \exists !p\in P: h\in p) + \wedge(\forall z\in Z\ \exists !p\in P: z\in p)$ -- tedy ka¾dý byl vybrán právì jednou. -\h { Pøevoditelnost 3,3-SAT na 3D-párování } +\h{ Uká¾eme, jak na 3D-párování pøevést 3,3-SAT } -Najdeme si takovouto konfiguraci: +Uva¾ujme takovouto konfiguraci: \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 +\>4 zvíøátka, 2 kluci, 2 dívky a 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$, dostaneme $B$ a~$D$. V¾dy si tedy vybereme dvì protìj¹í +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 \ nebo \ do dal¹ích èástí grafu. +Tyto konfigurace 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$ bude odpovídat + $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 tato nespárovaná zvíøátka mù¾eme pøedávat informaci, jestli +promìnná $x$ má hodnotu \ nebo \ do dal¹ích èástí vstupu. -Zbývá vymyslet, jak reprezentovat klauzule. Klauzule jsou trojice popø. dvojice -literálù, napø. $\kappa = (x \lor y \lor \lnot r) $ kde -potøebujeme zajistit, aby $x$ bylo nastavené na $1$ nebo $y$ bylo nastavené na $1$ nebo $r$ na $0$. +Zbývá vymyslet, jak reprezentovat klauzule. Klauzule jsou trojice popø. dvojice +literálù, napø. $\kappa = (x \lor y \lor \lnot r)$, kde +potøebujeme zajistit, aby $x$ bylo nastavené na $1$ nebo $y$ bylo nastavené +na~$1$ nebo $r$ na $0$. \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é (podle toho, má-li se promìnná vyskytnout -s negací nebo ne). 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. Pro dvojice se postupuje +\>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é (podle toho, má-li se promìnná vyskytnout +s negací nebo ne). 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. Pro dvojice se postupuje obdobnì. -Je¹tì nám ale urèitì zbude $2p-k$ zvíøátek, kde $p$ je poèet promìnných, $k$ -poèet klauzulí --- ka¾dá promìnná vyrobí 4 zvíøátka, klauzule zba¹tí jedno -a samotné ohodnocení 2 zvíøátka --- 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¾ +Je¹tì nám ale urèitì zbude $2p-k$ zvíøátek, kde $p$ je poèet promìnných, $k$ +poèet klauzulí -- ka¾dá promìnná vyrobí 4 zvíøátka, klauzule zba¹tí jedno +a samotné ohodnocení 2 zvíøátka -- 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í trojice. + +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 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, máme polynomiální èas vzhledem k~velikosti vstupní formule. Tím je +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¾ v¹e +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. @@ -202,18 +225,29 @@ p \h{Náznak dùkazu Cookovy vìty} -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}. +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~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 i 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 \. +\>{\I Obvodový SAT} je splnitelnost, která nepracuje s~formulemi, ale s~booleovskými +obvody (hradlovými sítìmi). Ka¾dá formule se dá pøepsat do booleovského obvodu, +který ji poèítá, tak¾e dává smysl zavést splnitelnost i 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 \. -\>Nejprve doká¾eme NP-úplnost {\I obvodového SAT-u} a~pak uká¾eme, ¾e se dá pøevést na obyèejný SAT v~CNF. Tím bude dùkaz Cookovy vìty hotový. Zaènìme s pomocným lemmatem. +\>Nejprve doká¾eme NP-úplnost {\I obvodového SAT-u} a~pak uká¾eme, ¾e se dá +pøevést na obyèejný SAT v~CNF. Tím bude dùkaz Cookovy vìty hotový. Zaènìme +s pomocným lemmatem. -\s{Lemma:} Nech» $L$ je problém v $P$. Potom existuje polynom $p$ a algoritmus, který pro $\forall n \ge 0$ spoète v èase $p(n)$ hradlovou sí» $B_n$ s $n$ vstupy a 1 výstupem takovou, ¾e $\forall x \in \{ 0, 1 \}^{n} : B_n(x) = L(x).$ +\s{Lemma:} Nech» $L$ je problém v P. Potom existuje polynom $p$ a algoritmus, +který pro $\forall n \ge 0$ spoète v èase $p(n)$ hradlovou sí» $Bn$ s $n$ vstupy +a 1 výstupem takovou, ¾e $\forall x \in \{ 0, 1 \}^n : Bn(x) = L(x)$. \proof Náznakem. Na základì zku¹eností z Principù poèítaèù intuitivnì chápeme poèítaèe -jako nìjaké slo¾ité booleovské obvody, jejich¾ stav se mìní v~èase. Uva¾me tedy nìjaký -problém $L \in {\rm P}$ a polynomiální algoritmus, který ho øe¹í. Pro vstup velikosti~$n$ dobìhne v~èase~$T$ polynomiálním v~$n$ a spotøebuje $\O(T)$ bunìk pamìti. +jako nìjaké slo¾ité booleovské obvody, jejich¾ stav se mìní v~èase. Uva¾me tedy +nìjaký problém $L \in {\rm P}$ a polynomiální algoritmus, který ho øe¹í. Pro vstup +velikosti~$n$ dobìhne v~èase~$T$ polynomiálním v~$n$ a spotøebuje $\O(T)$ bunìk pamìti. Staèí nám tedy \uv{poèítaè s~pamìtí velkou $\O(T)$}, co¾ je nìjaký booleovský obvod velikosti polynomiální v~$T$, a~tedy i v~$n$. Vývoj v~èase o¹etøíme tak, ¾e sestrojíme~$T$ kopií tohoto obvodu, ka¾dá z~nich bude odpovídat jednomu kroku výpoètu a bude @@ -222,24 +256,27 @@ kter vzhledem k~$n$. \s{Poznámka:} -Je¹tì si dovolíme drobnou úpravu v~definici tøídy NP. Budeme chtít, aby nápovìda +Pro dùkaz následující vìty si dovolíme drobnou úpravu v~definici tøídy NP. +Budeme chtít, aby nápovìda byla mìla pevnou velikost, závislou pouze na~velikosti vstupu (tedy: $\vert y \vert -= g(\vert x \vert)$). Proè je taková úprava BÚNO? Jistì si dovedete pøedstavit, += g(\vert x \vert)$ namísto $\vert y \vert \le 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). +program ignoruje. (Tedy upravíme program tak, aby mu nevadilo, ¾e dostane na +konci nápovìdy nìjak kódované mezery.) \s{Vìta:} Obvodový SAT je NP-úplný. \proof -Máme tedy nìjaký problém $L$ z~NP a~chceme dokázat, ¾e $L$ se dá pøevést na obvodový -SAT (tj. NP-tì¾kost). Kdy¾ nám nìkdo pøedlo¾í nìjaký vstup $x$ (chápeme jako vektor $(x_1, x_2, \ldots, x_n)$), -spoèítáme velikost nápovìdy $g(\vert x\vert)$. Víme, ¾e kontrolní +Máme tedy nìjaký problém $L$ z~NP a~chceme dokázat, ¾e $L$ se dá pøevést +na~obvodový SAT (tj. NP-tì¾kost). Kdy¾ nám nìkdo pøedlo¾í nìjaký vstup $x$ +(chápeme jako posloupnost $x_1, x_2, \ldots, x_n$), +spoèítáme velikost nápovìdy $g(n)$. 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 +pøedhozí lemma, 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 nápovìda -správná. Velikost vstupu tohoto obvodu bude tedy $\vert x\vert + g(\vert x\vert)$, co¾ je polynom. +správná. Velikost vstupu tohoto obvodu bude tedy $p(g(n))$, co¾ je také polynom. \fig{kobvod.eps}{2.3cm} @@ -248,13 +285,13 @@ spr \>Pro libovolný problém z~NP tak doká¾eme sestrojit 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 \. Tedy libovolný problém z~NP se dá v~polynomiálním èase pøevést na obvodový SAT. -\>Obvodový SAT je v NP triviálnì -- za nápovìdu staèí vzít ohodnocení vstupù, hradla topologicky setøídit a postupnì vyhodnocovat. +\>Obvodový SAT je v NP triviálnì - ??? staèí topologicky setøídit a pak brát hradla postupnì.??? \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ý 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. +Budeme postupnì budovat formuli v~konjunktivní normální formì. Ka¾dý booleovský obvod se dá pøevést v~polynomiálním èase 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. 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ì. \>{\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 @@ -293,3 +330,4 @@ p je ve~skuteènosti ekvivalentní s~na¹ím \uv{standardním} SATem pro CNF. \bye +