\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.%
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ù.
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'\le k$, $1\le j\le n$.
+ (Jsou to implikace, ale mù¾eme je zapsat i jako disjunkce, proto¾e $a\Rightarrow b$
+ je toté¾ jako $\lnot a \lor b$.)
+\:Aby v~ka¾dém øádku le¾ela právì jedna jednièka. Nejprve zajistíme nejvý¹e jednu
+ klauzulemi $(x_{i,j} \Rightarrow \lnot x_{i,j'})$ pro $1\le i\le k$, $1\le j<j'\le n$.
+ Pak pøidáme klauzule $(x_{i,1}\lor x_{i,2}\lor \ldots \lor x_{i,n})$ pro $1\le i\le k$,
+ které po¾adují alespoò jednu jednièku v~øádku.
+\:Vztah mezi oèíslováním a nezávislou mno¾inou: pøidáme klauzule $x_{i,j} \Rightarrow v_j$
+ pro $1\le i\le k$, $1\le j\le n$. (V¹imnìte si, ¾e nezávislá mno¾ina mù¾e obsahovat
+ i neoèíslované prvky, ale to nám nevadí. Dùle¾ité je, aby mìla $k$~oèíslovaných.)
\endlist
-Tímto vynutíme NzMnu $\geq k$, co¾ jsme pøesnì chtìli. Takovýto pøevod je zøejmì polynomiální.
-
-\s{Pøíklad matice:} Jako pøíklad pou¾ijeme nezávislou mno¾inu z ukázky nezávislé mno¾iny.
-Nech» jsou vrcholy grafu oèíslované zleva a zeshora. Hledáme nezávislou mno¾inu velikosti $2$.
-Matice pak bude vypadat následovnì:
-$$ \pmatrix{1&0&0&0&0 \cr 0&0&0&1&0}$$
-\s{Vysvìtlení:} Jako první vrchol mno¾iny bude vybrán vrchol $v_1$, proto v prvním
-øádku a v prvním sloupci bude $1$. Jako druhý vrchol mno¾iny bude vybrán
-vrchol $v_4$, proto na druhém øádku a ve ètvrtém sloupci bude $1$. Na ostatních místech bude $0$.
-\h{4. problém: Klika}
+Tím jsme vytvoøili polynomiálnì velkou formuli, která je splnitelná právì tehdy,
+kdy¾ v~zadaném grafu existuje nezávislá mno¾ina o~alespoò~$k$ prvcích.
-\>{\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ù
+\<true>/\<false>; 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 \<true> nebo \<false> 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}
\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ù
-\<true>/\<false>; 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 \<true> nebo \<false> 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,