From: Martin Mares Date: Wed, 21 Dec 2011 23:24:28 +0000 (+0100) Subject: Prevody: Prepis pokracuje, uz zasahl vsechny problemy X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=becb7980d5658ac8b7e2d47338679cc04c397cf0;p=ads2.git Prevody: Prepis pokracuje, uz zasahl vsechny problemy --- diff --git a/8-prevody/8-prevody.tex b/8-prevody/8-prevody.tex index e5fc025..d59df9a 100644 --- a/8-prevody/8-prevody.tex +++ b/8-prevody/8-prevody.tex @@ -2,6 +2,10 @@ \prednaska{8}{Pøevody problémù a NP-úplnost}{} +\def\prob#1{\h{Problém #1}} +\def\inp{\s{Vstup problému:} } +\def\outp{\s{Výstup problému:} } + 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.% @@ -14,7 +18,7 @@ funguje p 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 +pro které zatím ¾ádný polynomiální 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ù. @@ -120,208 +124,283 @@ Nyn 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. +\prob{SAT -- Splnitelnost logických formulí v~CNF} + +Splnitelnost (satisfiability) spoèívá v~tom, ¾e dostaneme logickou formuli +s~promìnnými a logickými spojkami a ptáme se, zda lze za promìnné dosadit +0 a~1 tak, aby formule dala výsledek 1 (byla splnìna). + +Zamìøíme se na speciální formu zadání formulí, takzvanou {\I konjunktivní normální +formu (CNF):} -\>Zamìøíme se na speciální formu zadání formulí, {\I konjunktivní normální formu} (CNF), - které splòují následující podmínky: \itemize\ibull -\:{\I formule} je zadána pomocí {\I klauzulí}\footnote{${}^{\dag}$}{bez politických konotací} oddìlených $\land$, +\:{\I formule} je slo¾ena z~jednotlivých {\I klauzulí} oddìlených spojkou~$\land$, \:ka¾dá {\I klauzule} je slo¾ená z {\I literálù} oddìlených $\lor$, \:ka¾dý {\I literál} je buïto promìnná nebo její negace. \endlist -\>Formule mají tedy tvar: +\>Formule mají tedy tvar $$\psi = (\ldots\lor\ldots\lor\ldots\lor\ldots) \land (\ldots\lor\ldots\lor\ldots\lor\ldots) \land \ldots $$ -\>{\I Vstup:} Formule $\psi$ v konjunktivní normální formì. - -\>{\I Výstup:} $\exists$ dosazení 1 a 0 za promìnné takové, ¾e hodnota formule $\psi(\ldots) = 1$. +\inp Formule $\psi$ v konjunktivní normální formì. +\outp Existuje-li dosazení 0 a~1 za promìnné tak, aby $\psi(\ldots) = 1$. +\s{Poznámka:} Co kdybychom chtìli zjistit, zda je splnitelná nìjaká formule, +která není v~CNF? V~logice se dokazuje, ¾e ke~ka¾dé formuli lze najít ekvivalentní +formuli v~CNF, ale pøi tom se bohu¾el formule mù¾e a¾ exponenciálnì prodlou¾it. +Pozdìji uká¾eme, ¾e pro ka¾dou formuli~$\chi$ existuje nìjaká formule $\chi'$ v~CNF, +která je splnitelná právì tehdy, kdy¾ je $\chi$ splnitelná. Formule $\chi'$ pøitom +bude dlouhá $\O(\vert\chi\vert)$, ale budou v~ní nìjaké nové promìnné. -\>Pøevod nìjaké obecné formule $\psi$ na jí ekvivalentní $\chi$ v~CNF mù¾e -zpùsobit, ¾e $\chi$ je exponenciálnì velká vùèi $\psi$. -Pozdìji uká¾eme, ¾e lze podniknout pøevod na takovou formuli $\chi'$ v~CNF, která sice není -ekvivalentní s $\psi$ (pøibydou nám promìnné, a ne ka¾dý roz¹íøený model -$\psi$ je modelem $\chi'$), ale je splnitelná právì tehdy, kdy¾ je splnitelná $\psi$ -- co¾ nám -pøesnì staèí -- a je lineárnì velká vùèi $\psi$. +\prob{3-SAT -- Splnitelnost formulí s~krátkými klauzulemi} -\h{2. problém: 3-SAT} -\s{Definice:} 3-SAT je takový SAT, v nìm¾ ka¾dá klauzule obsahuje nejvý¹e tøi literály. +Uva¾ujme variantu SATu, ve~které mno¾inu mo¾ných formulí je¹tì omezíme. +Povolíme na vstupu pouze takové formule v~CNF, jejich¾ ka¾dá klauzule obsahuje +nejvý¹e tøi literály. Uká¾eme, ¾e tento problém je stejnì tì¾ký jako pùvodní SAT. -\s{Pøevod 3-SAT na SAT:} -Vstup není potøeba nijak upravovat, 3-SAT splòuje vlastnosti SATu, proto 3-SAT -$\rightarrow$ SAT (SAT je alespoò tak tì¾ký jako 3-SAT) +\s{Pøevod 3-SATu na SAT:} +Jeliko¾ 3-SAT je speciálním pøípadem SATu, poslou¾í tu jako pøevodní funkce +identické zobrazení. -\s {Pøevod SAT na 3-SAT:} -Musíme formuli pøevést tak, abychom neporu¹ili splnitelnost. +\s{Pøevod SATu na 3-SAT:} +Nech» se ve~formuli vyskytuje nìjaká \uv{¹patná} klauzule o~$k>3$ literálech. +Mù¾eme ji zapsat ve~tvaru $(\alpha\lor\beta)$, kde $\alpha$ obsahuje 2~literály +a $\beta$ $k-2$ literálù. Poøídíme si novou promìnnou~$x$ a klauzuli nahradíme +dvìma novými $(\alpha\lor x)$ a $(\beta\lor\lnot x)$. První z~nich obsahuje 3~literály, +tedy je dobrá. Druhá má $k-1$ literálù, tak¾e sice mù¾e být ¹patná, ale aspoò je +krat¹í, tak¾e mù¾eme postup opakovat. -\>Trik pro dlouhé klauzule: Ka¾dou \uv{¹patnou} klauzuli -$$(\alpha \lor \beta) \hbox{, t¾. } \vert\alpha\vert + \vert\beta\vert \ge 4 -,\ \vert\alpha\vert \geq 2,\ \vert\beta\vert\geq 2$$ -pøepí¹eme na: $$(\alpha \lor x) \land (\beta \lor \lnot x),$$ -kde $x$ je nová promìnná (pøi ka¾dém dìlení klauzule {\it jiná} -nová promìnná). -%kterou nastavíme tak, abychom neovlivnili splnitelnost formule. +Takto postupnì nahradíme v¹echny ¹patné klauzule dobrými, co¾ bude trvat nejvý¹e +polynomiálnì dlouho: klauzuli délky~$k$ rozbijeme po $k-3$ krocích, ¹patných +klauzulí je jistì polynomiálnì s~délkou formule. Staèí ukázat, ¾e ka¾dý jednotlivý +krok zachovává splnitelnost formule. -\>Tento trik opakujeme tak dlouho, dokud je to tøeba -- formuli délky $k+l$ -roztrhneme na formule délky $k+1$ a $l+1$. Pokud klauzule pùlíme, dostaneme -polynomiální èas (strom rekurze má logaritmicky pater -- formule délky alespoò 6 -se nám pøi rozdìlení zmen¹í na dvì instance velikosti maximálnì $2/3$ pùvodní, krat¹í -formule nás netrápí; na ka¾dém patøe se vykoná tolik co na pøedchozím + $2^{hloubka}$ -za pøidané formule). Velikost výsledné formule je tím pádem polynomiální vùèi pùvodní: -v ka¾dém kroku se pøidají jen dva literály, tedy celkem {\it èas na pøevod}$\cdot -2$ nových. +Pokud pùvodní formule byla splnitelná, uva¾me nìjaké splòující ohodnocení promìnných. +Uká¾eme, ¾e v¾dy mù¾eme novou promìnnou~$x$ nastavit tak, aby vzniklo splòující +ohodnocení nové formule. Víme, ¾e klauzule $(\alpha\lor\beta)$ byla splnìna. Proto +v~daném ohodnocení: +\itemize\ibull +\:Buïto $\alpha=1$. Pak polo¾íme $x=0$, tak¾e $(\alpha\lor x)$ bude splnìno díky~$\alpha$ + a $(\beta\lor\lnot x)$ díky~$x$. +\:Anebo $\alpha=0$. Pak polo¾íme $x=1$, tak¾e $(\alpha\lor x)$ bude splnìno díky~$x$, + zatímco $(\beta\lor\lnot x)$ díky~$\beta$. +\endlist +\>Splnìnost ostatních klauzulí na¹e transformace nijak neovlivnila. -\>Platí-li: +A~naopak: pokud dostaneme splòující ohodnocení nové formule, umíme z~nìj získat +splòující ohodnocení formule pùvodní. Uká¾eme, ¾e staèí zapomenout promìnnou~$x$. +V¹echny klauzule, kterých se na¹e transformace netýká, jsou nadále splnìné. +Co klauzule $(\alpha\lor\beta)$? \itemize\ibull -\:$\alpha \Rightarrow$ zvolíme $x = 0$ (zajistí splnìní druhé poloviny nové formule), -\:$\beta \Rightarrow$ zvolíme $x = 1$ (zajistí splnìní první poloviny nové formule), -\:$\alpha ,\beta / \lnot\alpha ,\lnot\beta \Rightarrow$ zvolíme $x = 0/1$ (je nám to - jedno, celkové øe¹ení nám to neovlivní). +\:Buïto $x=0$, pak musí být $(\alpha\lor x)$ splnìna díky~$\alpha$, tak¾e + $(\alpha\lor\beta)$ je také splnìna díky~$\alpha$. +\:Anebo $x=1$, pak musí být $(\beta\lor\lnot x)$ splnìna díky~$\beta$, tak¾e + i $(\alpha\lor\beta)$ je splnìna. \endlist -Nabízí se otázka, proè mù¾eme pøidanou promìnnou $x$ nastavovat, jak se nám zlíbí. -Vysvìtlení je prosté -- promìnná $x$ nám pùvodní formuli nijak neovlivní, proto¾e -se v ní nevyskytuje, proto ji mù¾eme nastavit tak, jak chceme. +\>Tím je pøevod hotov, SAT a 3-SAT jsou tedy ekvivalentní. -\s{Poznámka:} U~3-SAT lze vynutit právì tøi literály, pro krátké klauzule -pou¾ijeme stejný trik: -$$(\alpha) \rightarrow (\alpha \vee \alpha) \rightarrow (\alpha \lor x) \land (\alpha \lor \lnot x).$$ +\prob{NzMna -- Nezávislá mno¾ina vrcholù v~grafu} -\h{3. problém: Hledání nezávislé mno¾iny v grafu} +\s{Definice:} Mno¾ina vrcholù grafu je {\I nezávislá,} pokud ¾ádné dva +vrcholy le¾ící v~této mno¾inì nejsou spojeny hranou. (Jinými slovy pokud +tato mno¾ina indukuje podgraf bez hran.) -\>Existuje nezávislá mno¾ina vrcholù z~$G$ velikosti alespoò $k$? +\figure{nezmna.eps}{Pøíklad nezávislé mno¾iny}{0.7in} -\s{Definice:} {\I Nezávislá mno¾ina} (NzMna) budeme øíkat ka¾dé mno¾inì vrcholù grafu -takové, ¾e mezi nimi nevede ¾ádná hrana. +\>Na samotnou existenci nezávislé mno¾iny se nemá smysl ptát -- prázdná mno¾ina +èi libovolný jeden vrchol jsou v¾dy nezávislé. Zajímavé ale je, jestli má graf +dostateènì velkou nezávislou mno¾inu. -\figure{nezmna.eps}{Pøíklad nezávislé mno¾iny}{1in} +\inp Neorientovaný graf $G$ a èíslo $k \in {\bb N}$. -\>{\I Vstup:} Neorientovaný graf $G$, $k \in {\bb N}$. +\outp Zda existuje nezávislá mno¾ina $A \subseteq V(G)$ velikosti alespoò~$k$. -\>{\I Výstup:} $\exists A \subseteq V(G)$, $\vert A \vert \ge k$: $\forall u,v \in A \Rightarrow uv \not\in E(G)$? +\s{Pøevod 3-SAT $\rightarrow$ NzMna:} +My¹lenka pøevodu bude jednoduchá: z~ka¾dé klauzule budeme chtít vybrat jeden +literál, jeho¾ nastavením klauzuli splníme. Samozøejmì si musíme dát pozor, abychom +v~rùzných klauzulích nevybírali konfliktnì, tj. jednou~$x$ a podruhé~$\lnot x$. -\s{Poznámka:} Ka¾dý graf má minimálnì jednu nezávislou mno¾inu, a tou je prázdná mno¾ina. Proto je potøeba zadat i minimální velikost hledané mno¾iny. +Jak to pøesnì zaøídit: +pro ka¾dou z~$k$~klauzulí zadané formule vytvoøíme trojúhelník a ka¾dému z~jeho +vrcholù pøiøadíme jeden z~literálù pøíslu¹né klauzule. (Pokud by klauzule obsahovala +ménì literálù, prostì nìkteré vrcholy trojúhelníka vynecháme.) Navíc spojíme +hranami v¹echny dvojice konfliktních literálù ($x$ a~$\lnot x$). -\>Uká¾eme, jak na~tento probém pøevést 3-SAT. +V~tomto grafu se budeme ptát po nezávislé mno¾inì velikosti alespoò~$k$. +Jeliko¾ z~ka¾dého trojúhelníka mù¾eme do~nezávislé mno¾iny vybrat nejvý¹e jeden vrchol, +jediná mo¾nost, jak splnit po¾adovanou velikost, je vybrat z~ka¾dého právì jeden +vrchol. Uká¾eme, ¾e taková nezávislá mno¾ina existuje právì tehdy, je-li formule splnitelná. -\s{Pøevod 3-SAT na NzMna:} Z ka¾dé klauzule vybereme jeden literál, jeho¾ nastavením se klauzuli -rozhodneme splnit. Samozøejmì tak, abychom v~rùzných klauzulích nevybírali -konfliktnì, tj.~$x$ a~$\lnot x$. +Máme-li splòující ohodnocení formule, mù¾eme z~ka¾dé klauzule vybrat jeden splnìný +literál. Do nezávislé mno¾iny umístíme vrcholy odpovídající tìmto literálùm. Je jich +právì~$k$. Jeliko¾ ka¾dé dva vybrané vrcholy le¾í v~rùzných trojúhelnících a nikdy +nemù¾e být splnìný souèasnì literál a jeho negace, mno¾ina je opravdu nezávislá. -\s{Pøíklad:} -$(x \lor y \lor z) \land (x \lor \lnot y \lor \lnot z) \land (\lnot x \lor \lnot y \lor p) $. +A~opaènì: Kdykoliv dostaneme nezávislou mno¾inu velikosti~$k$, vybereme literály +odpovídající vybraným vrcholùm a pøíslu¹né promìnné nastavíme tak, abychom tyto +literály splnili. Díky hranám mezi konfliktními literály se nikdy nestane, ¾e bychom +potøebovali souèasnì splnit literál a jeho negaci. Zbývající promìnné nastavíme +libovolnì. Jeliko¾ jsme v~ka¾dé klauzuli splnili alespoò jeden literál, jsou +splnìny v¹echny klauzule, a~tedy i celá formule. -\>Pro ka¾dou klauzuli sestrojíme graf (trojúhelník) a pøidáme \uv{konfliktní} -hrany, tj. $x$ a $\lnot x$. Poèet vrcholù grafu odpovídá poètu literálù ve formuli, -poèet hran je maximálnì kvadratický a pøevod je tedy polynomiální. +Pøevod je tedy korektní, zbývá rozmyslet, ¾e bì¾í v~polynomiálním èase: +Poèet vrcholù grafu odpovídá poètu literálù ve formuli, poèet hran je maximálnì +kvadratický, tak¾e celý pøevod je polynomiální. -Existuje-li v grafu nezávislá mno¾ina velikosti $k$, pak z~ka¾dého z~$k$ trojúhelníkù -vybere právì jeden vrchol, a pøitom ¾ádné dva vrcholy nebudou odpovídat literálu a -jeho negaci -- tedy dostaneme ohodnocení promìnných splòujících alespoò $k$ klauzulí. -Na druhou stranu, existuje-li ohodnocení $k$ klauzulí, pak pøímo odpovídá nezávislé -mno¾inì velikosti $k$ (v ka¾dém trojúhelníku zvolíme právì jednu z ohodnocených -promìnných, nemù¾e se stát ¾e zvolíme vrcholy konfliktní hrany). Ptáme-li se tedy -na nezávislou mno¾inu velikosti odpovídající -poètu klauzulí, dostaneme odpovìï {\csc ano} právì tehdy, kdy¾ je formule splnitelná. +\figure{nezmna_graf.eps}{Graf pro formuli $(x \lor y \lor z) \land (x \lor \lnot y \lor \lnot z) \land (\lnot x \lor \lnot y \lor p)$}{3in} -Jsou-li ve formuli i klauzule krat¹í ne¾ 3, mù¾eme je buïto prodlou¾it metodou vý¹e -popsanou; nebo si v grafu necháme dvoj- a jedno-úhelníky, které ¾ádné z na¹ich úvah -vadit nebudou. +\s{Pøevod NzMna $\rightarrow$ SAT:} -\figure{nezmna_graf.eps}{Ukázka pøevodu 3-SAT na nezávislou mno¾inu}{3in} +Vrcholy grafu oèíslujeme od~1 do~$n$ a poøídíme si pro nì promìnné $v_1, \ldots, v_n$, +které budou indikovat, zda byl pøíslu¹ný vrchol vybrán do nezávislé mno¾iny +(pøíslu¹né ohodnocení promìnných tedy bude odpovídat charakteristické funkci nezávislé mno¾iny). -\s{Pøevod NzMna na SAT:} +Aby mno¾ina byla opravdu nezávislá, pro ka¾dou hranu $ij \in E(G)$ pøidáme klauzuli +$(\lnot v_i \lor \lnot v_j)$. + +Je¹tì potøebujeme zkontrolovat, ¾e mno¾ina je dostateènì velká. To neumíme provést +pøímo, ale pou¾ijeme lest: vyrobíme matici $X$ tvaru~$k\times n$, která bude popisovat +oèíslování vrcholù nezávislé mno¾iny èísly od~1 do~$k$. Konkrétnì $x_{ij}$ bude øíkat, +¾e v~poøadí $i$-tý prvek nezávislé mno¾iny je vrchol~$j$. K~tomu potøebujeme zaøídit: \itemize\ibull -\:Poøídíme si promìnné $v_1, \ldots, v_n$ odpovídající vrcholùm grafu. Promìnná $v_i$ bude - indikovat, zda se $i$-tý vrchol vyskytuje v~nezávislé mno¾inì (tedy pøíslu¹né ohodnocení - promìnných bude vlastnì charakteristická funkce nezávislé mno¾iny). -\:Pro ka¾dou hranu $ij \in E(G)$ pøidáme klauzuli $(\lnot v_i \lor \lnot v_j)$. Tyto klauzule - nám ohlídají, ¾e vybraná mno¾ina je vskutku nezávislá. -\:Je¹tì potøebujeme zkontrolovat, ¾e je mno¾ina dostateènì velká, tak¾e si její prvky - oèíslujeme èísly od~1 do~$k$. Oèíslování popí¹eme maticí promìnných $x_{ij}$, pøièem¾ - $x_{ij}$ bude pravdivá právì tehdy, kdy¾ v~poøadí $i$-tý prvek nezávislé mno¾iny je vrchol~$v_j$ --- pøidáme tedy klauzule, které nám øeknou, ¾e vybrané do nezávislé mno¾iny jsou právì - ty vrcholy, které jsou touto maticí oèíslované: $\forall i,j$, $x_{ij} \Rightarrow v_j$ - (jen dodejme, ¾e $a\Rightarrow b$ je definované jako $\neg a\vee b$). -\:Je¹tì potøebujeme zajistit, aby byla v~ka¾dém øádku i sloupci nejvý¹e jedna jednièka: - $\forall j,i,i^{'}, i\ne i^{'} : x_{ij} \Rightarrow \lnot x_{i^{'}j}$ a - $\forall i,j,j^{'}, j\ne j^{'} : x_{ij} \Rightarrow \lnot x_{ij^{'}}$. -\:A~nakonec si ohlídáme, aby v~ka¾dém øádku byla alespoò jedna jednièka, klauzulí $\forall i : - x_{i1} \lor x_{i2} \lor \ldots \lor x_{in}$. +\:Aby v~ka¾dém sloupci byla nejvý¹e jedna jednièka. Na to si poøídíme klauzule + $(x_{i,j} \Rightarrow \lnot x_{i',j})$ pro $1\le i{\I Vstup:} Graf $G, k \in N$. +\prob{Klika -- úplný podgraf} -\>{\I Výstup:} $\exists$ úplný podgraf grafu $G$ na $k$ vrcholech? -\figure{klika.eps}{Pøíklad kliky}{2in} +Podobnì jako nezávislou mno¾inu mù¾eme v~grafu hledat i {\I kliku} -- úplný +podgraf dané velikosti. -\s{Pøevod:} Prohodíme v grafu $G$ hrany a nehrany $\Rightarrow$ (hledání nezávislé mno¾iny $\leftrightarrow$ hledání kliky). +\inp Graf $G$ a èíslo $k \in N$. -\s{Dùvod:} Pokud existuje úplný graf na $k$ vrcholech, tak v~komplementárním grafu tyto vrcholy nejsou spojeny hranou, tj. tvoøí nezávislou mno¾inu, - a naopak. +\outp Existuje-li úplný podgraf grafu $G$ na alespoò $k$ vrcholech. -\figure{doplnek_nm.eps}{Prohození hran a nehran}{2in} +\figure{klika.eps}{Pøíklad kliky}{2in} +Tento problém je ekvivalentní s~hledáním nezávislé mno¾iny. Pokud v~grafu prohodíme +hrany a nehrany, stane se z~ka¾dé kliky a nezávislá mno¾ina a naopak. Pøevodní funkce +tedy zneguje hrany a ponechá èíslo~$k$. -\h{5. problém: 3,3-SAT} -\s{Definice:} 3,3-SAT je speciální pøípad 3-SATu, kde ka¾dá promìnná se vyskytuje v~maximálnì tøech literálech. +\figure{doplnek_nm.eps}{Prohození hran a nehran}{2in} -\s{Pøevod 3-SAT na 3,3-SAT:} -Pokud se promìnná $x$ vyskytuje v~$k > 3$ literálech, tak nahradíme výskyty novými promìnnými $x_1, \ldots , x_k$ a pøidáme klauzule: -$$ -(\lnot x_1 \lor x_2), -(\lnot x_2 \lor x_3), -(\lnot x_3 \lor x_4), -\ldots, -(\lnot x_{k-1} \lor x_k), -(\lnot x_k \lor x_1), -$$ +\prob{3,3-SAT -- splnitelnost s~malým poètem výskytù} -co¾ odpovídá: +Ji¾ jsme ukázali, ¾e SAT zùstane stejnì tì¾ký, omezíme-li se na formule +s~klauzulemi délky nejvý¹e~3. Mù¾eme ho dokonce omezit je¹tì více: budeme +navíc po¾adovat, aby se ka¾dá promìnná vyskytovala v~maximálnì tøech literálech. +Tomuto problému se øíká 3,3-SAT. -$$ +\s{Pøevod 3-SATu na 3,3-SAT:} +Pokud se promìnná $x$ vyskytuje v~$k > 3$ literálech, nahradíme její výskyty novými promìnnými $x_1, \ldots , x_k$ +a pøidáme klauzule, které zabezpeèí, ¾e tyto promìnné budou v¾dy ohodnoceny stejnì: +$ (x_1 \Rightarrow x_2), (x_2 \Rightarrow x_3), (x_3 \Rightarrow x_4), \ldots, (x_{k-1} \Rightarrow x_k), (x_k \Rightarrow x_1). -$$ - -Tímto zaruèíme, ¾e v¹echny nové promìnné budou mít stejnou hodnotu. +$ -Mimochodem, mù¾eme rovnou zaøídit, ¾e ka¾dý literál se vyskytuje nejvíce dvakrát (tedy ¾e -ka¾dá promìnná se vyskytuje alespoò jednou pozitivnì a alespoò jednou negativnì). Pokud by -se nìjaká promìnná objevila ve~tøech stejných literálech, mù¾eme na~ni +\s{Zesílení:} +Mù¾eme dokonce zaøídit, aby se ka¾dý literál vyskytoval nejvý¹e dvakrát +(tedy ¾e ka¾dá promìnná se vyskytuje alespoò jednou pozitivnì a alespoò jednou negativnì). +Pokud by se nìjaká promìnná objevila ve~tøech stejných literálech, mù¾eme na~ni také pou¾ít ná¹ trik a nahradit ji tøemi promìnnými. V~nových klauzulích se pak bude vyskytovat jak pozitivnì, tak negativnì. -\h{6. problém: 3D párování (3D matching)} +\prob{3D-párování} + +\inp 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), +tedy $T \subseteq K\times H\times Z$. + +\outp Perfektní podmno¾ina trojic -- tj. taková podmno¾ina trojic, která v~ní¾ se ka¾dý +prvek mno¾in $K$, $H$ a~$Z$ vyskytuje právì jednou. + +\figure{3d_parovani.eps}{Ukázka 3D-párování}{3in} + +\s{Pøevod 3,3-SATu 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é, 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. -\>{\I Vstup:} Tøi mno¾iny, napø. $K$ (kluci), $H$ (holky), $Z$ (zvíøátka) a mno¾ina kompatibilních trojic (tìch, kteøí se spolu snesou). +Uva¾ujme takovouto konfiguraci: -\>{\I Výstup:} Perfektní podmno¾ina trojic -- tj. taková podmno¾ina trojic, která obsahuje v¹echna $K$, $H$ a $Z$. +\fig{3d.eps}{4cm} -\>Uká¾eme, jak na tento problém pøevést 3,3-SAT (ov¹em to a¾ na dal¹í pøedná¹ce). +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¹í +trojice v~obrázku. + +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$. + +\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 +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í 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é. -\figure{3d_parovani.eps}{Ukázka 3D párování}{3in} +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. -\s{Závìr:} Obrázek ukazuje problémy, jimi¾ jsme se dnes zabývali, a vztahy mezi tìmito problémy. \figure{prevody.eps}{Pøevody mezi problémy}{3in} \h{NP-úplné problémy} @@ -460,92 +539,6 @@ na~cvi \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. -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), - 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 - právì jednou. - - -\h{ Uká¾eme, jak na 3D-párování pøevést 3,3-SAT } - -Uva¾ujme takovouto konfiguraci: - -\fig{3d.eps}{4cm} - -\>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¹í -trojice v~obrázku. - -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$. - -\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 -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í 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¾ 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. - - -%RK - - \h{Náznak dùkazu Cookovy vìty} Abychom mohli budovat teorii NP-úplnosti, potøebujeme alespoò jeden problém,