From 349ac41cd4e01e75389f65c3aedb96aace1079ee Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Tue, 19 Jan 2010 00:21:53 +0100 Subject: [PATCH 1/1] Aproximacni algoritmy: korektury. --- 12-apx/12-apx.tex | 143 +++++++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/12-apx/12-apx.tex b/12-apx/12-apx.tex index cb33da8..d2170b7 100644 --- a/12-apx/12-apx.tex +++ b/12-apx/12-apx.tex @@ -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)$. -- 2.39.2