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