From: Martin Mares Date: Fri, 23 Dec 2011 22:32:44 +0000 (+0100) Subject: Prevody: Predelan i zbytek kapitoly X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=afec15b6e22b8df17817bad64b9d5eeb0ace565f;p=ads2.git Prevody: Predelan i zbytek kapitoly --- diff --git a/8-prevody/8-prevody.tex b/8-prevody/8-prevody.tex index e53730d..9d82c7e 100644 --- a/8-prevody/8-prevody.tex +++ b/8-prevody/8-prevody.tex @@ -6,6 +6,10 @@ \def\inp{\s{Vstup problému:} } \def\outp{\s{Výstup problému:} } +\def\cc#1{\hbox{\setfonts[CMSans/]\bf #1}} +\def\P{\cc{P}} +\def\NP{\cc{NP}} + 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.% @@ -374,7 +378,7 @@ jednou prom Uva¾ujme následující konfiguraci: -\fig{3d.eps}{4cm} +\fig{3d.eps}{6cm} \>V~ní se nacházejí 4~zvíøátka ($z_1$ a¾ $z_4$), 2~kluci ($k_1$ a $k_2$), 2~dívky ($d_1$ a $d_2$) a 4~trojice ($A$, $B$, $C$ a~$D$). Zatímco zvíøátka @@ -429,169 +433,188 @@ Uk Pøevod v~opaèném smìru ponecháme jako cvièení, mù¾ete ho provést podobnì, jako jsme na SAT pøevádìli nezávislou mno¾inu. -\figure{prevody.eps}{Pøevody mezi problémy}{3in} - -\h{NP-úplné problémy} - -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øípadì -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 -$\forall x$ platí $L(x)=1 \Leftrightarrow \exists $ nápovìda $ y: \vert y \vert \leq g(\vert x \vert)$ a souèasnì $K(x,y)=1$. +Jak je vidìt z~následujícího schématu, ukázali jsme, ¾e v¹echny problémy, +které jsme zkoumali, jsou navzájem pøevoditelné. -\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èí, èili pokud je formule splnitelná. +\figure{prevody.eps}{Problémy a pøevody mezi nimi}{3in} -\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. - -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. -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). - -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é. +\h{NP-úplné problémy} -\s{Definice:} Problém $L$ je NP-{\I úplný} právì tehdy, kdy¾ $L$ je NP-tì¾ký a $L \in {\rm NP}$. +V¹echny problémy, které jsme zatím zkoumali, mìly jednu spoleènou vlastnost. +©lo v~nich toti¾ o~to, zda existuje nìjaký objekt. Napøíklad splòující ohodnocení +formule nebo klika v~grafu. Kdykoliv nám pøitom nìkdo takový objekt uká¾e, +umíme snadno ovìøit, ¾e má po¾adovanou vlastnost. Ov¹em najít ho u¾ tak +snadné není. Podobnì se chovají i mnohé dal¹í \uv{vyhledávací problémy}, +pojïme se na nì tedy podívat obecnìji. + +\s{Definice:} $\P$ je tøída\foot{Formálnì vzato je to mno¾ina, ale v~teorii slo¾itosti +se pro mno¾iny problémù v¾il název {\I tøídy.}} +rozhodovacích problémù, které jsou øe¹itelné v~polynomiálním èase. Jinak øeèeno, problém~$L$ +le¾í v~$\P$ právì tehdy, kdy¾ existuje nìjaký algoritmus~$A$ a polynom~$f$ +takové, ¾e pro ka¾dý vstup~$x$ algoritmus~$A$ dobìhne v~èase nejvý¹e $f(\vert x\vert)$ +a vydá výsledek $A(x)=L(x)$. + +Tøída $\P$ tedy zachycuje na¹i pøedstavu o~efektivnì øe¹itelných problémech. +Nyní definujeme tøídu~$\NP$, která bude odpovídat na¹i pøedstavì vyhledávacích +problémù. + +\s{Definice:} $\NP$ je tøída rozhodovacích problémù, v~ní¾ problém~$L$ le¾í právì +tehdy, pokud existuje nìjaký problém~$K\in\P$ a polynom~$g$, pøièem¾ pro ka¾dý +vstup~$x$ je $L(x)=1$ právì tehdy, pokud pro nìjaký øetìzec~$y$ délky nejvý¹e +$g(\vert y\vert)$ platí $K(x,y)=1$.% +\foot{Rozhodovací problémy mají na vstupu øetìzec bitù. Tak jaképak $x,y$? +Máme samozøejmì na~mysli nìjaké binární kódování této dvojice.} + +Co to znamená? Algoritmus~$K$ øe¹í problém~$L$, ale kromì vstupu~$x$ má k~dispozici +je¹tì polynomiálnì dlouhou {\I nápovìdu~$y$.} Pøitom má platit, ¾e je-li $L(x)=1$, +musí existovat alespoò jedna nápovìda, kterou algoritmus~$K$ schválí. Pokud ov¹em +$L(x)=0$, nesmí ho pøesvìdèit ¾ádná nápovìda. + +Jinými slovy~$y$ je jakýsi {\I certifikát,} který stvrzuje kladnou odpovìï, +a problém~$K$ má za úkol certifikáty kontrolovat. Pro kladnou odpovìï musí +existovat alespoò jeden schválený certifikát, pro zápornou musí být v¹echny +certifikáty odmítnuty. + +\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, je-li formule splnìna. Nápovìda je polynomiálnì +velká (dokonce lineárnì), splnìní zkontrolujeme také v~lineárním èase. Podobnì to mù¾eme to +dokázat i o~ostatních rozhodovacích problémech, se kterými jsme se zatím potkali. + +\s{Pozorování:} Tøída $\P$ le¾í uvnitø $\NP$. +Pokud toti¾ problém 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. Algoritmus~$K$ tedy bude ignorovat nápovìdy +a odpovìï spoèítá pøímo ze~vstupu. + +\s{Otázka:} Jsou tøídy $\P$ a~$\NP$ rùzné? Na to se teoretiètí informatici sna¾í +odpovìdìt u¾ od 70. let minulého století a postupnì se z~toto stal asi vùbec nejslavnìj¹í +otevøený problém informatiky. + +Napøíklad o~¾ádném z~na¹ich problémù nevíme, zda se nachází v~$\P$. +Brzy uvidíme, ¾e to jsou v~jistém smyslu nejtì¾¹í problémy v~$\NP$. + +\s{Definice:} Problém $L$ nazveme $\NP$-{\I tì¾ký}, je-li na~nìj pøevoditelný +ka¾dý problém z~$\NP$. Pokud navíc $L\in\NP$, budeme øíkat, ¾e je $\NP$-{\I úplný.} + +NP-úplné problémy jsou tedy nejtì¾¹ími problémy v~$\NP$, aspoò v~na¹em uspoøádání +pøevoditelností. + +\s{Lemma:} Pokud nìjaký $\NP$-tì¾ký problém~$L$ le¾í v~$\P$, pak $\P=\NP$. -NP-úplné problémy jsou tedy ve~své podstatì nejtì¾¹í problémy, které le¾í v~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 èase, se neví. Otázka, jestli -${\rm P}={\rm NP}$, je asi nejznámìj¹í otevøený problém v~celé teoretické -informatice. +\proof +Ji¾ víme, ¾e $\P\subseteq\NP$, tak¾e staèí dokázat opaènou nerovnost. Vezmìme +libovolný problém~$A\in\NP$. Z~úplnosti problému~$L$ víme, ¾e $A$ lze pøevést +na~$L$. Ov¹em problémy pøevoditelné na nìco z~$\P$ jsou samy také v~$\P$. +\qed -Kde ale nìjaký NP-úplný problém vzít? K~tomu se nám bude velice hodit následující vìta: +Z~definice $\NP$-úplnosti ale vùbec není jasné, ¾e nìjaký $\NP$-úplný problém doopravdy +existuje. Odpovìï je pøekvapivá: -\s{Vìta (Cookova):} SAT je NP-úplný. +\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 -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: +Dùkaz této vìty je znaènì technický a alespoò v~hrubých rysech ho pøedvedeme +v~závìru teto kapitoly. Jakmile ale máme jeden $\NP$-úplný problém, mù¾eme velice +snadno dokazovat i $\NP$-úplnost dal¹ích: -\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ý. +\s{Lemma:} Mìjme dva problémy $L,M\in\NP$. Pokud $L$ je $\NP$-úplný a $L\rightarrow M$, +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 -problémy jsou NP-tì¾ké a le¾í v~NP (podle pøedpokladu). - -Víme, ¾e $L$ se dá pøevést na~$M$ nìjakou funkcí~$f$. Jeliko¾ $L$ je NP-úplný, -pak pro ka¾dý problém $Q\in{\rm NP}$ existuje nìjaká funkce~$g$, která pøevede -$Q$ na~$L$. Staèí tedy slo¾it funkci~$f$ s~funkcí~$g$, èím¾ získáme funkci pracující -opìt v~polynomiálním èase, která pøevede~$Q$ na~$M$. Ka¾dý problém z~NP se tedy -dá pøevést na problém~$M$. +Jeliko¾ $M$ le¾í v~$\NP$, staèí o~nìm dokázat, ¾e je $\NP$-tì¾ký, tedy ¾e na nìj +lze pøevést libovolný problém z~$\NP$. +Uva¾me tedy nìjaký problém $Q\in\NP$. Jeliko¾ $L$ je~$\NP$-úplný, musí platit +$Q\rightarrow L$. Pøevoditelnost je ov¹em tranzitivní, tak¾e z~$Q\rightarrow L$ +a $L\rightarrow M$ plyne $Q\rightarrow 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 -Jak taková tøída NP vypadá? Pøedstavme si v¹echny problémy tøídy NP, jakoby seøazené -shora dolu podle obtí¾nosti problémù (tedy navzdor gravitaci), kde porovnání dvou -problémù urèuje pøevoditelnost (viz obrázek). +\s{Dva mo¾né svìty:} Jestli je $\P=\NP$ nevíme a nejspí¹ je¹tì dlouho nebudeme +vìdìt. Nechme se ale na~chvíli uná¹et fantazií a zkusme si pøedstavit, jak by +vypadaly svìty, v~nich¾ platí jedna nebo druhá mo¾nost: -\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, -v nekoneènì tøídách). +\itemize\ibull +\:$\P=\NP$ -- to je na první pohled idylický svìt, v~nìm¾ jde ka¾dý vyhledávací + problém vyøe¹it v~polynomiálním èase, nejspí¹ tedy i prakticky efektivnì. + Má to i své stinné stránky: napøíklad jsme pøi¹li o~ve¹keré efektivní ¹ifrování + -- rozmyslete si, ¾e pokud umíme vypoèítat nìjakou funkci v~polynomiálním èase, + umíme efektivnì spoèítat i její inverzi. +\:$\P\ne\NP$ -- tehdy jsou $\P$ a $\NP$-úplné dvì disjunktní tøídy. + SAT a ostatní $\NP$-úplné problémy nejsou øe¹itelné v~polynomiálním + èase. Je ale stále mo¾né, ¾e aspoò na nìkteré z~nich existují prakticky pou¾itelné algoritmy, + tøeba o~slo¾itosti $\Theta((1+\varepsilon)^n)$ nebo $\Theta(n^{\log n/100})$. + Ví se, ¾e tøída $\NP$ by pak obsahovala i problémy, které le¾í \uv{mezi} + $\P$ a $\NP$-úplnými. +\endlist -\s{Katalog NP-úplných problémù} +\h{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 -na~minulé pøedná¹ce, o~dal¹ích si to doká¾eme nyní, zbylým se na~zoubek podíváme -na~cvièeních. +Pokud se setkáme s~problémem, který neumíme zaøadit do~$\P$, hodí se vyzkou¹et, +zda je $\NP$-úplný. K~tomu se hodí mít alespoò základní zásobu \uv{uèebnicových} +$\NP$-úplných problémù, abychom si mohli vybrat, z~èeho pøevádìt. Uká¾eme tedy +katalog nìkolika nejbì¾nìj¹ích $\NP$-úplných problémù. O~nìkterých jsme to +dokázali bìhem této kapitoly, u~ostatních alespoò naznaèíme, jak na nì. +\s{Standardní NP-úplné problémy:} \itemize\ibull -\:{\I logické:} +\:{\I Logické:} \itemize\ibull \:SAT (splnitelnost logických formulí v~CNF) \:3-SAT (ka¾dá klauzule obsahuje max.~3 literály) - \:3,3-SAT (a navíc ka¾dá promìnná se vyskytuje nejvý¹e tøikrát) - \:SAT pro obecné formule (nejen CNF) - \:Obvodový SAT (není to formule, ale obvod) + \:3,3-SAT (a navíc ka¾dá promìnná se vyskytuje nejvý¹e~$3\times$) + \:SAT pro obecné formule (nejen CNF; uká¾eme ní¾e) + \:Obvodový SAT (místo formule booleovský obvod; viz ní¾e) \endlist -\:{\I grafové:} +\:{\I Grafové:} \itemize\ibull \: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]) + \: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 právì jednou?) + \: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) + \:Hamiltonovská kru¾nice (opìt obsahuje v¹echny vrcholy) \endlist -\:{\I èíselné:} +\:{\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 vahami a cenami, chceme co nejdra¾¹í podmno¾inu její¾ váha nepøesáhne zadanou kapacitu + \:Batoh (nejjednodu¹¹í verze: má daná mno¾ina èísel podmno¾inu s~daný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~vahami a cenami, chceme co nejdra¾¹í podmno¾inu, její¾ váha nepøesáhne zadanou kapacitu batohu) - \: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$ ?) + \:Dva loupe¾níci (lze rozdìlit danou mno¾inu èísel na~dvì podmno¾iny se stejným souètem?) + \:${\bf Ax}={\bf b}$ (soustava celoèíselných lineárních rovnic; je dána matice~${\bf A}\in\{0,1\}^{m\times n}$ + a vektor~${\bf b}\in\{0,1\}^m$, existuje vektor~${\bf x}\in\{0,1\}^n$ takový, ¾e ${\bf Ax}={\bf b}$?) \endlist \endlist \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}. +Zbývá dokázat Cookovu vìtu. Technické detaily si odpustíme, ale aspoò naèrtneme +základní my¹lenku dùkazu. + +Potøebujeme tedy dokázat, ¾e SAT je $\NP$-úplný, a to z~definice. Uká¾eme to +ale nejprve pro jiný problém, pro takzvaný {\I obvodový SAT.} V~nìm máme na +vstupu booleovský obvod (hradlovou sí») s~jedním výstupem a ptáme se, zda +jí mù¾eme pøivést na vstupy takové hodnoty, aby vydala výsledek~1. -\>{\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 \. +To je obecnìj¹í ne¾ SAT pro formule (dokonce i neomezíme-li formule na CNF), +proto¾e ka¾dou formuli mù¾eme pøelo¾it na lineárnì velký obvod. (Platí i opaènì, +¾e ka¾dému obvodu s~jedním výstupem mù¾eme pøiøadit ekvivalentní formuli, +ale ta mù¾e být a¾ exponenciálnì velká.) -\>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 tedy doká¾eme $\NP$-úplnost obvodového SATu a~pak ho pøevedeme na +obyèejný SAT v~CNF. Tím bude dùkaz Cookovy vìty hotový. Zaènìme lemmatem, +v~nìm¾ bude koncentrováno v¹e technické. -\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)$. +\s{Lemma:} Nech» $L$ je problém le¾ící v~$\P$. Potom existuje polynom~$p$ a algoritmus, +který pro ka¾dé~$n$ sestrojí v~èase $p(n)$ hradlovou sí» $B_n$ s~$n$~vstupy +a jedním výstupem, která øe¹í~$L$. Tedy pro v¹echny øetìzce~$x$ musí platit +$B_n(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. +nìjaký problém $L \in \P$ a polynomiální algoritmus, který ho øe¹í. Pro vstup +velikosti~$n$ algoritmus 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 @@ -599,53 +622,65 @@ propojena s~\uv{minulou} a \uv{budouc který bude øe¹it problém~$L$ pro vstupy velikosti~$n$ a bude polynomiálnì velký vzhledem k~$n$. -\s{Poznámka:} -Pro dùkaz následující vìty si dovolíme drobnou úpravu v~definici tøídy NP. +\s{Ekvivalentní definice~$\NP$:} +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 mìla pevnou velikost, závislou pouze na~velikosti vstupu (tedy: $\vert y \vert = 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.) +úprava bez újmy na obecnosti? Staèí pùvodní nápovìdu doplnit na po¾adovanou délku +nìjakými \uv{mezerami}, které budeme pøi ovìøování nápovìdy ignorovat. -\s{Vìta:} Obvodový SAT je NP-úplný. +\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 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 -pøedchozí 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 $p(g(n))$, co¾ je také polynom. +Obvodový SAT evidentnì le¾í v~$\NP$ -- staèí si nechat poradit vstup, sí» +topologicky setøídit a v~tomto poøadí poèítat hodnoty hradel. -\fig{kobvod.eps}{2.3cm} +Mìjme nyní nìjaký problém $L$ z~$\NP$, o~nìm¾ chceme dokázat, ¾e se dá pøevést +na~obvodový SAT. Kdy¾ nám nìkdo pøedlo¾í nìjaký vstup~$x$ délky~$n$, +spoèítáme velikost nápovìdy $g(n)$. Víme, ¾e algoritmus~$K$, který kontroluje, +zda nápovìda je správnì, je v~$\P$. Vyu¾ijeme pøedchozí lemma, abychom získali obvod, +který pro konkrétní velikost vstupu~$n$ poèítá to, co kontrolní algoritmus~$K$. +Vstupem tohoto obvodu bude~$x$ (vstup problému~$L$) a~nápovìda~$y$. Na výstupu se +dozvíme, zda je nápovìda správná. Velikost tohoto obvodu bude èinit $p(g(n))$, +co¾ je také polynom. -\>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 \. Jinými slovy, ptáme se, zda je tento obvod splnitelný. +\fig{kobvod.eps}{2.3cm} -\>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. +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~chceme zjistit, zda za~$y$ +mù¾eme dosadit nìjaké hodnoty tak, aby na výstupu bylo \. Jinými slovy, +ptáme se, zda je tento obvod splnitelný. -\>Obvodový SAT je v NP triviálnì -- staèí si nechat poradit vstup, sí» -topologicky setøídit a v~tomto poøadí poèítat hodnoty hradel. +Ukázali jsme tedy, ¾e pro libovolný problém z~$\NP$ doká¾eme sestrojit funkci, +která pro ka¾dý vstup~$x$ v~polynomiálním èase vytvoøí obvod, jen¾ je splnitelný +pravì tehdy, kdy¾ odpovìï tohoto problému na vstup~$x$ má být kladná. To je pøesnì +pøevod z~daného problému 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ì. Ka¾dý booleovský obvod se dá pøevést v~polynomiálním èase na~ekvivalentní obvod, ve~kterém se vyskytují jen hradla {\csc and} a {\csc 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 \csc 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é: +Budeme postupnì budovat formuli v~konjunktivní normální formì. Ka¾dý booleovský +obvod se dá v~polynomiálním èase pøevést na~ekvivalentní obvod, ve~kterém se +vyskytují jen hradla {\csc and} a {\csc 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 \csc not}: Na vstupu hradla budeme mít nìjakou promìnnou $x$ +(která pøi¹la buïto pøímo ze~vstupu 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 } \hskip 0.2\hsize \vcenter{\hbox{\epsfxsize=0.7cm\epsfbox{not.eps}}} $$ -\>{\I Pøevod hradla \csc and}: Hradlo má vstupy $x, y$ a~výstup $z$. Potøebujeme pøidat klauzule, které nám popisují, jak se má hradlo {\csc and} chovat. Tyto vztahy pøepí¹eme do~konjunktivní normální formy: +{\I Pøevod hradla \csc and}: Hradlo má vstupy $x, y$ a~výstup $z$. Potøebujeme +pøidat klauzule, které nám popisují, jak se má hradlo {\csc and} chovat. Tyto +vztahy pøepí¹eme do~konjunktivní normální formy: $$ \left. \matrix{ x\ \&\ y \Rightarrow z \cr @@ -664,17 +699,16 @@ $$ \vcenter{\hbox{\epsfxsize=0.7cm\epsfbox{and.eps}}} $$ -\>Kdy¾ chceme pøevádìt obvodový SAT na 3-SAT, obvod nejdøíve pøelo¾íme na takový, ve~kterém jsou jen hradla {\csc and} a~{\csc 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. +Tím v~polynomiálním èase vytvoøíme formuli, která je splnitelná právì tehdy, +je-li splnitelný zadaný obvod. Ve~splòujícím ohodnocení formule bude obsa¾eno +jak splòující ohodnocení obvodu, tak výstupy v¹ech hradel obvodu. \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é -booleovské formule doká¾eme pøevést na obvodovou splnitelnost a tu pak -pøevést na 3-SAT. Opaèný pøevod je samozøejmì triviální, tak¾e obecný SAT -je ve~skuteènosti ekvivalentní s~na¹ím \uv{standardním} SATem pro CNF. - -\bye - +Tím jsme také odpovìdìli na otázku, kterou jsme si kladli pøi zavádìní SATu, +tedy zda omezením na CNF o~nìco pøijdeme. Teï u¾ víme, ¾e nepøijdeme -- libovolná +booleovská formule se dá pøímoèaøe pøevést na obvod a ten zase na formuli +v~CNF. Zavádíme sice nové promìnné, ale nová formule je splnitelná právì +tehdy, kdy ta pùvodní. \bye diff --git a/8-prevody/p-np.eps b/8-prevody/p-np.eps deleted file mode 100644 index 0cd4e36..0000000 --- a/8-prevody/p-np.eps +++ /dev/null @@ -1,350 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: 0.45.1 -%%Pages: 1 -%%Orientation: Portrait -%%BoundingBox: 1 1 122 162 -%%HiResBoundingBox: 1.5999993 1.5999983 121.60003 161.59997 -%%EndComments -%%Page: 1 1 -0 842 translate -0.8 -0.8 scale -0 0 0 setrgbcolor -[] 0 setdash -1 setlinewidth -0 setlinejoin -0 setlinecap -gsave [1 0 0 1 0 0] concat -gsave [1 0 0 1 2 -2.0000026] concat -gsave -1 1 1 setrgbcolor -newpath -149.85837 952.36221 moveto -149.85837 1007.5124 116.34314 1052.2205 75.000013 1052.2205 curveto -33.656885 1052.2205 0.14165707 1007.5124 0.14165707 952.36221 curveto -0.14165707 897.21198 33.656885 852.50388 75.000013 852.50388 curveto -116.34314 852.50388 149.85837 897.21198 149.85837 952.36221 curveto -149.85837 952.36221 lineto -closepath -eofill -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.28331581 setlinewidth -0 setlinejoin -0 setlinecap -newpath -149.85837 952.36221 moveto -149.85837 1007.5124 116.34314 1052.2205 75.000013 1052.2205 curveto -33.656885 1052.2205 0.14165707 1007.5124 0.14165707 952.36221 curveto -0.14165707 897.21198 33.656885 852.50388 75.000013 852.50388 curveto -116.34314 852.50388 149.85837 897.21198 149.85837 952.36221 curveto -149.85837 952.36221 lineto -closepath -stroke -gsave -0.80000001 0.80000001 0.80000001 setrgbcolor -newpath -125.00001 902.36221 moveto -125.00813 916.1722 102.61999 927.36955 75.000014 927.36955 curveto -47.380038 927.36955 24.991899 916.1722 25.000015 902.36221 curveto -24.991899 888.55223 47.380038 877.35487 75.000014 877.35487 curveto -102.61999 877.35487 125.00813 888.55223 125.00001 902.36221 curveto -closepath -fill -grestore -gsave [1 0 0 1 -349.14842 218.39392] concat -gsave -0 0 0 setrgbcolor -newpath -395.02734 678.77101 moveto -396.62109 678.77101 lineto -399.03516 686.27101 lineto -400.5 678.77101 lineto -401.6543 678.77101 lineto -399.94922 687.51905 lineto -398.34961 687.51905 lineto -395.94141 679.97218 lineto -394.47656 687.51905 lineto -393.32227 687.51905 lineto -395.02734 678.77101 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -404.00391 678.77101 moveto -406.74023 678.77101 lineto -407.5371 678.77102 408.14453 678.95656 408.5625 679.32765 curveto -408.98046 679.69875 409.18945 680.24172 409.18945 680.95655 curveto -409.18945 681.9175 408.88085 682.66554 408.26367 683.2007 curveto -407.64648 683.73586 406.77929 684.00343 405.66211 684.00343 curveto -404.17383 684.00343 lineto -403.48828 687.51905 lineto -402.29883 687.51905 lineto -404.00391 678.77101 lineto -closepath -405 679.74366 moveto -404.36719 683.03077 lineto -405.85547 683.03077 lineto -406.52734 683.03078 407.04296 682.8589 407.40234 682.51515 curveto -407.76171 682.1714 407.9414 681.67922 407.94141 681.03859 curveto -407.9414 680.62844 407.81933 680.31008 407.5752 680.08351 curveto -407.33105 679.85695 406.98828 679.74367 406.54688 679.74366 curveto -405 679.74366 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -413.77148 683.75148 moveto -416.92969 683.75148 lineto -416.74805 684.71241 lineto -413.57813 684.71241 lineto -413.77148 683.75148 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -421.99805 684.91749 moveto -422.76563 680.95655 lineto -423.84961 680.95655 lineto -423.08203 684.87648 lineto -423.04297 685.06789 423.01465 685.23195 422.99707 685.36866 curveto -422.97949 685.50539 422.9707 685.61867 422.9707 685.70851 curveto -422.9707 686.04054 423.07226 686.29738 423.27539 686.47902 curveto -423.47851 686.66066 423.76562 686.75148 424.13672 686.75148 curveto -424.71484 686.75148 425.21484 686.55617 425.63672 686.16554 curveto -426.05859 685.77492 426.33398 685.24953 426.46289 684.58937 curveto -427.18359 680.95655 lineto -428.26172 680.95655 lineto -426.99023 687.51905 lineto -425.91211 687.51905 lineto -426.12891 686.4878 lineto -425.82421 686.87062 425.46191 687.16652 425.04199 687.3755 curveto -424.62207 687.58448 424.17578 687.68898 423.70313 687.68898 curveto -423.1289 687.68898 422.68164 687.53175 422.36133 687.2173 curveto -422.04101 686.90284 421.88086 686.46437 421.88086 685.90187 curveto -421.88086 685.78468 421.89062 685.6382 421.91016 685.46241 curveto -421.92969 685.28664 421.95898 685.10499 421.99805 684.91749 curveto -421.99805 684.91749 lineto -closepath -426.92578 677.9214 moveto -428.0918 677.9214 lineto -425.75391 680.12452 lineto -424.85156 680.12452 lineto -426.92578 677.9214 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -434.76563 683.47609 moveto -434.76562 682.90187 434.64062 682.46242 434.39063 682.15773 curveto -434.14062 681.85304 433.78125 681.7007 433.3125 681.7007 curveto -432.99218 681.7007 432.68652 681.78273 432.39551 681.94679 curveto -432.10449 682.11086 431.8457 682.34914 431.61914 682.66163 curveto -431.39648 682.97023 431.21875 683.34328 431.08594 683.78077 curveto -430.95312 684.21828 430.88672 684.65187 430.88672 685.08155 curveto -430.88672 685.62843 431.01172 686.04933 431.26172 686.34425 curveto -431.51172 686.63917 431.86718 686.78663 432.32813 686.78663 curveto -432.66796 686.78663 432.98339 686.70656 433.27441 686.5464 curveto -433.56542 686.38624 433.81445 686.15382 434.02148 685.84913 curveto -434.24414 685.52882 434.42382 685.15187 434.56055 684.71827 curveto -434.69726 684.28468 434.76562 683.87062 434.76563 683.47609 curveto -434.76563 683.47609 lineto -closepath -431.42578 681.95265 moveto -431.71484 681.57375 432.05566 681.28664 432.44824 681.09132 curveto -432.84082 680.89601 433.27734 680.79836 433.75781 680.79835 curveto -434.42968 680.79836 434.95117 681.01808 435.32227 681.45753 curveto -435.69335 681.89699 435.8789 682.5132 435.87891 683.30616 curveto -435.8789 683.95461 435.76366 684.57277 435.5332 685.16066 curveto -435.30273 685.74855 434.9707 686.27492 434.53711 686.73976 curveto -434.24804 687.04835 433.92187 687.2837 433.55859 687.44581 curveto -433.19531 687.60792 432.8125 687.68898 432.41016 687.68898 curveto -431.94531 687.68898 431.55468 687.5923 431.23828 687.39894 curveto -430.92187 687.20558 430.68555 686.91749 430.5293 686.53468 curveto -429.85547 690.01515 lineto -428.77734 690.01515 lineto -430.54102 680.95655 lineto -431.61914 680.95655 lineto -431.42578 681.95265 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -438.62695 678.40187 moveto -439.70508 678.40187 lineto -437.92969 687.51905 lineto -436.85156 687.51905 lineto -438.62695 678.40187 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -446.44336 683.55812 moveto -445.67578 687.51905 lineto -444.5918 687.51905 lineto -445.35938 683.59913 lineto -445.39453 683.41554 445.42187 683.25343 445.44141 683.1128 curveto -445.46093 682.97218 445.4707 682.86086 445.4707 682.77882 curveto -445.4707 682.4507 445.36718 682.19484 445.16016 682.01124 curveto -444.95312 681.82765 444.66406 681.73586 444.29297 681.73585 curveto -443.71484 681.73586 443.21679 681.92824 442.79883 682.313 curveto -442.38086 682.69777 442.10742 683.22023 441.97852 683.88038 curveto -441.25781 687.51905 lineto -440.17969 687.51905 lineto -441.45117 680.95655 lineto -442.5293 680.95655 lineto -442.3125 681.9878 lineto -442.61328 681.6089 442.97461 681.31594 443.39648 681.1089 curveto -443.81836 680.90187 444.26171 680.79836 444.72656 680.79835 curveto -445.30468 680.79836 445.75292 680.95461 446.07129 681.2671 curveto -446.38964 681.57961 446.54882 682.01906 446.54883 682.58546 curveto -446.54882 682.72609 446.54003 682.87648 446.52246 683.03663 curveto -446.50488 683.19679 446.47851 683.37062 446.44336 683.55812 curveto -446.44336 683.55812 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -453.14648 683.65187 moveto -453.1582 683.58937 453.16699 683.52492 453.17285 683.45851 curveto -453.17871 683.39211 453.18163 683.3257 453.18164 683.25929 curveto -453.18163 682.78273 453.04199 682.40578 452.7627 682.12843 curveto -452.48339 681.85109 452.10351 681.71242 451.62305 681.71241 curveto -451.08789 681.71242 450.61523 681.88137 450.20508 682.21925 curveto -449.79492 682.55715 449.48437 683.03664 449.27344 683.65773 curveto -453.14648 683.65187 lineto -closepath -454.08398 684.49562 moveto -449.06836 684.49562 lineto -449.04492 684.64406 449.0293 684.76125 449.02148 684.84718 curveto -449.01367 684.93312 449.00976 685.00734 449.00977 685.06984 curveto -449.00976 685.61281 449.17676 686.03273 449.51074 686.3296 curveto -449.84472 686.62648 450.3164 686.77491 450.92578 686.77491 curveto -451.39453 686.77491 451.83789 686.72218 452.25586 686.61671 curveto -452.67382 686.51124 453.06249 686.35695 453.42188 686.15382 curveto -453.2168 687.22023 lineto -452.83007 687.37648 452.43066 687.49366 452.01855 687.57179 curveto -451.60644 687.64991 451.1875 687.68898 450.76172 687.68898 curveto -449.85156 687.68898 449.15137 687.4712 448.66113 687.03566 curveto -448.1709 686.60011 447.92578 685.98195 447.92578 685.18116 curveto -447.92578 684.49757 448.04785 683.86183 448.29199 683.27394 curveto -448.53613 682.68605 448.89453 682.16164 449.36719 681.7007 curveto -449.67187 681.41164 450.03418 681.18898 450.4541 681.03273 curveto -450.87402 680.87648 451.32031 680.79836 451.79297 680.79835 curveto -452.53515 680.79836 453.12597 681.02101 453.56543 681.46632 curveto -454.00488 681.91164 454.2246 682.50929 454.22461 683.25929 curveto -454.2246 683.43898 454.21288 683.63136 454.18945 683.83644 curveto -454.16601 684.04152 454.13085 684.26125 454.08398 684.49562 curveto -454.08398 684.49562 lineto -closepath -453.12891 677.9214 moveto -454.29492 677.9214 lineto -451.95703 680.12452 lineto -451.05469 680.12452 lineto -453.12891 677.9214 lineto -closepath -fill -grestore -grestore -gsave [1.0794981 0 0 1.1120691 -10.146435 2.3213619] concat -gsave -0.80000001 0.80000001 0.80000001 setrgbcolor -newpath -125.19378 899.26141 moveto -125.2013 911.67969 104.4619 921.74863 78.87596 921.74863 curveto -53.290018 921.74863 32.550621 911.67969 32.55814 899.26141 curveto -32.550621 886.84313 53.290018 876.77419 78.87596 876.77419 curveto -104.4619 876.77419 125.2013 886.84313 125.19378 899.26141 curveto -closepath -fill -grestore -grestore -gsave [1 0 0 1 32.998062 -15.126589] concat -gsave -0 0 0 setrgbcolor -newpath -40.027344 1013.1148 moveto -42.763672 1013.1148 lineto -43.560541 1013.1148 44.167963 1013.3003 44.585938 1013.6714 curveto -45.003899 1014.0425 45.212883 1014.5855 45.212891 1015.3003 curveto -45.212883 1016.2612 44.90429 1017.0093 44.287109 1017.5444 curveto -43.669916 1018.0796 42.80273 1018.3472 41.685547 1018.3472 curveto -40.197266 1018.3472 lineto -39.511719 1021.8628 lineto -38.322266 1021.8628 lineto -40.027344 1013.1148 lineto -closepath -41.023438 1014.0874 moveto -40.390625 1017.3745 lineto -41.878906 1017.3745 lineto -42.550777 1017.3745 43.066401 1017.2027 43.425781 1016.8589 curveto -43.78515 1016.5152 43.964838 1016.023 43.964844 1015.3823 curveto -43.964838 1014.9722 43.842768 1014.6538 43.598633 1014.4273 curveto -43.354487 1014.2007 43.011714 1014.0874 42.570313 1014.0874 curveto -41.023438 1014.0874 lineto -closepath -fill -grestore -grestore -gsave [1 0 0 1 108.07718 103.22423] concat -gsave -0 0 0 setrgbcolor -newpath -19.985352 936.01589 moveto -22.375977 936.01589 lineto -28.194336 946.99343 lineto -28.194336 936.01589 lineto -29.916992 936.01589 lineto -29.916992 949.13796 lineto -27.526367 949.13796 lineto -21.708008 938.16042 lineto -21.708008 949.13796 lineto -19.985352 949.13796 lineto -19.985352 936.01589 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -35.225586 937.47487 moveto -35.225586 942.40554 lineto -37.458008 942.40554 lineto -38.284173 942.40554 38.922844 942.19168 39.374023 941.76393 curveto -39.825187 941.33621 40.050773 940.72683 40.050781 939.93581 curveto -40.050773 939.15066 39.825187 938.54422 39.374023 938.11647 curveto -38.922844 937.68875 38.284173 937.47488 37.458008 937.47487 curveto -35.225586 937.47487 lineto -closepath -33.450195 936.01589 moveto -37.458008 936.01589 lineto -38.928704 936.0159 40.040519 936.34842 40.793457 937.01345 curveto -41.546377 937.6785 41.922841 938.65262 41.922852 939.93581 curveto -41.922841 941.23074 41.546377 942.20925 40.793457 942.87136 curveto -40.040519 943.53347 38.928704 943.86453 37.458008 943.86452 curveto -35.225586 943.86452 lineto -35.225586 949.13796 lineto -33.450195 949.13796 lineto -33.450195 936.01589 lineto -closepath -fill -grestore -grestore -grestore -grestore -showpage -%%EOF diff --git a/8-prevody/p-np.svg b/8-prevody/p-np.svg deleted file mode 100644 index f2a44b9..0000000 --- a/8-prevody/p-np.svg +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - NP - úplné - P NP - - - - - - - - image/svg+xml - - - - - - - - - - NP - úplné - P NP - diff --git a/8-prevody/prevody.eps b/8-prevody/prevody.eps index c8ffedd..7427f6a 100644 --- a/8-prevody/prevody.eps +++ b/8-prevody/prevody.eps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 EPSF-3.0 %%Creator: cairo 1.8.10 (http://cairographics.org) -%%CreationDate: Fri Dec 23 21:50:09 2011 +%%CreationDate: Fri Dec 23 21:58:08 2011 %%Pages: 1 %%BoundingBox: 0 0 183 138 %%DocumentData: Clean7Bit @@ -1244,13 +1244,13 @@ q 0 j [] 0.0 d 4 M q 1 0 0 -1 0 137.978714 cm -47.836 16.762 m 37.945 56.367 l S Q -48.816 125.131 m 50.738 118.42 l 43.961 120.112 l 48.816 125.131 l h -48.816 125.131 m f* -0.847468 w -q 0.24974 1 1 -0.24974 0 137.978714 cm --0.618 48.971 m -6.483 52.357 l -6.484 45.58 l -0.618 48.971 l h --0.618 48.971 m S Q +47.836 16.762 m 38.352 56.766 l S Q +48.77 125.143 m 50.773 118.455 l 43.973 120.065 l 48.77 125.143 l h +48.77 125.143 m f* +0.849925 w +q 0.237143 1 1 -0.237143 0 137.978714 cm +-1.203 49.055 m -7.084 52.453 l -7.088 45.653 l -1.203 49.055 l h +-1.203 49.055 m S Q 0.8 w q 1 0 0 -1 0 137.978714 cm 30.711 1.41 m 68.895 1.41 l 68.895 16.359 l 30.711 16.359 l 30.711 1.41 @@ -1340,14 +1340,14 @@ h 88.765 -122.617 m S Q 0.8 w q 1 0 0 -1 0 137.978714 cm -115.504 17.973 m 60.031 56.367 l S Q -56.996 79.51 m 59.727 85.291 l 63.371 80.029 l 56.996 79.51 l h -56.996 79.51 m f* -0.657804 w -q -1 -0.692144 -0.692144 1 0 137.978714 cm --11.174 -66.203 m -15.726 -63.572 l -15.727 -68.835 l -11.174 -66.203 l +115.504 17.574 m 60.031 56.367 l S Q +57.008 79.494 m 59.711 85.291 l 63.379 80.045 l 57.008 79.494 l h +57.008 79.494 m f* +0.655584 w +q -1 -0.699355 -0.699355 1 0 137.978714 cm +-10.816 -66.049 m -15.354 -63.425 l -15.353 -68.671 l -10.816 -66.049 l h --11.174 -66.203 m S Q +-10.816 -66.049 m S Q 0.8 w q 1 0 0 -1 0 137.978714 cm 32.777 93.328 m 31.988 119.805 l S Q @@ -1373,6 +1373,17 @@ q 0.00187188 -1 -1 -0.00187188 0 137.978714 cm 117.7 -139.971 m 112.162 -136.771 l 112.163 -143.169 l 117.7 -139.971 l h 117.7 -139.971 m S Q +0.8 w +[ 0.8 1.6] 0 d +q 1 0 0 -1 0 137.978714 cm +108.289 114.152 m 63.438 16.762 l S Q +61.895 124.572 m 67.113 120.881 l 61.301 118.205 l 61.895 124.572 l h +61.895 124.572 m f* +0.726648 w +[] 0.0 d +q -0.460524 1 1 0.460524 0 137.978714 cm +-34.577 45.971 m -39.605 48.874 l -39.605 43.062 l -34.577 45.971 l h +-34.577 45.971 m S Q Q showpage %%Trailer diff --git a/8-prevody/prevody.svg b/8-prevody/prevody.svg index 192d348..75c0b62 100644 --- a/8-prevody/prevody.svg +++ b/8-prevody/prevody.svg @@ -62,19 +62,20 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="2.8" - inkscape:cx="123.03499" - inkscape:cy="102.75934" + inkscape:zoom="1.979899" + inkscape:cx="34.554428" + inkscape:cy="109.37583" inkscape:document-units="px" inkscape:current-layer="layer1" - inkscape:window-width="1024" - inkscape:window-height="708" - inkscape:window-x="-4" - inkscape:window-y="-4" + inkscape:window-width="1272" + inkscape:window-height="1004" + inkscape:window-x="0" + inkscape:window-y="0" showgrid="false" - inkscape:window-maximized="0" + inkscape:window-maximized="1" showguides="true" - inkscape:guide-bbox="true" /> + inkscape:guide-bbox="true" + inkscape:object-paths="true" /> @@ -93,9 +94,10 @@ transform="translate(-52.533009,-31.103033)"> + inkscape:connector-type="polyline" + sodipodi:nodetypes="cc" /> @@ -236,9 +238,10 @@ inkscape:connector-type="polyline" /> + inkscape:connector-type="polyline" + sodipodi:nodetypes="cc" /> +