]> mj.ucw.cz Git - ads2.git/commitdiff
APX: Prepsan uvod, NZmna ve stromech a castecne aproximace batohu
authorMartin Mares <mj@ucw.cz>
Sat, 14 Jan 2012 22:05:19 +0000 (23:05 +0100)
committerMartin Mares <mj@ucw.cz>
Sat, 14 Jan 2012 22:05:19 +0000 (23:05 +0100)
8-prevody/8-prevody.tex
9-apx/9-apx.tex
lecnotes.tex

index 8c15db407903f6c66351dfc3923e61274a0affa8..960ffcc7929a7d9775e41a65d0deb911424ded20 100644 (file)
@@ -6,10 +6,6 @@
 \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.%
index 4763c7f06069ff78a2cd3318090891802daf0a3c..450cf67500572d7789afdb4bd89afdd75f6dcf45 100644 (file)
@@ -1,59 +1,78 @@
 \input lecnotes.tex
-\prednaska{9}{Aproximaèní algoritmy}{}
+\prednaska{9}{Co si poèít s tì¾kým problémem}{}
 
-\>Na~minulých pøedná¹kách jsme se zabývali rùznými tì¾kými rozhodovacími
-problémy. Tato se zabývá postupy, jak se v~praxi vypoøádat s~øe¹ením tìchto
-problémù.
+V~pøedchozí kapitole jsme zjistili, ¾e mnohé problémy, které v~¾ivotì
+potkáme, jsou \NP-úplné, tak¾e není pravdìpodobné, ¾e bychom pro nì
+umìli nalézt polynomiální algoritmus. Ale co naplat, èasto je potøebujeme
+vyøe¹it. Na¹tìstí situace není zase tak beznadìjná. Nabízejí se tyto
+mo¾nosti, co si poèít:
 
-\h{Co dìlat, kdy¾ potkáme NP-úplný problém}
 \algo
-\:Nepanikaøit.
-\:Spokojit se s~málem.
-\: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.
+\:{\I Spokojit se s~málem.} Nejsou vstupy, pro které problém potøebujeme
+  øe¹it, dostateènì malé, abychom si mohli dovolit pou¾ít algoritmus
+  s~exponenciální slo¾itostí? Zvlá¹» kdy¾ takový algoritmus vylep¹íme
+  proøezáváním neperspektivních vìtví výpoètu a tøeba ho i paralelizujeme.
+\:{\I Vyøe¹it speciální pøípad.} Nemají na¹e vstupy nìjaký speciální
+  tvar, kterého bychom mohli vyu¾ít? Grafové problémy jsou èasto v~\P{}
+  tøeba pro stromy nebo i obecnìji pro bipartitní grafy. U~èíselných
+  problémù zase nìkdy pomù¾e, jsou-li èísla na vstupu dostateènì malá.
+\:{\I Øe¹ení aproximovat.} Pokud chceme nalézt nejlep¹í objekt s~danou
+  vlastností (tøeba nejvìt¹í nezávislou mno¾inu), nestaèil by nám o~nìco
+  hor¹í? Èasto existuje polynomiální algoritmus, který nalezne nejhùøe
+  $c$-krát hor¹í øe¹ení ne¾ je optimum pro nìjakou konstantu~$c$.
+\:{\I Pou¾ít heuristiku.} Neumíme-li nic lep¹ího, mù¾eme sáhnout po~nìkteré
+  z~mnoha heuristických technik, které sice nic nezaruèují, ale obvykle
+  nìjaké uspokojivé øe¹ení najdou. Hodit se mohou tøeba genetické algoritmy.
+\:{\I Kombinace pøístupù.} Èasto lze vý¹e zmínìné pøístupy kombinovat:
+  napøíklad mù¾eme pou¾ít aproximaèní algoritmus a poté jeho výsledek
+  je¹tì heuristicky vylep¹ovat. Tak získáme øe¹ení, které zaruèenì není
+  moc daleko od optima, a~pokud budeme mít ¹tìstí, bude k~nìmu velmi blízko.
 \endalgo
 
-\h{První zpùsob: Speciální pøípad}
+\>Nyní si nìkteré z~tìchto technik pøedvedeme na konkrétních pøíkladech.
 
-\>Èasto si vystaèíme s~vyøe¹ením speciálního pøípadu NP-úplného problému, který
-le¾í v~$P$. Napøíklad pøi øe¹ení grafové úlohy nám mù¾e staèit øe¹ení
-pro~speciální druh grafù (stromy, bipartitní grafy, \dots). Barvení grafu je lehké
-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.
+\h{Nejvìt¹í nezávislá mno¾ina ve stromu}
 
-\>Uká¾eme si dva takové pøípady (budeme øe¹ení hledat, nejen rozhodovat, zda existuje)
+Uká¾eme, ¾e hledání nejvìt¹í nezávislé mno¾iny je pro stromy velmi snadné.
 
-\s{Problém: Maximální nezávislá mno¾ina ve~stromì (ne rozhodovací)}
+\s{Lemma:} Buï~$T$ zakoøenìný strom a $\ell$ jeho libovolný list. Pak alespoò jedna
+z~nejvìt¹ích nezávislých mno¾in obsahuje~$\ell$.
 
-\>{\I Vstup:} Zakoøenìný strom~$T$.
+\proof
+Mìjme nejvìt¹í nezávislou mno¾inu~$M$, která list~$\ell$ neobsahuje. Podívejme
+se na otce~$p$ listu~$\ell$ (kdyby neexistoval, je celý strom jednovrcholový
+a tvrzení triviální). Le¾í~$p$ v~$M$? Pokud ne, mohli bychom do~$M$ pøidat
+list~$\ell$ a dostali bychom vìt¹í nezávislou mno¾inu. V~opaèném pøípadì z~$M$
+odebereme otce~$p$ a nahradíme ho listem~$\ell$, èím¾ dostaneme stejnì velkou
+nezávislou mno¾inu obsahující~$\ell$.
+\qed
 
-\>{\I Výstup:} Maximální (co do~poètu vrcholù) nezávislá mno¾ina vrcholù~$M$~v~$T$.
+Algoritmus bude pøímoèaøe pou¾ívat toto lemma. Dostane na vstupu strom,
+ten zakoøení a zvolí libovolný list. Tento list umístí do nezávislé mno¾iny
+a jeho otce odebere, proto¾e se nemù¾e v~nezávislé mno¾inì vyskytovat.
+Toto bude opakovat, dokud nìjaké vrcholy zbývají. (Graf se v~prùbìhu mù¾e
+rozpadnout na více komponent, ale to nevadí.)
 
-\>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:
-\itemize\ibull
-\:Pokud otec není v~$M$, tak list $l$ pøidáme do~$M$, èím¾ se nezávislost
-mno¾iny zachovala a velikost stoupla o~1.
-\: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
-\>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.
+Tento algoritmus jistì pracuje v~polynomiálním èase. ©ikovnou implementací
+mù¾eme slo¾itost sní¾it a¾ na lineární. Napøíklad tak, ¾e budeme udr¾ovat seznam
+listù. My si uká¾eme jinou lineární implementaci zalo¾enou na prohledávání do hloubky.
+Bude pracovat s~polem znaèek~$M$, v~nìm¾ na poèátku bude v¹ude \<false> a postupnì
+obdr¾í \<true> v¹echny prvky hledané nezávislé mno¾iny.
 
-\s{Algoritmus:}
-\>MaxNz$(T)$
 \algo
-\:Polo¾íme $L$:=$\{$listy stromu $T\}$.
-\:Polo¾íme $O$:=$\{$otcové vrcholù z~$L\}$.
-\:Vrátíme $L \cup$ MaxNz$(T\setminus(O \cup L))$.
+\algin Strom~$T$ s~koøenem~$v$, pole znaèek~$M$.
+\:$M[v] \= \<true>$.
+\:Pokud je~$v$ list, skonèíme.
+\:Pro v¹echny syny~$w$ vrcholu~$v$:
+\::Zavoláme se rekurzivnì na podstrom s~koøenem~$w$.
+\::Pokud $M[w]=\<true>$, polo¾íme $M[v] \= \<false>$.
 \endalgo
-\>{\I Poznámka:} Toto doká¾eme naprogramovat v~$\O(n)$ (udr¾ujeme si frontu listù).
 
-\s{Problém: Batoh}
+\h{Barvení intervalového grafu}
+
+FIXME
+
+\h{Problém batohu s~malými èísly}
 
 \>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
@@ -110,12 +129,7 @@ v
 a ze~$Z_n$ vyèteme výsledek. V¹echny tyto mno¾iny
 mají nejvý¹e $H$ prvkù, tak¾e celková èasová slo¾itost algoritmu je~$\O(nH)$.
 
-\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-ú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$.
+\h{Aproximace problému obchodního cestujícího}
 
 \s{Problém: Obchodní cestující}
 
@@ -223,63 +237,69 @@ n
 
 \s{Základní my¹lenka:}
 
-Oznaèíme si $c_{max}$ maximum z~cen~$c_i$. Zvolíme si nìjaké pøirozené èíslo~$M < c_{max}$
-a zobrazíme interval cen $[0, c_{max}]$ na $[0,M]$ (tedy ka¾dou cenu znásobíme
-$M/c_{max}$).
+\def\cmax{c_{\rm max}}
+
+Oznaèíme si $\cmax$ maximum z~cen~$c_i$. Zvolíme si nìjaké pøirozené èíslo~$M < \cmax$
+a zobrazíme interval cen $[0, \cmax]$ na $[0,M]$ (tedy ka¾dou cenu znásobíme
+$M/\cmax$).
 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
-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 je¹tì není dùkaz, nebo» velkoryse pøehlí¾íme chyby dané zaokrouhlováním. Dùkaz provedeme ní¾e.}
+ceny zaokrouhlili na~násobky èísla $\cmax/M$ (prvky z intervalu
+$[i\cdot \cmax/M,(i+1)\cdot \cmax/M)$ se zobrazí na stejný prvek). Ka¾dé $c_i$ jsme tím
+tedy zmìnili o~nejvý¹e $\cmax/M$, celkovou cenu libovolné podmno¾iny pøedmìtù pak
+nejvý¹e o~$n\cdot \cmax/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 \cmax$,
+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 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 \leftarrow \lfloor c_i \cdot M/c_{max} \rfloor$.
+\:Spoèítáme $\cmax=\max_i c_i$ a zvolíme $M=\lceil n/\varepsilon\rceil$.
+\:Kvantujeme ceny: $\forall i: \hat{c}_i \leftarrow \lfloor c_i \cdot M/\cmax \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
+\s{Analýza:}
+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 = \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, 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$):
+Nech» pùvodní úloha má nìjaké optimální øe¹ení~$P$ s~cenou $c(P)$. Rozmysleme
+si, jakou cenu $\hat{c}(P)$ bude tato mno¾ina pøedmìtù mít v~nakvantovaném zadání:
 $$
 \eqalign{
-\widehat{OPT} &= \sum_{i\in Y} \hat{c}_i =
-\sum_i \left\lfloor c_i\cdot {M\over c_{max}} \right\rfloor \ge
-\sum_i \left( c_i\cdot {M\over c_{max}} - 1 \right) \ge \cr
+\hat{c}(P) &= \sum_{i\in P} \hat{c}_i =
+\sum_i \left\lfloor c_i\cdot {M\over \cmax} \right\rfloor \ge
+\sum_i \left( c_i\cdot {M\over \cmax} - 1 \right) \ge \cr
 &\ge
-\biggl(\sum_i c_i \cdot {M\over c_{max}}\biggr) - n =
-OPT \cdot {M\over c_{max}} - n.
+\biggl(\sum_i c_i \cdot {M\over \cmax}\biggr) - n =
+c(P) \cdot {M\over \cmax} - n.
 }
 $$
-Nyní spoèítejme, jak dopadne optimální øe¹ení~$Q$ nakvantovaného problému pøi pøepoètu
+Nyní naopak 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{
-ALG &= \sum_{i\in Q} c_i \ge
-\sum_i \hat{c}_i \cdot {c_{max}\over M} =
-\biggl(\sum_i \hat{c}_i\biggr) \cdot {c_{max}\over M} \ge^*
-\widehat{OPT} \cdot {c_{max}\over M}.
+c(Q) &= \sum_{i\in Q} c_i \ge
+\sum_i \hat{c}_i \cdot {\cmax\over M} =
+\biggl(\sum_i \hat{c}_i\biggr) \cdot {\cmax\over M} \ge
+\hat{c}(P) \cdot {\cmax\over M}.
 }
 $$
-Nerovnost $\ge^*$ platí proto, ¾e $\sum_{i\in Q} \hat{c}_i$ je optimální øe¹ení
-kvantované úlohy, zatímco $\sum_{i\in Y} \hat{c}_i$ je nìjaké dal¹í øe¹ení té¾e úlohy,
-které nemù¾e být lep¹í. Teï u¾ staèí slo¾it obì nerovnosti a dosadit za~$M$:
+Poslední nerovnost platí proto, ¾e $\sum_{i\in Q} \hat{c}_i$ je optimální øe¹ení
+kvantované úlohy, zatímco $\sum_{i\in P} \hat{c}_i$ je nìjaké dal¹í øe¹ení té¾e úlohy,
+které nemù¾e být lep¹í.%
+\foot{Zde nás zachraòuje, ¾e aèkoliv u~obou úloh le¾í optimum obecnì jinde, obì mají
+stejnou mno¾inu {\I pøípustných øe¹ení,} tedy tìch, která se vejdou do batohu. Kdybychom
+místo cen kvantovali hmotnosti, nebyla by to pravda a algoritmus by nefungoval.}
+Teï u¾ staèí slo¾it obì nerovnosti a dosadit za~$M$:
 $$
 \eqalign{
-ALG &\ge \biggl( { OPT \cdot M\over c_{max}} - n\biggr) \cdot {c_{max}\over M} \ge
-OPT - {n\cdot c_{max}\over n / \varepsilon} \ge OPT - \varepsilon c_{max} \ge \cr
-&\ge OPT - \varepsilon OPT = (1-\varepsilon)\cdot OPT.
+c(Q) &\ge \biggl( { c(P) \cdot M\over \cmax} - n\biggr) \cdot {\cmax\over M} \ge
+c(P) - {n\cdot \cmax\over n / \varepsilon} \ge c(P) - \varepsilon \cmax \ge \cr
+&\ge c(P) - \varepsilon c(P) = (1-\varepsilon)\cdot c(P).
 }
 $$
 Algoritmus tedy v¾dy vydá øe¹ení, které je nejvý¹e $(1-\varepsilon)$-krát hor¹í ne¾ optimum,
index 627497b323ab64462073c80941fb91aad44f7e53..9606a847d8b4bc677635ccdc53e2b0688e3dbe30 100644 (file)
 % Matematicke symboly
 \def\symdiff{\mathop{\Delta}}
 
+% Slozitostni tridy
+\def\cc#1{\hbox{\setfonts[CMSans/]\bf #1}}
+\def\P{\cc{P}}
+\def\NP{\cc{NP}}
+
 %%% Cislovani verzi %%%
 
 \def\currentversion{%