]> mj.ucw.cz Git - ads2.git/blob - 9-apx/9-apx.tex
APX: Batoh
[ads2.git] / 9-apx / 9-apx.tex
1 \input lecnotes.tex
2 \prednaska{9}{Co si poèít s tì¾kým problémem}{}
3
4 V~pøedchozí kapitole jsme zjistili, ¾e leckteré rozhodovací problémy
5 jsou \NP-úplné. Z~toho plyne, ¾e jsou ekvivalentní, ale bohu¾el také,
6 ¾e ani jeden z~nich zatím neumíme vyøe¹it v~polynomiálním èase.
7
8 Èasto se stane, ¾e problém, který v~¾ivotì potkáme, patøí mezi \NP-úplné.
9 Pøesnìji øeèeno spí¹ ne¾ s~rozhodovacím problémem se potkáme s~problémem
10 {\I optimalizaèním,} ve~kterém jde o~nalezení {\I nejlep¹ího} objektu
11 s~danou vlastností. To mù¾e být tøeba nejvìt¹í nezávislá mno¾ina v~grafu
12 nebo obarvení grafu nejmen¹ím mo¾ným poètem barev. Kdybychom umìli efektivnì
13 øe¹it optimalizaèní problém, umíme samozøejmì øe¹it i pøíslu¹ný rozhodovací,
14 tak¾e pokud $\P\ne\NP$, jsou i optimalizaèní problémy tì¾ké.
15
16 Ale co naplat, svìt nám takové úlohy pøedkládá a my je potøebujeme vyøe¹it.
17 Na¹tìstí situace není zase tak beznadìjná. Nabízejí se tyto mo¾nosti, co si
18 poèít:
19
20 \algo
21 \:{\I Spokojit se s~málem.} Nejsou vstupy, pro které problém potøebujeme
22   øe¹it, dostateènì malé, abychom si mohli dovolit pou¾ít algoritmus
23   s~exponenciální slo¾itostí? Zvlá¹» kdy¾ takový algoritmus vylep¹íme
24   proøezáváním neperspektivních vìtví výpoètu a tøeba ho i paralelizujeme.
25 \:{\I Vyøe¹it speciální pøípad.} Nemají na¹e vstupy nìjaký speciální
26   tvar, kterého bychom mohli vyu¾ít? Grafové problémy jsou èasto v~\P{}
27   tøeba pro stromy nebo i obecnìji pro bipartitní grafy. U~èíselných
28   problémù zase nìkdy pomù¾e, jsou-li èísla na vstupu dostateènì malá.
29 \:{\I Øe¹ení aproximovat.} Opravdu potøebujeme optimální øe¹ení? Nestaèilo
30   by nám o~kousíèek hor¹í? Èasto existuje polynomiální algoritmus, který
31   nalezne nejhùøe $c$-krát hor¹í øe¹ení ne¾ je optimum, kde $c$~je konstanta.
32 \:{\I Pou¾ít heuristiku.} Neumíme-li nic lep¹ího, mù¾eme sáhnout po~nìkteré
33   z~mnoha heuristických technik, které sice nic nezaruèují, ale obvykle
34   nìjaké uspokojivé øe¹ení najdou. Mù¾e pomoci tøeba hladový algoritmus
35   nebo genetické algoritmy. Èasto platí, ¾e èím déle heuristiku necháme
36   bì¾et, tím lep¹í øe¹ení najde.
37 \:{\I Kombinace pøístupù.} Mnohdy lze pøedchozí pøístupy kombinovat:
38   napøíklad pou¾ít aproximaèní algoritmus a poté jeho výsledek
39   je¹tì heuristicky vylep¹ovat. Tak získáme øe¹ení, které zaruèenì není
40   moc daleko od optima, a~pokud budeme mít ¹tìstí, bude k~nìmu velmi blízko.
41 \endalgo
42
43 \>Nyní si nìkteré z~tìchto technik pøedvedeme na konkrétních pøíkladech.
44
45 \h{Nejvìt¹í nezávislá mno¾ina ve stromu}
46
47 Uká¾eme, ¾e hledání nejvìt¹í nezávislé mno¾iny je snadné, pokud graf je strom.
48
49 \s{Lemma:} Buï~$T$ zakoøenìný strom a $\ell$ jeho libovolný list. Pak alespoò jedna
50 z~nejvìt¹ích nezávislých mno¾in obsahuje~$\ell$.
51
52 \proof
53 Mìjme nejvìt¹í nezávislou mno¾inu~$M$, která list~$\ell$ neobsahuje. Podívejme
54 se na otce~$p$ listu~$\ell$ (kdyby neexistoval, je celý strom jednovrcholový
55 a tvrzení triviální). Le¾í~$p$ v~$M$? Pokud ne, mohli bychom do~$M$ pøidat
56 list~$\ell$ a dostali bychom vìt¹í nezávislou mno¾inu. V~opaèném pøípadì z~$M$
57 odebereme otce~$p$ a nahradíme ho listem~$\ell$, èím¾ dostaneme stejnì velkou
58 nezávislou mno¾inu obsahující~$\ell$.
59 \qed
60
61 Algoritmus bude pøímoèaøe pou¾ívat toto lemma. Dostane na vstupu strom,
62 ten zakoøení a zvolí libovolný list. Tento list umístí do nezávislé mno¾iny
63 a jeho otce odebere, proto¾e se nemù¾e v~nezávislé mno¾inì vyskytovat.
64 Toto bude opakovat, dokud nìjaké vrcholy zbývají. (Graf se v~prùbìhu mù¾e
65 rozpadnout na více komponent, ale to nevadí.)
66
67 Tento algoritmus jistì pracuje v~polynomiálním èase. ©ikovnou implementací
68 mù¾eme slo¾itost sní¾it a¾ na lineární. Napøíklad tak, ¾e budeme udr¾ovat seznam
69 listù. My si uká¾eme jinou lineární implementaci zalo¾enou na prohledávání do hloubky.
70 Bude pracovat s~polem znaèek~$M$, v~nìm¾ na poèátku bude v¹ude \<false> a postupnì
71 obdr¾í \<true> v¹echny prvky hledané nezávislé mno¾iny.
72
73 \algo
74 \algin Strom~$T$ s~koøenem~$v$, pole znaèek~$M$.
75 \:$M[v] \= \<true>$.
76 \:Pokud je~$v$ list, skonèíme.
77 \:Pro v¹echny syny~$w$ vrcholu~$v$:
78 \::Zavoláme se rekurzivnì na podstrom s~koøenem~$w$.
79 \::Pokud $M[w]=\<true>$, polo¾íme $M[v] \= \<false>$.
80 \endalgo
81
82 \h{Barvení intervalového grafu}
83
84 Mìjme~$n$ pøedná¹ek s~urèenými èasy zaèátku a konce. Chceme je rozvrhnout
85 do co~nejmen¹ího poètu poslucháren tak, aby nikdy neprobíhaly dvì pøedná¹ky
86 naráz v~jedné místnosti.
87
88 Chceme tedy obarvit co nejmen¹ím poètem barev graf, jeho¾ vrcholy jsou èasové
89 intervaly a dvojice intervalù je spojena hranou, pokud má neprázdný prùnik.
90 Takovým grafùm se øíká {\I intervalové} a pro jejich barvení existuje pìkný
91 polynomiální algoritmus.
92
93 Podobnì jako jsme geometrické problémy øe¹ili zametáním roviny, zde budeme
94 \uv{zametat pøímku bodem}, tedy procházet ji zleva doprava, a~v¹ímat si
95 událostí, co¾ budou zaèátky a konce intervalù. Pro jednoduchost pøedpokládejme,
96 ¾e v¹echny souøadnice zaèátkù a koncù jsou navzájem rùzné.
97
98 Kdykoliv interval zaène, pøidìlíme mu barvu. A¾ skonèí, o~barvì si poznamenáme,
99 ¾e je momentálnì volná, a~dal¹ím intervalùm budeme pøednostnì pøidìlovat
100 volné barvy. Øeèeno v~pseudokódu:
101
102 \algo
103 \algin Intervaly $\left[ x_1, y_1 \right], \ldots, \left[ x_n, y_n \right]$.
104 \:$b \= 0$ \cmt{poèet zatím pou¾itých barev}
105 \:$B \= \emptyset$ \cmt{které barvy jsou momentálnì volné}
106 \:Setøídíme mno¾inu v¹ech $x_i$ a $y_i$.
107 \:Procházíme v¹echna $x_i$ a $y_i$ ve~vzestupném poøadí:
108 \::Narazíme-li na $x_i$:
109 \:::Je-li $B\ne\emptyset$, odebereme jednu barvu z~$B$ a ulo¾íme ji do~$c_i$.
110 \:::Jinak $b\=b+1$ a $c_i\=b$.
111 \::Narazíme-li na $y_i$:
112 \:::Vrátíme barvu $c_i$ do~$B$.
113 \algout Obarvení $c_1,\ldots,c_n$.
114 \endalgo
115
116 \s{Analýza:}
117 Tento algoritmus má èasovou slo¾itost $\O(n\log n)$ kvùli tøídìní souøadnic.
118 Samotné obarvování je lineární.
119
120 Je¹tì ov¹em potøebujeme dokázat, ¾e jsme pou¾ili minimální mo¾ný poèet barev.
121 Uva¾ujme okam¾ik, kdy promìnná~$b$ naposledy vzroste. Tehdy zaèal interval
122 a mno¾ina~$B$ byla prázdná, co¾ znamená, ¾e jsme $b-1$ pøedchozích barev museli
123 pøidìlit intervalùm, je¾ zaèaly a dosud neskonèily. Existuje tedy $b$ rùzných
124 intervalù, které mají spoleèný bod (v~grafu tvoøí kliku), tak¾e ka¾dé obarvení
125 potøebuje alespoò~$b$ barev.
126
127 \h{Problém batohu s~malými èísly}
128
129 Pøipomeòme si problém batohu. Jeho optimalizaèní verze vypadá takto:
130 Je daná mno¾ina $n$~pøedmìtù s~hmotnostmi $h_1,\ldots,h_n$ a cenami $c_1,\ldots,c_n$
131 a nosnost batohu~$H$. Hledáme podmno¾inu pøedmìtù~$P \subseteq \{1,\ldots,n\}$,
132 která se vejde do batohu (tedy $h(P)=\sum_{i\in P} h_i \le H$) a její cena
133 $c(P) = \sum_{i\in P} c_i$ je nejvìt¹í mo¾ná.
134
135 Uká¾eme algoritmus, jeho¾ èasová slo¾itost bude polynomiální v~poètu
136 pøedmìtù~$n$ a souètu v¹ech cen $C=\sum_i c_i$.
137
138 Pou¾ijeme dynamické programování. Pøedstavme si problém omezený na~prvních~$k$
139 pøedmìtù. Oznaème $A_k(c)$ (kde $0\le c\le C$) minimum z~hmotností tìch podmno¾in
140 jejich¾ cena je právì~$c$; pokud ¾ádná taková podmno¾ina neexistuje, polo¾íme $A_k(c)=\infty$.
141
142 Tato $A_k$ spoèteme indukcí podle~$k$: Pro $k=0$ je
143 urèitì $A_0(0)=0$ a $A_0(c)=\infty$ pro $c>0$. Pokud ji¾ známe
144 $A_{k-1}$, spoèítáme $A_k$ následovnì: $A_k(c)$ odpovídá nìjaké podmno¾inì
145 pøedmìtù z~$1,\ldots,k$. V~této podmno¾inì jsme buïto $k$-tý pøedmìt nepou¾ili
146 (a pak je $A_k(c)=A_{k-1}(c)$), nebo pou¾ili a tehdy bude $A_k(c) =
147 A_{k-1}(c-c_k) + h_k$ (to samozøejmì jen pokud $c\ge c_k$). Z~tìchto dvou
148 mo¾ností si vybereme tu, která dává mno¾inu s~men¹í hmotností:
149 $$
150 A_k(c) = \min (A_{k-1}(c), A_{k-1}(c-c_k) + h_k).
151 $$
152 Pøechod od $A_{k-1}$ k~$A_k$ tedy trvá $\O(C)$, pro v¹echna~$k$ pak $\O(Cn)$.
153
154 Jakmile spoèteme~$A_n$, známe pro ka¾dou cenu nejlehèí podmno¾inu s~touto cenou.
155 Maximální cena mno¾iny, která se vejde do batohu, je tedy nejvìt¹í~$c^*$, pro nì¾
156 je $A_n(c^*) \le H$. Jeho nalezení nás stojí èas $\O(C)$.
157
158 Zbývá zjistit, které pøedmìty do~nalezené mno¾iny patøí. Upravíme algoritmus,
159 aby si pro ka¾dé $A_k(c)$ pamatoval $B_k(c)$, co¾ bude index posledního pøedmìtu,
160 který jsme do~pøíslu¹né mno¾iny pøidali. Pro nalezené $c^*$ tedy bude $i=B_n(c^*)$
161 poslední pøedmìt v~nalezené mno¾inì, $i'=B_{i-1}(c^*-c_i)$ ten pøedposlední
162 a tak dále. Takto v~èase $\O(n)$ rekonstruujeme celou mno¾inu od~posledního
163 prvku k~prvnímu.
164
165 Máme tedy algoritmus, který vyøe¹í problém batohu v~èase $\O(nC)$. Tato funkce
166 ov¹em není polynomem ve~velikosti vstupu, jeliko¾ reprezentujeme-li vstup binárnì,
167 $C$~mù¾e být a¾ exponenciálnì velké vzhledem k~velikosti jeho zápisu. To je pìkný
168 pøíklad tzv. {\I pseudopolynomiálního} algoritmu, tedy algoritmu, jeho¾ slo¾itost
169 je polynomem v~poètu èísel na vstupu a jejich velikosti. Pro nìkteré \NP-úplné
170 problémy takové algoritmy existují, pro jiné (napø. pro nezávislou mno¾inu) nikoliv.
171
172 \s{Verze bez cen:} Jednodu¹¹í verzi problému batohu, která nerozli¹uje mezi
173 hmotnostmi a cenami, zvládneme i jiným algoritmem, opìt zalo¾eným na dynamickém
174 programování.
175
176 Indukcí podle~$k$ vytváøíme  mno¾iny~$Z_k$ obsahující v¹echny hmotnosti
177 men¹í ne¾~$H$, kterých nabývá nìjaká podmno¾ina prvních~$k$ prvkù. Jistì je $Z_0=\{0\}$.
178 Podobnou úvahou jako v~pøedchozím algoritmu dostaneme, ¾e ka¾dou dal¹í~$Z_k$ mù¾eme
179 zapsat jako sjednocení $Z_{k-1}$ s~kopií $Z_{k-1}$ posunutou o~$h_k$, pøièem¾ hodnoty
180 vìt¹í ne¾~$H$ zahodíme. Nakonec ze~$Z_n$ vyèteme výsledek.
181
182 V¹echny mno¾iny pøitom mají nejvý¹e~$H+1$ prvkù, tak¾e pokud si je budeme udr¾ovat
183 jako setøídìné seznamy, spoèítáme sjednocení sléváním v~èase $\O(H)$ a celý algoritmus
184 dobìhne v~èase $\O(Hn)$.
185
186 \h{Aproximace problému obchodního cestujícího}
187
188 \s{Problém: Obchodní cestující}
189
190 \>{\I Vstup:} Neorientovaný graf~$G$, ka¾dá hrana
191 je ohodnocená funkcí $w: E(G)\rightarrow {\bb R }^+_0$.
192
193 \>{\I Výstup:} Hamiltonovská kru¾nice (obsahující v¹echny vrcholy grafu), a~to ta nejkrat¹í
194 (podle ohodnocení).
195
196 Tento problém je hned na~první pohled nároèný -- u¾ sama existence
197 hamiltonovské kru¾nice je NP-úplná. Najdeme aproximaèní algoritmus nejprve za pøedpokladu,
198 ¾e vrcholy splòují trojúhelníkovou nerovnost (tj. $\forall x,y,z \in V: w(xz)\le
199 w(xy)+w(yz)$), potom uká¾eme, ¾e v úplnì obecném pøípadé by samotná existence
200 aproximaèního algoritmu implikovala ${\rm P=NP }$.
201
202 \>{\I a) trojúhelníková nerovnost:}
203
204 Existuje pìkný algoritmus, který najde hamiltonovskou kru¾nici o délce $\leq
205 2\cdot opt$, kde $opt$ je délka nejkrat¹í hamiltonovské kru¾nice.
206 Vedle pøedpokladu trojúhelníkové
207 nerovnosti budeme potøebovat, aby ná¹ graf byl úplný. Souhrnnì mù¾eme
208 pøedpokládat, ¾e úlohu øe¹íme v nìjakém metrickém protoru, ve kterém jsou obì
209 podmínky podle definice splnìny.
210
211 Najdeme nejmen¹í kostru grafu a obchodnímu cestujícímu poradíme, a» jde po~ní -- kostru
212 zakoøeníme a projdeme jako strom do hloubky, pøièem¾ se zastavíme a¾ v koøeni po projití
213 v¹ech vrcholù. Problém v¹ak je, ¾e prùchod po kostøe obsahuje
214 nìkteré vrcholy i hrany vícekrát, a proto musíme nahradit nepovolené vracení se.
215 Máme-li na nìjaký vrchol vstoupit podruhé, prostì ho ignorujeme a pøesuneme se
216 rovnou na dal¹í nenav¹tívený -- dovolit si to mù¾eme, graf je úplný a obsahuje
217 hrany mezi v¹emi dvojicemi vrcholù
218 (jinak øeèeno, poøadí vrcholù kru¾nice bude preorder výpis prùchodem do hloubky).
219 Pokud platí trojúhelníková nerovnost, tak si tìmito zkratkami neu¹kodíme.
220 Nech» minimální kostra má váhu~$T$. Pokud bychom pro¹li celou kostru, bude mít
221 sled váhu~$2T$ (ka¾dou hranou kostry jsme ¹li tam a zpátky), a pøeskakování
222 vrcholù celkovou váhu nezvìt¹uje (pøi pøeskoku
223 nahradíme cestu $xyz$ jedinou hranou $xz$, pøièem¾ z trojúhelníkové nerovnosti
224 máme $xz \leq xy + xz$), tak¾e váha nalezené
225 hamiltonovské kru¾nice bude také nanejvý¹ $2T$.
226
227 Kdy¾ máme hamiltonovskou kru¾nici $C$ a z~ní vy¹krtneme hranu, dostaneme kostru
228 grafu~$G$ s~váhou men¹í ne¾ $C$ -- ale ka¾dá kostra je alespoò tak tì¾ká
229 jako minimální kostra $T$. Tedy optimální hamiltonovská kru¾nice je urèitì tì¾¹í
230 ne¾ minimální kostra $T$. Kdy¾ tyto dvì nerovnosti slo¾íme
231 dohromady, algoritmus nám vrátí hamiltonovskou kru¾nici $T'$ s~váhou nanejvý¹
232 dvojnásobnou vzhledem k optimální hamiltonovské kru¾nici ($T' \leq 2T < 2C$). Takovéto
233 algoritmy se nazývají {\I 2-aproximaèní}, kdy¾ øe¹ení je maximálnì dvojnásobné
234 od~optimálního.\foot{Hezkým trikem se v obecných metrických prostorech umí
235 $1{,}5$-aproximace. Ve~nìkterých metrických prostorech (tøeba v euklidovské
236 rovinì) se aproximaèní pomìr dá dokonce srazit na
237 libovolnì blízko k 1. Zaplatíme ale na èase -- èím pøesnìj¹í výsledek
238 po algoritmu chceme, tím déle to bude trvat.}
239
240 \>{\I b) bez~trojúhelníkové nerovnosti:}
241
242 Zde se budeme naopak sna¾it ukázat, ¾e ¾ádný polynomiální aproximaèní
243 algoritmus neexistuje.
244
245 \s{Vìta:} Pokud pro~libovolné~$\varepsilon>0$ existuje polynomiální
246 $(1+\varepsilon)$-aproximaèní algoritmus pro~problém obchodního cestujícího bez~trojúhelníkové nerovnosti, tak ${\rm P = NP }$.
247
248 \proof Uká¾eme, ¾e v~takovém pøípadì doká¾eme v~polynomiálním èase zjistit,
249 zda v grafu existuje hamiltonovská kru¾nice.
250
251 Dostali jsme graf~$G$, ve~kterém hledáme hamiltonovskou kru¾nici. Doplníme
252 $G$ na~úplný graf~$G'$ a~váhy hran~$G'$ nastavíme takto:
253 \itemize\ibull
254 \: $w(e) = 1$, kdy¾ $e \in E(G)$
255 \: $w(e) = c \gg 1$, kdy¾ $e \not\in E(G)$
256 \endlist
257
258 Konstantu $c$ potøebujeme zvolit tak velkou, abychom jasnì poznali, jestli
259 je ka¾dá hrana z nalezené hamiltonovské kru¾nice hranou grafu $G$ (pokud by
260 nebyla, bude kru¾nice obsahovat aspoò jednu hranu s váhou $c$, která vy¾ene
261 souèet poznatelnì vysoko). Pokud existuje hamiltonovská kru¾nice v~$G'$ slo¾ená jen
262 z~hran, které byly
263 pùvodnì v~$G$, pak optimální øe¹ení bude mít váhu~$n$, jinak bude urèitì
264 minimálnì $n-1+c$. Kdy¾ máme aproximaèní algoritmus s~pomìrem~$1+\varepsilon$,
265 musí tedy být
266 $$
267 \eqalign{
268 (1+\varepsilon)\cdot n &< n-1+c \cr
269 \varepsilon n+1 &< c
270 }
271 $$
272 Kdyby takový algoritmus existoval, máme polynomiální algoritmus
273 na~hamiltonovskou kru¾nici.
274 \qed
275
276 \s{Poznámka:} O existenci pseudopolynomiálního algoritmu
277 platí analogická vìta, a doká¾e se analogicky -- existující hrany budou
278 mít váhu 1, neexistující váhu 2.
279
280 \h{Aproximaèní schéma pro problém batohu}
281
282 Ji¾ víme, jak optimalizaèní verzi problému batohu vyøe¹it v~èase $\O(nC)$,
283 pokud jsou hmotnosti i ceny na~vstupu pøirozená èísla a $C$ je souèet v¹ech cen.
284 Jak si poradit, pokud je~$C$ obrovské? Kdybychom mìli ¹tìstí a v¹echny
285 ceny byly dìlitelné nìjakým èíslem~$p$, mohli bychom je tímto èíslem
286 vydìlit. Tím bychom dostali zadání s~men¹ími èísly, jeho¾ øe¹ením by byla
287 stejná mno¾ina pøedmìtù jako u~zadání pùvodního.
288
289 Kdy¾ nám ¹tìstí pøát nebude, mù¾eme pøesto zkusit ceny vydìlit a výsledky
290 nìjak zaokrouhlit. Øe¹ení nové úlohy pak sice nebude pøesnì odpovídat optimálnímu
291 øe¹ení té pùvodní, ale kdy¾ nastavíme parametry správnì, bude alespoò jeho dobrou aproximací.
292
293 \s{Základní my¹lenka:}
294
295 \def\cmax{c_{\rm max}}
296
297 Oznaèíme si $\cmax$ maximum z~cen~$c_i$. Zvolíme si nìjaké pøirozené èíslo~$M < \cmax$
298 a zobrazíme interval cen $[0, \cmax]$ na $[0,M]$ (tedy ka¾dou cenu znásobíme
299 $M/\cmax$).
300 Jak jsme tím zkreslili výsledek? V¹imnìme si, ¾e efekt je stejný, jako kdybychom jednotlivé
301 ceny zaokrouhlili na~násobky èísla $\cmax/M$ (prvky z intervalu
302 $[i\cdot \cmax/M,(i+1)\cdot \cmax/M)$ se zobrazí na stejný prvek). Ka¾dé $c_i$ jsme tím
303 tedy zmìnili o~nejvý¹e $\cmax/M$, celkovou cenu libovolné podmno¾iny pøedmìtù pak
304 nejvý¹e o~$n\cdot \cmax/M$. Teï si je¹tì v¹imnìme, ¾e pokud ze~zadání odstraníme
305 pøedmìty, které se samy nevejdou do~batohu, má optimální øe¹ení pùvodní úlohy cenu $\<OPT>\ge \cmax$,
306 tak¾e chyba v~souètu je nejvý¹e $n\cdot \<OPT>/M$. Má-li tato chyba být shora omezena
307 $\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.}
308
309 \s{Algoritmus:}
310 \algo
311 \:Odstraníme ze~vstupu v¹echny pøedmìty tì¾¹í ne¾~$H$.
312 \:Spoèítáme $\cmax=\max_i c_i$ a zvolíme $M=\lceil n/\varepsilon\rceil$.
313 \:Kvantujeme ceny: $\forall i: \hat{c}_i \leftarrow \lfloor c_i \cdot M/\cmax \rfloor$.
314 \:Vyøe¹íme dynamickým programováním problém batohu pro upravené ceny $\hat{c}_1, \ldots, \hat{c}_n$
315 a pùvodní hmotnosti i kapacitu batohu.
316 \:Vybereme stejné pøedmìty, jaké pou¾ilo optimální øe¹ení kvantovaného zadání.
317 \endalgo
318
319 \s{Analýza:}
320 Kroky 1--3 a 5 jistì zvládneme v~èase $\O(n)$. Krok~4 øe¹í problém batohu
321 se souètem cen $\hat{C}\le nM = \O(n^2/\varepsilon)$, co¾ stihne v~èase $\O(n\hat{C})=\O(n^3/\varepsilon)$.
322 Zbývá dokázat, ¾e výsledek na¹eho algoritmu má opravdu relativní chybu nejvý¹e~$\varepsilon$.
323
324 Nech» pùvodní úloha má nìjaké optimální øe¹ení~$P$ s~cenou $c(P)$. Rozmysleme
325 si, jakou cenu $\hat{c}(P)$ bude tato mno¾ina pøedmìtù mít v~nakvantovaném zadání:
326 $$
327 \eqalign{
328 \hat{c}(P) &= \sum_{i\in P} \hat{c}_i =
329 \sum_i \left\lfloor c_i\cdot {M\over \cmax} \right\rfloor \ge
330 \sum_i \left( c_i\cdot {M\over \cmax} - 1 \right) \ge \cr
331 &\ge
332 \biggl(\sum_i c_i \cdot {M\over \cmax}\biggr) - n =
333 c(P) \cdot {M\over \cmax} - n.
334 }
335 $$
336 Nyní naopak spoèítejme, jak dopadne optimální øe¹ení~$Q$ nakvantovaného problému pøi pøepoètu
337 na~pùvodní ceny (to je výsledek na¹eho algoritmu):
338 $$
339 \eqalign{
340 c(Q) &= \sum_{i\in Q} c_i \ge
341 \sum_i \hat{c}_i \cdot {\cmax\over M} =
342 \biggl(\sum_i \hat{c}_i\biggr) \cdot {\cmax\over M} \ge
343 \hat{c}(P) \cdot {\cmax\over M}.
344 }
345 $$
346 Poslední nerovnost platí proto, ¾e $\sum_{i\in Q} \hat{c}_i$ je optimální øe¹ení
347 kvantované úlohy, zatímco $\sum_{i\in P} \hat{c}_i$ je nìjaké dal¹í øe¹ení té¾e úlohy,
348 které nemù¾e být lep¹í.%
349 \foot{Zde nás zachraòuje, ¾e aèkoliv u~obou úloh le¾í optimum obecnì jinde, obì mají
350 stejnou mno¾inu {\I pøípustných øe¹ení,} tedy tìch, která se vejdou do batohu. Kdybychom
351 místo cen kvantovali hmotnosti, nebyla by to pravda a algoritmus by nefungoval.}
352 Teï u¾ staèí slo¾it obì nerovnosti a dosadit za~$M$:
353 $$
354 \eqalign{
355 c(Q) &\ge \biggl( { c(P) \cdot M\over \cmax} - n\biggr) \cdot {\cmax\over M} \ge
356 c(P) - {n\cdot \cmax\over n / \varepsilon} \ge c(P) - \varepsilon \cmax \ge \cr
357 &\ge c(P) - \varepsilon c(P) = (1-\varepsilon)\cdot c(P).
358 }
359 $$
360 Algoritmus tedy v¾dy vydá øe¹ení, které je nejvý¹e $(1-\varepsilon)$-krát hor¹í ne¾ optimum,
361 a~doká¾e to pro libovolné~$\varepsilon$ v~èase polynomiálním v~$n$. Takovému algoritmu øíkáme
362 {\I polynomiální aproximaèní schéma} (jinak té¾ PTAS\foot{Polynomial-Time Approximation Scheme}).
363 V~na¹em pøípadì je dokonce slo¾itost polynomiální i v~závislosti na~$1/\varepsilon$, tak¾e
364 schéma je {\I plnì polynomiální} (øeèené té¾ FPTAS\foot{Fully Polynomial-Time Approximation
365 Scheme}). U nìkterých problémù se stává, ¾e aproximaèní schéma závisí na
366 $1/\varepsilon$ exponenciálnì, co¾ tak pøíjemné není. Shròme, co jsme zjistili, do následující vìty:
367
368 \s{Vìta:}
369 Existuje algoritmus, který pro ka¾dé $\varepsilon > 0$ nalezne
370 {\I $(1 - \varepsilon)$-aproximaci} problému batohu s $n$ pøedmìty v èase
371 $\O(n^3/\varepsilon)$.
372
373 \bye