]> mj.ucw.cz Git - ads2.git/blobdiff - 12-apx/12-apx.tex
Korektury vsech kapitol od Bohumira Zamecnika. Diky moc!
[ads2.git] / 12-apx / 12-apx.tex
index 3625a401918b8e19a62bc218a54107dff06d836e..2635b3d875e56b86eaa63def143fb6c27d6dba23 100644 (file)
@@ -18,38 +18,38 @@ slo
 
 Pou¾ijeme dynamické programování. Pøedstavme si problém omezený na~prvních~$k$
 pøedmìtù. Oznaème si $A_k(c)$ (kde $0\le c\le C$) minimální hmotnost
-podmno¾iny, jeji¾ cena je právì~$c$. Tato $A_k$ spoèteme indukcí podle~$k$:
+podmno¾iny, její¾ cena je právì~$c$. Tato $A_k$ spoèteme indukcí podle~$k$:
 Pro $k=0$ je urèitì $A_0(0)=0$, $A_0(c)=\infty$ pro $c>0$. Pokud ji¾ známe
 $A_{k-1}$, spoèítáme $A_k$ následovnì: $A_k(c)$ odpovídá nìjaké podmno¾inì
-pøedmìtù z~$1,\ldots,k$. V~této podmno¾inì jsme buïto pøedmìt $k$ nepou¾ili
-(a pak je $A_k(c)=A_{k-1}(c)$) nebo pou¾ili a tehdy bude $A_k(c) = A_{k-1}(c-c_k) + h_k$
+pøedmìtù z~$1,\ldots,k$. V~této podmno¾inì jsme buïto $k$-tý pøedmìt nepou¾ili
+(a pak je $A_k(c)=A_{k-1}(c)$), nebo pou¾ili a tehdy bude $A_k(c) = A_{k-1}(c-c_k) + h_k$
 (to samozøejmì jen pokud $c\ge c_k$). Z~tìchto dvou mo¾ností si vybereme tu,
 která dává mno¾inu s~men¹í hmotností. Tedy:
 $$
 A_k(c) = \min (A_{k-1}(c), A_{k-1}(c-c_k) + h_k).
 $$
-Tímto zpùsobem v~èase $\O(C)$ spoèteme jednu mno¾ínu, v~èase $\O(nC)$ pak v¹echny.
+Tímto zpùsobem v~èase $\O(C)$ spoèteme jednu mno¾inu, v~èase $\O(nC)$ pak v¹echny.
 
 Podle $A_n$ snadno nalezneme maximální cenu mno¾iny, která se vejde do batohu. To bude
-nejvìt¹í~$c^*$, pro které je $A_n(c^*) < \infty$. To nás stojí èas $\O(C)$.
+nejvìt¹í~$c^*$, pro nì¾ je $A_n(c^*) < \infty$. Jeho nalezení nás stojí èas $\O(C)$.
 
 A~jak zjistit, které pøedmìty do~nalezené mno¾iny patøí? Upravíme algoritmus,
-aby si pro ka¾dé $A_k(c)$ pamatoval $B_k(c)$, co¾ je index posledního pøedmìtu,
-který do~pøíslu¹né mno¾iny pøidal. Pro nalezené $c^*$ tedy bude $i=B_n(c^*)$
+aby si pro ka¾dé $A_k(c)$ pamatoval $B_k(c)$, co¾ bude index posledního pøedmìtu,
+který jsme do~pøíslu¹né mno¾iny pøidali. Pro nalezené $c^*$ tedy bude $i=B_n(c^*)$
 poslední pøedmìt v~nalezené mno¾inì, $i'=B_{i-1}(c^*-c_i)$ ten pøedposlední
 a tak dále. Takto v~èase $\O(n)$ rekonstruujeme celou mno¾inu od~posledního
 prvku k~prvnímu.
 
 Ukázali jsme tedy algoritmus s~èasovou slo¾itostí $\O(nC)$, který vyøe¹í
-problém batohu. To není polynom ve~velikosti vstupu ($C$~mu¾e být a¾ exponenciálnì
+problém batohu. Jeho slo¾itost není polynomem ve~velikosti vstupu ($C$~mu¾e být a¾ exponenciálnì
 velké vzhledem k~velikosti vstupu), ale pouze ve~velikosti èísel na~vstupu.
 Takovým algoritmùm se øíká {\I pseudopolynomiální.}
 
 \s{Verze bez cen:} Na verzi s~cenami rovnými hmotnostem se dá pou¾ít
 i jiný algoritmus zalo¾ený na~dynamickém programování: poèítáme mno¾iny
-$Z_k$, které obsahují v¹echny hmotnosti men¹í ne¾~$H$, kterých nabývá
-nìjaká podmno¾ina prvních~$k$ prvkù batohu. Pøitom $Z_0=\{0\}$, $Z_k$
-spoèteme z~$Z_{k-1}$ a ze~$Z_n$ vyèteme výsledek. V¹echny tyto mno¾iny
+$Z_k$ obsahující v¹echny hmotnosti men¹í ne¾~$H$, kterých nabývá
+nìjaká podmno¾ina prvních~$k$ prvkù. Pøitom $Z_0=\{0\}$, $Z_k$
+spoèteme ze~$Z_{k-1}$ 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{Aproximaèní schéma pro problém batohu}
@@ -70,25 +70,24 @@ stejn
 
 Kdy¾ nám ¹tìstí pøát nebude, mù¾eme pøesto zkusit ceny vydìlit a výsledky
 nìjak zaokrouhlit. Øe¹ení nové úlohy pak sice nebude pøesnì odpovídat optimálnímu
-øe¹ení té pùvodní, ale kdy¾ nastavíme parametry správnì, bude alespoò dobrou aproximací
-optima.
+øe¹ení té pùvodní, ale kdy¾ nastavíme parametry správnì, bude alespoò jeho dobrou aproximací.
 
 \s{Základní my¹lenka:}
 
 Oznaèíme si $c_{max}$ maximum z~cen~$c_i$. Zvolíme si nìjaké pøirozené èíslo~$M$
-a zobrazme interval cen $[0, c_{max}]$ na $[0,M]$.
+a zobrazíme interval cen $[0, c_{max}]$ na $[0,M]$.
 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$. Ka¾dé $c_i$ jsme tím
 zmìnili o~nejvý¹e $c_{max}/M$, celkovou cenu libovolné podmno¾iny pøedmìtù tedy
-nejvý¹e o~$n\cdot c_{max}/M$. Teï si je¹tì v¹imneme, ¾e pokud ze~zadání odstraníme
-pøedmìty, které se samy nevejdou do~batohu, má optimální øe¹ení pùvodní úlohy ceny $OPT\ge c_{max}$,
+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\approx n/\varepsilon$.
+$\varepsilon\cdot OPT$, musíme zvolit $M\ge n/\varepsilon$.
 
 \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=\lfloor n/\varepsilon\rfloor$.
+\:Spoèítáme $c_{max}=\max_i c_i$ a zvolíme $M=\lceil n/\varepsilon\rceil$.
 \:Kvantujeme ceny: $\hat{c}_i = \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.
@@ -126,7 +125,7 @@ kvantovan
 které nemù¾e být lep¹í. 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} =
+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.
 }
@@ -134,7 +133,7 @@ $$
 Algoritmus tedy v¾dy vydá øe¹ení, které je nejvý¹e $(1-\varepsilon)$-krát hor¹í ne¾ optimum,
 a~doká¾e to pro libovolné~$\varepsilon$ v~èase polynomiálním v~$n$. Takovému algoritmu øíkáme
 {\I polynomiální aproximaèní schéma} (jinak té¾ PTAS\foot{Polynomial-Time Approximation Scheme}).
-V~na¹em pøípadì je dokonce slo¾itost polynomiální i v~zavislosti na~$1/\varepsilon$, tak¾e
+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}).
 
 \bye