]> mj.ucw.cz Git - ads2.git/commitdiff
Aproximacni algoritmy: korektury.
authorMartin Mares <mj@ucw.cz>
Mon, 18 Jan 2010 23:21:53 +0000 (00:21 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 18 Jan 2010 23:21:53 +0000 (00:21 +0100)
12-apx/12-apx.tex

index cb33da8c5f04db5dd9c2d72af6c9b04239b1d2f4..d2170b781068c92c6efd3cec1bf7e99fa2ca40da 100644 (file)
@@ -1,5 +1,5 @@
 \input lecnotes.tex
-\prednaska{11}{Aproximaèné algoritmy}{\vbox{\hbox{(F. Ha¹ko, J. Menda, M. Mare¹}
+\prednaska{12}{Aproximaèní algoritmy}{\vbox{\hbox{(F. Ha¹ko, J. Menda, M. Mare¹,}
        \hbox{ Michal Kozák, Vojta Tùma)}}}
 
 \>Na~minulých pøedná¹kách jsme se zabývali rùznými tì¾kými rozhodovacími 
@@ -10,11 +10,11 @@ probl
 \algo
 \:Nepanikaøit
 \:Spokojit se s~málem
-\:Rozmyslet, jestli opravdu potøebujeme obecný algoritmus. Mnohdy potøebujeme 
-jejich speciálnìj¹í pøípady, které mohou být øe¹itelné v~polynomiálním èase.
-\:Spokojit se s~pøibli¾ným øe¹ením. (viz aproximaèní algoritmy)
-\:Pou¾ít heuristiku -- napøíklad genetické algoritmy, nebo randomizované algoritmy.
-Velmi pomoci mù¾e i jen výhodnìj¹í poøadí pøi~prohledávání, èi oøezávání nìkterých 
+\:Rozmyslet, jestli opravdu potøebujeme obecný algoritmus. Mnohdy potøebujeme pouze
+speciálnìj¹í pøípady, které mohou být øe¹itelné v~polynomiálním èase.
+\:Spokojit se s~pøibli¾ným øe¹ením, (pou¾ít aproximaèní algoritmus).
+\:Pou¾ít heuristiku -- napøíklad genetické algoritmy nebo randomizované algoritmy.
+Velmi pomoci mù¾e i jen výhodnìj¹í poøadí pøi~prohledávání èi oøezávání nìkterých 
 napohled nesmyslných vìtví výpoètu.
 \endalgo
 
@@ -26,11 +26,13 @@ pro~speci
 napø. pro~dvì barvy èi pro intervalové grafy. 2-SAT, jako speciální pøípad SATu, 
 se dá øe¹it v~lineárním èase.
 
+\>Uká¾eme si dva takové pøípady (budeme øe¹ení hledat, nejen rozhodovat, zda existuje)
+
 \s{Problém: Maximální nezávislá mno¾ina ve~stromì (ne rozhodovací)}
 
 \>{\I Vstup:} Zakoøenìný strom~$T$.
 
-\>{\I Výstup:} Maximální (co do~poètu vrcholù) nezávislá mno¾ina vrcholù~$M$.
+\>{\I Výstup:} Maximální (co do~poètu vrcholù) nezávislá mno¾ina vrcholù~$M$~v~$T$.
 
 \>BÚNO mù¾eme pøedpokládat, ¾e v~$M$ jsou v¹echny listy $T$. Pokud by nìkterý
 list $l$ v~$M$ nebyl, tak se podíváme na~jeho otce:
@@ -40,24 +42,23 @@ mno
 \:Pokud tam otec je, tak ho z~$M$ vyjmeme a na~místo nìho vlo¾íme $l$.
 Nezávislost ani velikost $M$ se nezmìnily.
 \endlist
-\>Tyto listy spolu s~jejich otci z~$T$ odebereme a postup opakujeme. $T$ se
-mù¾e rozpadnout na~les $\to$ tento postup aplikujeme na~v¹echny stromy v~lese.
+\>Nyní listy spolu s~jejich otci z~$T$ odebereme a postup opakujeme. $T$ se
+mù¾e rozpadnout na~les, ale to nevadí $\to$ tentý¾ postup aplikujeme na~v¹echny stromy v~lese.
 
 \s{Algoritmus:}
 \>MaxNz$(T)$
 \algo
-\:Polo¾íme $M_1$:=$\{$listy stromu $T\}$.
-\:Polo¾íme $M_2$:=$\{$otcové vrcholù z~$M_1\}$.
-\:Vrátíme $M_1 \cup$ MaxNz$(T\setminus(M_1 \cup M_2))$.
+\:Polo¾íme $L$:=$\{$listy stromu $T\}$.
+\:Polo¾íme $O$:=$\{$otcové vrcholù z~$L\}$.
+\:Vrátíme $L \cup$ MaxNz$(T\setminus(O \cup L))$.
 \endalgo
-\>{\I Poznámka:} Toto doká¾eme naprogramovat v~$\O(n)$ (vrcholy procházíme
-pøes frontu).
+\>{\I Poznámka:} Toto doká¾eme naprogramovat v~$\O(n)$ (udr¾ujeme si frontu listù).
 
 \s{Problém: Batoh}
 
 \>Je daná mno¾ina $n$~pøedmìtù s~hmotnostmi $h_1,\ldots,h_n$
 a cenami $c_1,\ldots,c_n$ a~batoh, který unese hmostnost~$H$. Najdìte takovou
-podmno¾inu pøedmìtù, jejich¾ celková hmotnost je maximální $H$ a celková cena
+podmno¾inu pøedmìtù, jejich¾ celková hmotnost je maximálnì $H$ a celková cena
 je maximální mo¾ná.
 
 \>Tento problém je zobecnìním problému batohu z~minulé pøedná¹ky dvìma smìry:
@@ -113,54 +114,61 @@ maj
 \h{Druhý zpùsob: Aproximace}
 
 \>V pøedcházejících problémech jsme se zamìøili na~speciální pøípady. Obèas v¹ak
-takové ¹tìstí nemáme a musíme vyøe¹it celý NP-úlný problém. Mù¾eme si v¹ak
-pomoct tím, ¾e se ho nebudeme sna¾it vyøe¹it optimálnì -- jen v~jakémsi pomìru
-k optimálnosti ({\I aproximaci}), tj. budeme vìdìt, o~kolik maximálnì je na¹e
-øe¹ení hor¹í ne¾~optimální.
+takové ¹tìstí nemáme a musíme vyøe¹it celý NP-úplný problém. Mù¾eme si v¹ak
+pomoct tím, ¾e se ho nebudeme sna¾it vyøe¹it optimálnì -- namísto optimálního
+øe¹ení najdeme nìjaké, které je nejvý¹e $c$-krát hor¹í pro nìjakou konstantu $c$.
 
 \s{Problém: Obchodní cestující}
 
 \>{\I Vstup:} neorientovaný graf~$G$, ka¾dá hrana
-je ohodnocená funkcí $w: E(G)\rightarrow {\bb R}^+_0$
+je ohodnocená funkcí $w: E(G)\rightarrow {\bb R }^+_0$.
 
-\>{\I Výstup:} Hamiltonovská kru¾nice (v¹echny vrcholy grafu), a~to ta nejkrat¹í
+\>{\I Výstup:} Hamiltonovská kru¾nice (obsahující v¹echny vrcholy grafu), a~to ta nejkrat¹í
 (podle ohodnocení).
 
-\>Tento problém je hned na~první pohled nároèný -- u¾ problém existence
-Hamiltonovské kru¾nice je NP-úplný. Najdeme aproximaèní algoritmus nejprve za pøedpokladu,
+\>Tento problém je hned na~první pohled nároèný -- u¾ sama existence
+hamiltonovské kru¾nice je NP-úplná. Najdeme aproximaèní algoritmus nejprve za pøedpokladu,
 ¾e vrcholy splòují trojúhelníkovou nerovnost (tj. $\forall x,y,z \in V: w(xz)\le
 w(xy)+w(yz)$), potom uká¾eme, ¾e v úplnì obecném pøípadé by samotná existence 
-aproximaèního algoritmu implikovala $P=NP$.
+aproximaèního algoritmu implikovala ${\rm P=NP }$.
 
 \>{\I a) trojúhelníková nerovnost:} 
 
-Existuje pìkný algoritmus, který najde Hamiltonovsku kru¾nici, která je
-maximálnì dvakrát tak velká jako optimální. Vedle pøedpokladu trojúhelníkové
-nerovnosti budeme potøebovat, aby ná¹ graf byl úplný. Souhrnì mù¾eme
+Existuje pìkný algoritmus, který najde hamiltonovskou kru¾nici o délce $\leq
+2\cdot opt$, kde $opt$ je délka nejkrat¹í hamiltonovské kru¾nice. 
+Vedle pøedpokladu trojúhelníkové
+nerovnosti budeme potøebovat, aby ná¹ graf byl úplný. Souhrnnì mù¾eme
 pøedpokládat, ¾e úlohu øe¹íme v nìjakém metrickém protoru, ve kterém jsou obì
 podmínky podle definice splnìny.
 
-Najdeme nejmen¹í kostru a obchodnímu cestujícímu poradíme, a» jde po~ní (staèí
-zakoøenit a projít do hloubky). Problém v¹ak je, ¾e daný sled obsahuje ka¾dý
-vrchol vícekrát, a proto musíme nahradit nepovolené vracení se, tj. pro~ka¾dý
-vrchol najít je¹tì nenav¹tívený vrchol v~na¹em sledu a pøejít pøímo na~nìj 
+Najdeme nejmen¹í kostru grafu a obchodnímu cestujícímu poradíme, a» jde po~ní -- kostru
+zakoøeníme a projdeme jako strom do hloubky, pøièem¾ se zastavíme a¾ v koøeni po projití
+v¹ech vrcholù. Problém v¹ak je, ¾e prùchod po kostøe obsahuje 
+nìkteré vrcholy i hrany vícekrát, a proto musíme nahradit nepovolené vracení se.
+Máme-li na nìjaký vrchol vstoupit podruhé, prostì ho ignorujeme a pøesuneme se 
+rovnou na dal¹í nenav¹tívený -- dovolit si to mù¾eme, graf je úplný a obsahuje 
+hrany mezi v¹emi dvojicemi vrcholù 
 (jinak øeèeno, poøadí vrcholù kru¾nice bude preorder výpis prùchodem do hloubky).
 Pokud platí trojúhelníková nerovnost, tak si tìmito zkratkami neu¹kodíme.
-Nech» minimální kostra má váhu~$T$. Váha oblezlého sledu tak bude nanejvý¹ $2T$. 
-Krácení urèitì nezvìt¹uje (trojúhelníková nerovnost), tak¾e váha nalezené 
-Hamiltonovské kru¾nice bude také nanejvý¹ $2T$.
-
-Kdy¾ máme Hamiltonovskou kru¾nici $C$ a z~ní vy¹krtneme hranu, tak máme kostru
-grafu~$G$ s~váhou men¹í ne¾ je váha $C$ -- ale ka¾dá kostra je alespoò tak tì¾ká 
+Nech» minimální kostra má váhu~$T$. Pokud bychom pro¹li celou kostru, bude mít 
+sled váhu~$2T$ (ka¾dou hranou kostry jsme ¹li tam a zpátky), a pøeskakování 
+vrcholù celkovou váhu nezvìt¹uje (pøi pøeskoku 
+nahradíme cestu $xyz$ jedinou hranou $xz$, pøièem¾ z trojúhelníkové nerovnosti 
+máme $xz \leq xy + xz$), tak¾e váha nalezené 
+hamiltonovské kru¾nice bude také nanejvý¹ $2T$.
+
+Kdy¾ máme hamiltonovskou kru¾nici $C$ a z~ní vy¹krtneme hranu, dostaneme kostru
+grafu~$G$ s~váhou men¹í ne¾ $C$ -- ale ka¾dá kostra je alespoò tak tì¾ká 
 jako minimální kostra $T$. Tedy optimální Hamiltonovská kru¾nice je urèitì tì¾¹í 
-ne¾ minimální kostra $T$. Kdy¾ to slo¾íme
-dohromady, algoritmus nám vrátí Hamiltonovskou kru¾nici $T'$ s~váhou nanejvý¹
-dvojnásobnou od~optimální Hamiltonovské kru¾nice ($T' \leq 2T < 2C$). Takovéto 
-algoritmy se nazývají {\I 2-aproxiaèní}, kdy¾ øe¹ení je maximálnì dvojnásobné 
+ne¾ minimální kostra $T$. Kdy¾ tyto dvì nerovnosti slo¾íme
+dohromady, algoritmus nám vrátí hamiltonovskou kru¾nici $T'$ s~váhou nanejvý¹
+dvojnásobnou vzhledem k optimální hamiltonovské kru¾nici ($T' \leq 2T < 2C$). Takovéto 
+algoritmy se nazývají {\I 2-aproximaèní}, kdy¾ øe¹ení je maximálnì dvojnásobné 
 od~optimálního.\foot{Hezkým trikem se v obecných metrických prostorech umí 
-1,5-aproximaènì. Ve speciálních metrických prostorech se to dá dokonce srazit na 
-libovolnì blízko k 1. Samo¾øejmì to pak zaplatíme na èase -- èím déle algoritmus 
-pracuje, tím je pøesnìj¹í.}
+1,5-aproximaènì. Ve~speciálních metrických prostorech (tøeba v euklidovské
+rovinì) se aproximaèní pomìr dá dokonce srazit na 
+libovolnì blízko k 1. Zaplatíme ale na èase -- èím pøesnìj¹í výsledek 
+po algoritmu chceme, tím déle to bude trvat.}
 
 \>{\I b) bez~trojúhelníkové nerovnosti:}
 
@@ -168,12 +176,12 @@ Zde se budeme naopak sna
 algoritmus neexistuje.
 
 \s{Vìta:} Pokud pro~libovolné~$\varepsilon>0$ existuje polynomiální
-$(1+\varepsilon)$-aproximaèní algoritmus pro~algoritmus obchodního cestujícího bez~trojúhelníkové nerovnosti, tak $P = NP$.
+$(1+\varepsilon)$-aproximaèní algoritmus pro~problém obchodního cestujícího bez~trojúhelníkové nerovnosti, tak ${\rm P = NP }$.
 
-\proof Uká¾eme, ¾e v~tom pøípadì doká¾eme v~polynomiálním èase najít
-Hamiltonovskou kru¾nici.
+\proof Uká¾eme, ¾e v~takovém pøípadì doká¾eme v~polynomiálním èase zjistit,
+zda v grafu existuje hamiltonovská kru¾nice.
 
-\>Dostali jsme graf~$G$, v~kterém hledáme Hamiltonovskou kru¾nici. Doplníme
+\>Dostali jsme graf~$G$, v~kterém hledáme hamiltonovskou kru¾nici. Doplníme
 $G$ na~úplný graf~$G'$ a~váhy hran~$G'$ nastavíme takto:
 \itemize\ibull
 \: $w(e) = 1$, kdy¾ $e \in E(G)$
@@ -181,23 +189,25 @@ $G$ na~
 \endlist
 \>Konstantu $c$ potøebujeme zvolit tak velkou, abychom jasnì poznali, jestli
 je ka¾dá hrana z nalezené Hamiltonovské kru¾nice hranou grafu $G$ (pokud by
-nebyla, bude kru¾nice obsahovat aspoò jednu hranu s váhou c, která vy¾ene
-souèet poznatelnì vysoko). Pokuï existuje Hamiltonovská kru¾nice v~$G'$ slo¾ená jen
-z~hran, které byli
-pùvodnì v~$G$, tak optimální øe¹ení bude mít váhu~$n$, jinak bude urèitì
-minimální $n-1+c$. Kdy¾ máme aproximaèní algoritmus s~pomìrem~$1+\varepsilon$,
-musí být
+nebyla, bude kru¾nice obsahovat aspoò jednu hranu s váhou $c$, která vy¾ene
+souèet poznatelnì vysoko). Pokuï existuje hamiltonovská kru¾nice v~$G'$ slo¾ená jen
+z~hran, které byly
+pùvodnì v~$G$, pak optimální øe¹ení bude mít váhu~$n$, jinak bude urèitì
+minimálnì $n-1+c$. Kdy¾ máme aproximaèní algoritmus s~pomìrem~$1+\varepsilon$,
+musí tedy být
 $$
 \eqalign{
 (1+\varepsilon)\cdot n &< n-1+c \cr
 \varepsilon n+1 &< c
 }
 $$
-\>Kdyby takový algoritmus existoval, tak máme polynomiální algoritmus
-na~Hamiltonovsku kru¾nici. O existenci pseudopolynomiálního algoritmu 
+\>Kdyby takový algoritmus existoval, máme polynomiální algoritmus
+na~Hamiltonovsku kru¾nici.
+\qed
+
+\s{Poznámka:} O existenci pseudopolynomiálního algoritmu 
 platí analogická vìta, a doká¾e se analogicky -- existující hrany budou 
 mít hranu 1, neexistující váhu 2.
-\qed
 
 \h{Aproximaèní schéma pro problém batohu}
 
@@ -220,28 +230,29 @@ $M/c_{max}$).
 Jak jsme tím zkreslili výsledek? V¹imnìme si, ¾e efekt je stejný, jako kdybychom jednotlivé
 ceny zaokrouhlili na~násobky èísla $c_{max}/M$ (prvky z intervalu 
 $[i\cdot c_{max}/M,(i+1)\cdot c_{max}/M)$ se zobrazí na stejný prvek). Ka¾dé $c_i$ jsme tím
-zmìnili o~nejvý¹e $c_{max}/M$, celkovou cenu libovolné podmno¾iny pøedmìtù tedy
+tedy zmìnili o~nejvý¹e $c_{max}/M$, celkovou cenu libovolné podmno¾iny pøedmìtù pak
 nejvý¹e o~$n\cdot c_{max}/M$. Teï si je¹tì v¹imnìme, ¾e pokud ze~zadání odstraníme
 pøedmìty, které se samy nevejdou do~batohu, má optimální øe¹ení pùvodní úlohy cenu $OPT\ge c_{max}$,
 tak¾e chyba v~souètu je nejvý¹e $n\cdot OPT/M$. Má-li tato chyba být shora omezena
-$\varepsilon\cdot OPT$, musíme zvolit $M\ge n/\varepsilon$.\foot{Pøipomìòme, ¾e toto není dùkaz, nebo» nepoèítáme s chybami danými zaokrouhlováním. Dùkaz provedeme ní¾e.}
+$\varepsilon\cdot OPT$, musíme zvolit $M\ge n/\varepsilon$.\foot{Pøipomìòme, ¾e toto je¹tì není dùkaz, nebo» velkoryse pøehlí¾íme chyby dané zaokrouhlováním. Dùkaz provedeme ní¾e.}
 
 \s{Algoritmus:}
 \algo
 \:Odstraníme ze~vstupu v¹echny pøedmìty tì¾¹í ne¾~$H$.
 \:Spoèítáme $c_{max}=\max_i c_i$ a zvolíme $M=\lceil n/\varepsilon\rceil$.
-\:Kvantujeme ceny: $\forall i: \hat{c}_i = \lfloor c_i \cdot M/c_{max} \rfloor$.
+\:Kvantujeme ceny: $\forall i: \hat{c}_i \leftarrow \lfloor c_i \cdot M/c_{max} \rfloor$.
 \:Vyøe¹íme dynamickým programováním problém batohu pro upravené ceny $\hat{c}_1, \ldots, \hat{c}_n$
 a pùvodní hmotnosti i kapacitu batohu.
 \:Vybereme stejné pøedmìty, jaké pou¾ilo optimální øe¹ení kvantovaného zadání.
 \endalgo
 
 \>Kroky 1--3 a 5 jistì zvládneme v~èase $\O(n)$. Krok~4 øe¹í problém batohu
-se souètem cen $\hat{C}\le nM \le n^2/\varepsilon$, co¾ stihne v~èase $\O(n\hat{C})=\O(n^3/\varepsilon)$.
+se souètem cen $\hat{C}\le nM = \O(n^2/\varepsilon)$, co¾ stihne v~èase $\O(n\hat{C})=\O(n^3/\varepsilon)$.
 Zbývá dokázat, ¾e výsledek na¹eho algoritmu má opravdu relativní chybu nejvý¹e~$\varepsilon$.
 
-Nejprve si rozmyslíme, jak dopadne optimální øe¹ení $OPT$ pùvodního zadání,
-kdy¾ ceny v~nìm pou¾itých pøedmìtù nakvantujeme (mno¾inu indexù tìchto pøedmìtù si oznaèíme~$Y$):
+Nejprve si rozmyslíme, jakou cenu budou mít pøedmìty které daly optimální øe¹ení
+v pùvodním zadání (tedy mají v pùvodním zadání dohromady cenu $OPT$),
+kdy¾ jejich ceny nakvantujeme (mno¾inu indexù tìchto pøedmìtù si oznaèíme~$Y$):
 $$
 \eqalign{
 \widehat{OPT} &= \sum_{i\in Y} \hat{c}_i =
@@ -252,7 +263,7 @@ $$
 OPT \cdot {M\over c_{max}} - n.
 }
 $$
-Nyní naopak spoèítejme, jak dopadne øe¹ení~$Q$ nakvantovaného problému pøi pøepoètu
+Nyní spoèítejme, jak dopadne optimální øe¹ení~$Q$ nakvantovaného problému pøi pøepoètu
 na~pùvodní ceny (to je výsledek na¹eho algoritmu):
 $$
 \eqalign{
@@ -278,10 +289,10 @@ a~dok
 V~na¹em pøípadì je dokonce slo¾itost polynomiální i v~závislosti na~$1/\varepsilon$, tak¾e
 schéma je {\I plnì polynomiální} (øeèené té¾ FPTAS\foot{Fully Polynomial-Time Approximation 
 Scheme}). U nìkterých problémù se stává, ¾e aproximaèní schéma závisí na 
-$1/\varepsilon$ exponenciálnì, co¾ tak pøíjemné není.
+$1/\varepsilon$ exponenciálnì, co¾ tak pøíjemné není. Shròme, co jsme zjistili, do následující vìty:
 
 \s{Vìta:}
-Existuje algoritmus, který $\forall \varepsilon > 0$ nalezneme
+Existuje algoritmus, který pro ka¾dé $\varepsilon > 0$ nalezne
 {\I $(1 - \varepsilon)$-aproximaci} problému batohu s $n$ pøedmìty v èase
 $\O(n^3/\varepsilon)$.