R. Královič Aproximačné algoritmy (7. októbra 2010)
ii
Obsah 1 Úvod 1 1.1 Algoritmy a zložitosť........................... 1 1.2 Lineárne programovanie......................... 1 1.3 Použité vzťahy.............................. 4 1.4 Teória pravdepodobnosti......................... 6 2 Optimalizačné problémy 9 2.1 Triedy P o a NP o............................. 9 2.2 Redukovateľnosť............................. 10 2.3 Vzťah medzi NP a NP o.......................... 11 2.4 Aproximácia................................ 12 2.4.1 Absolútna aproximácia...................... 13 2.4.2 Relatívna aproximácia trieda APX.............. 13 2.4.3 Lepšie ako APX: PTAS a FPTAS................ 15 2.4.4 Horšie ako APX......................... 17 2.4.5 Asymptotická aproximácia.................... 20 3 Techniky návrhu aproximačných algoritmov 23 3.1 Greedy algoritmy............................. 23 3.2 Lineárne programovanie......................... 25 3.2.1 Edmondsov algoritmus...................... 28 3.3 Derandomizácia.............................. 32 3.3.1 Metóda podmienených pravdepodobností........... 32 3.3.2 Derandomizácia aplikovaná na problém MAX-E3-SAT... 32 3.4 Vonkajškoplanárna dekompozícia.................... 34 4 Negatívne výsledky o aproximácii 39 4.1 Pravdepodobnostne overiteľné dôkazy (PCP)............. 39 4.2 Použitie PCPvety............................ 40 5 Redukcia a úplnosť v triedach aproximovateľnosti 45 5.1 NP o -úplnosť................................ 46 5.2 APX-úplnosť............................... 50 6 Problém obchodného cestujúceho 55 6.1 Trojuholníková nerovnosť Christofidesov algoritmus........ 55 6.2 Metrický TSP............................... 57 6.3 Stabilita aproximácie........................... 66 iii
iv OBSAH 7 Toky a rezy 69 7.1 Multiway-Cut............................. 70 7.2 Min-k-Cut................................ 72 7.3 Min-Multicut.............................. 75 7.4 Max-Cut................................. 78 8 Stromy a kostry 81 8.0.1 Metric Steiner tree........................ 81 8.0.2 Steiner tree............................ 81 8.0.3 Steiner forest........................... 81 8.0.4 Steiner network.......................... 81 8.0.5 Constrained MST via matroid intersection........... 81
Kapitola 1 Úvod Tento text obsahuje poznámky k predmetu Aproximačné algoritmy prednášanému na FMFI UK. Momentálne je v stave pre-α a obsahuje útržky poznámok, kusy textu a veľa chýb v pomerne nesúrodej zmesi. Čiteteľný je zatiaľ iba na vlastné riziko. V tejto kapitole zhrnieme základné vedomosti, na ktorých kurz stavia. 1.1 Algoritmy a zložitosť algoritmy, RAM, počet operácií, unit cost vs. log cost praktická riešiteľnosť - polynomiálny čas Turingove stroje, polynomiálna ekvivalencia s RAM zložitosť TS nedeterminizmus triedy P a NP redukovateľnosť, pojem úplného problému Cook-Lewinova veta ( o NP-úplnosti SATu) 1.2 Lineárne programovanie Mnohé dôležité optimalizačné problémy sa dajú formulovať nasledujúcim spôsobom: chceme optimalizovať (t.j. minimalizovať alebo maximalizovať) hodnotu lineárnej funkcie n premenných, pričom hodnoty premenných musia spĺňať isté obmedzenia. V prípade, že tieto obmedzenia sú vyjadriteľné formou lineárnych nerovností, hovoríme o úlohe lineárneho programovania. Príklad 1.1 Chceme nájsť minimum fukcie f(x 1, x 2, x 3 ) := 10x 1 + 3x 2 + 5x 3 spomedzi takých hodnôt x 1, x 2, x 3, ktoré spĺňajú 6x 1 + x 2 x 3 2 (1.1) 2x 1 + 2x 2 + 6x 3 8 (1.2) 6x 1 + 3x 2 + 5x 3 = 30 x 1, x 2, x 3 0 1
2 KAPITOLA 1. ÚVOD primárna úloha LP Nech z je hľadané minimum. Horný odhad na z sa dá získať jednoduchým dosadením a overením podmienok. Napríklad ak zvolíme x = (x 1, x 2, x 3 ) = (2, 6, 0), ľahko overíme, že z 38. Ako však môžeme dokázať dolný odhad? Keď sa lepšie pozrieme na nerovnosť (1.1), zistíme, že jej ľavá strana je po zložkách menšia ako f, preto určite z 2. Lepší dolný odhad získame, ak sčítame (1.1) a (1.2): dostaneme nerovnosť 8x 1 + 3x 2 + 5x 3 10 ktorej ľavá strana je opäť po zložkách menšia ako f, čím sme dokázali, že z 10. Takže na nájdenie dolného odhadu na z hľadáme lineárnu kombináciu y 1 (6x 1 + x 2 x 3 ) + y 2 (2x 1 + 2x 2 + 6x 3 ) + y 3 (6x 1 + 3x 2 + 5x 3 ) tak, aby bola po zložkách menšia ako f. Navyše, keďže treba dodržať nerovnosti v (1.1) a (1.2), koeficienty y 1 a y 2 musia byť nezáporné. Predchádzajúce úvahy môžeme opäť formulovať ako úlohu lineárneho programovania: chceme nájsť maximum funkcie g(y 1, y 2, y 3 ) := 2y 1 + 8y 2 + 30y 3 spomedzi takých hodnôt y 1, y 2, y 3, ktoré spĺňajú 6y 1 + 2y 2 + 6y 3 10 y 1 + 2y 2 + 3y 3 3 y 1 + 6y 2 + 5y 3 5 y 1, y 2 0 Ak sa nám teraz podarí nájsť dva vektory x a y sp ňajúce podmienky tak, že f(x) = g(y) = z znamená to, že z = z. V našom prípade môžme zvoliť x = (0, 5, 3) a y = (0, 0, 1), čím dokážeme, že z = 30. Úvahy z predchádzajúceho príkladu môžme formalizovať nasledovným spôsobom. Definícia 1.1 Úloha lineárneho programovania v kánonickom tvare je nájsť za predpokladov min n c j x j j=1 n a ij x j b i i = 1,..., m j=1 x j 0 j = 1,..., n V tejto definícii vyžadujeme, aby všetky premenné boli nezáporné. Ľahko vidno, že týmto obmedzením neustrácame na všeobecnosti: ak chceme, aby premenná x i mohla nadobúdať aj záporné hodnoty, nahradíme ju dvoma nezápornými premennými x + i, x i a za x i substituujeme x + i x i. Rovnako podmienka, že všetky ohraničenia musia byť vyjadrené pomocou nerovností neuberá na všeobecnosti, keďže rovnosť môžme vyjadriť dvoma nerovnosťami. K primárnej úlohe LP definujeme duálnu úlohu: duálna úloha LP Nájsť
1.2. LINEÁRNE PROGRAMOVANIE 3 za predpokladov m max b i y i i=1 m a ij y i c j j = 1,..., n i=1 y i 0 i = 1,..., m Úspornejší maticový zápis dvojice primárnej a duálnej úlohy je P : min{c T x Ax b, x 0} D : max{b T y A T y c, y 0} Vektor x, ktorý spĺňa Ax b, x 0 nazveme prípustné riešenie primárnej úlohy, vektor y, pre ktorý platí A T y c, y 0 nazveme prípustným riešením duálnej úlohy. Ľahko vidno, že platí nasledujúci vzťah: Veta 1.1 Ak x je prípustné priešenie primárnej úlohy a y je prípustné riešenie duálnej úlohy, potom c T x b T y Dôkaz: c T x ( A T y ) T x = y T Ax y T b (1.3) Ak nájdeme x a y tak, že c T x = b T y, vieme, že máme optimálne riešenie podobne ako v príklade 1.2. Dá sa to však vždy? Odpoveď je kladná a vujadruje ju nasledujúca veta: Veta 1.2 Primárna úloha LP má konečné optimum práve vtedy, keď ho má duálna úloha. Naviac, ak x, y sú príslušné optimálne riešenia primárnej, resp. duálnej úlohy, platí c T x = b T y Čo vieme povedať a štruktúre optimálnych riešení? Podľa silnej vety o dualite musia v (1.3) platiť všade rovnosti. Z toho dostávame nasledujúcu charakterizáciu: Veta 1.3 Nech x, y sú prípustné riešenia primárnej a duálnej úlohy. Potom x, y sú obidve optimálne práve vtedy, ak sú splnené obe nasledujúce podmienky: primárna podmienka komplementarity: m 1 j n : buď x j = 0 alebo a ij y i = c j i=1 slabá veta o dualite LP silná veta o dualite LP podmienky komplementarity duálna podmienka komplementarity: 1 i m : buď y i = 0 alebo n a ij x j = b i j=1
4 KAPITOLA 1. ÚVOD Cauchy- Schwartz Wallisov vzorec Veta 1.5 Stirlingov vzorec Veta 1.6 Napriek tomu, že kánonický tvar LP neuberá na všeobecnosti, niekedy je príjemnejšie používať ohraničenia vo forme rovností, alebo premenné, nadobúdajúce aj záporné hodnoty. Vzťah medzi primárnou a duálnou úlohou potom charakterizuje nasledujúca tabuľka primárna úloha duálna úloha minimalizovať c T x maximalizovať b T y n i-te obmedzenie tvaru a ij x j = b i i-ta premenná y i R i-te obmedzenie tvaru j=1 n a ij x j b i i-ta premenná y i 0 j=1 j-ta premenná x j R j-te obmedzenie tvaru j-ta premenná x j 0 j-te obmedzenie tvaru *** to do: riešiteľnosť LP, ILP je NP-ťažké *** 1.3 Použité vzťahy m a ij y i = c j i=1 m a ij y i c j Veta 1.4 Nech a = (a 1,..., a n ), b = (b 1,..., b n ) sú dve postupnosti komplexných čísel. Potom platí ( n ) 2 ( n ) ( n ) a k b k k=1 resp. v skrátenej forme pomocou normy a skalárneho súčinu vektorov lim n k=1 a 2 k a, b a b i=1 k=1 b 2 k ( n ) 2 2i 1 2i 1 2n + 1 = π 2 ( n ) n ( n ) ( ) n 1 2πn < n! < 2πn 1 + e e 12n 1 Dôkaz: Zoberme si namiesto n! najprv log(n!). Máme log(n!) = n log(i) i=1 Pretože logaritmus je rastúca funkcia, dostaneme i=1 Sčítame a dostaneme i log(x)dx < log(i) < i 1 i n log(x)dx < log(n! < 0 1 i+1 n+1 log(x)dx log(x)dx
1.3. POUŽITÉ VZŤAHY 5 Pretože log xdx = x log x x a lim x 0 x log x = lim x 0 log x x = 0, dostaneme Teraz zvoľme Máme n log n n < log(n!) < (n + 1) log(n + 1) n ( d n := log(n!) n + 1) log n + n ( d n d n+1 = n + 1 ) ( ) ( n + 1 log 1 = n + 1 ) ( 1 + 1 log 2 n 2 1 1 Použijeme Taylorov rozvoj ( ) 1 1 + t 2 log = t + 1 1 t 3 t3 + 1 5 t5 + i>0 2n+1 2n+1 a dostaneme 0 < d n d n+1 < 1 1 3 (2n + 1) 2i = 1 1 3 (2n + 1) 2 1 = 1 ( 1 12 n 1 ) n + 1 Odtiaľ vieme, že postupnosť d n je klesajúca a postupnosť d n 1/12n je rastúca, a teda obidve konvergujú k spoločnej limite C, takže lim n Ostáva ukázať, že e C = 2π. Podľa Wallisovej formuly ( n ) 2 2i 1 lim n 2i 1 2n + 1 = π 2 t.j. a preto lim n i=1 n! n (n+1/2) e = n ec (1.4) 2 4 6 (2n) 1 π = 1 3 5 (2n 1) 2n 2 lim n (2 n n!) 2 1 π = (2n)! 2n 2 Použijeme (1.4) pre odhad faktoriálov a úpravamy dostaneme výsledok. Definícia 1.2 n-tým harmonickým číslom H n označujeme sumu H n = n 1 i Veta 1.7 Pre n-té harmonické číslo H n platí H n = γ + ln n + 1 2n 1 12n 2 + 1 ( ) 1 120n 4 + O n 6 kde γ = 0.5772156649 je Euler-Mascheronino konštanta. i=1 ) harmonické číslo Veta 1.8 Pre r > 1/2 platí ln(r) = r 1 r + (r 1)2 (r 1)3 2r 2 + 3r 3 + = n=1 1 n ( r 1 r ) n
6 KAPITOLA 1. ÚVOD pre- náhodná menná linearita strednej hodnoty Dôkaz: Nech f(x) = 1 1 x Indukciou sa dá ľahko ukázať, že n-tá derivácia f(x) je f (n) n! (x) = (1 x) n+1 Keďže f(x) je analytická, použijeme Taylorov rozvoj v bode a = 0 a máme f (n) (a) f(x) = (x a) n = n! n=0 Predpokladajme, že x < 1. V rovnosti 1 1 x = zintegrujeme obidve strany a dostávame Zvoľme teraz t.j. n=0 x n ( ) 1 ln = 1 x n r = 1 1 x x = r 1 r a máme požadovaný výsledok. Pretože sme potrebovali, aby x < 1, výsledok platí pre r > 1/2. n=1 1.4 Teória pravdepodobnosti Definícia 1.3 Nech Ω je pravdepodobnostný priestor. Diskrétnou náhodnou premennou nazývame funkciu X : Ω Z. x n n=0 Rozdelenie náhodnej premennej X je funkcia F (y) = Pr[x < y], pre < y <, takže pravdepodobnosť, že X má hodotu z intervalu y 1, y 2 je Pr[y 1 X y 2 ] = F (y 1 ) F (y 2 ). Hustota pravdepodobnosti náhodnej premennej X je funkcia p : Z 0, 1 definovaná p X (x) = P r[x = x]. Stredná hodnota náhodnej premennej X s hustotou pravdepodobnosti p je definovaná E[X] = x xp(x), kde sumácia sa berie cez všetky možné hodnoty X. Veta 1.9 Nech X 1,..., X k sú náhodné premenné a h(x 1,..., X k ) je lineárna funkcia. Potom E[h(X 1,..., X k )] = h(e[x 1 ],..., E[X k ]) Ak navyše X 1,..., X k sú nezávislé, platí aj x n [ k ] k E X i = E[X i ] i=1 i=1
1.4. TEÓRIA PRAVDEPODOBNOSTI 7 Markovova nerovnosť Veta 1.10 Nech X je ľubovoľná náhodná premenná, a a R. Potom platí P r[x a] E[X] a Dôkaz: Podľa definície strednej hodnoty máme E[X] = xp(x) xp(x) a p(x) = a P r[x a] x x a x a Definícia 1.4 Diskrétna náhoná premenná X má Bernoulliho rozdelenie, ak P r[x = 1] + P r[x = 0] = 1 Veta 1.11 Majme n nezávislých náhodných premenných X 1,..., X n takých, že P r[x k = 1] P k pre všetky k = 1,..., n. Potom platí P r[x βp ] e (1 1 β kde β > 1, X = n i=1 X i a P = i = 1 n P i. ln β)βp Dôkaz: Pri dôkaze použijeme techniku generujúcich funkcií. Uvažujme ľubovoľné reálne číslo λ > 0 a náhodné premenné Y k = e λx k a Y = n k=1 Y k = e λx. Zrejme P r[x βp ] = P r[y e λβp ]. Pre náhodnú premennú Y k dostaneme E[Y k ] = E [ e λx k] = P r[xk = 1]e λ + 1 P r[x k = 1] = 1 + P r[x k = 1](e λ 1) Pretože e λ > 1 a x : 1 + x e x, dostávame E[Y k ] 1 + P k (e λ 1) e P k(e λ 1) Pretože X k sú nezávislé náhodné premenné, platí E[Y ] = E[ n Y k ] = k=1 n E[Y k ] k=1 n e P k(e λ 1) = e P (eλ 1) k=1 Podľa Markovovej nerovnosti máme P r [ Y e λβp ] E[Y ] e (e λ 1) λβp ep λβp Pravá strana sa minimalizuje dosadením λ = ln β, čím máme P r[x βp ] = P r[y e λβp ] e P (β 1) β ln βp = e (1 1 β ln β)βp Bernoulliho rozdelenie Černovova nerovnosť *** to do: pokračovanie ***
8 KAPITOLA 1. ÚVOD
Kapitola 2 Optimalizačné problémy V tomto texte sa budeme zaoberať optimalizačnými problémami, t.j. problémami, v ktorých úlohou je vybrať spomedzi množiny prípustných riešení riešenie s minimálnou (resp. maximálnou) hodnotou. Definícia 2.1 Optimalizačný problém P je štvorica (I P, SOL P, m P, c P ), kde I P je jazyk vstupných inštancií, SOL P je funcia, ktorá každému vstupu x I P priradí množinu prípustných riešení SOL P (x), m P je účelová funkcia, ktorá každej dvojici x I P, y SOL P (x) priradí hodnotu riešenia m P (x, y) N, a c P je min alebo max podľa toho, či je cieľom nájsť minimálnu alebo maximálnu hodnotu m P (x, y). Pre dané x I P označme m P (x) hodnotu optimálneho riešenia, t.j. m P(x) = c P {m P (x, y) y SOL P (x)} Ďalej označme SOL P(x) množinu optimálnych riešení, t.j. SOL P(x) = {y m P (x, y) = m P(x)} Ak je problém z kontextu zrejmý, budeme vynechávať index P. S optimalizačným problémom P môžu byť spojené rôzne úlohy podľa toho, či chceme nájsť optimálne riešenie, alebo či sa uspokojíme iba s nájdením ceny optimálneho riešenia. konštrukcia P c pre dané x I nájsť y SOL vyhodnotenie P e pre dané x I nájsť m (x) V niektorých prípadoch budeme vynechávať index c, e; vtedy, ak nepovieme inak, budeme uvažovať problém konštrukcie. Ako vysvitne neskôr, pre mnohé problémy, ktoré nás budú zaujímať sú obe verzie v istom zmysle ekvivalentné. S rozhodovacím problémom úzko súvisí pojem prislúchajúceho jazyka: Definícia 2.2 Nech P = (I, SOL, m, c) je optimalizačný problém. Jazyk P d = {(x, k) x I, m (x) k} kde je alebo podľa typu úlohy, sa nazýva jazyk prislúchajúci problému P. optimalizačný problém prislúchajúci jazyk 2.1 Triedy P o a NP o Našim cieľom je zaoberať sa triedami optimalizačných problémov, ktoré zodpovedajú triedam P a NP definovaným pre rozhodovacie problémy. Keďže chceme zachytiť zložitosť optimalizácie, a nie zložitosť zisťovania korektnosti vstupu, budeme 9
10 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY vyžadovať, aby vstupné inštancie boli jednoducho rozoznateľné, t.j. trieda P o trieda NP o Karpova redukovateľnosť I P P (2.1) Zároveň chceme, aby všetky prípustné riešenia boli polynomiálne veľké 1, t.j. polynóm q( ) x I P y SOL P (x) : y q( x ) (2.2) Tretia prirodzená požiadavka je, aby účelová funkcia bola vypočítateľná v polynomiálnom čase. Navrhnúť triedu zodpovedajúcu triede P je priamočiare: Definícia 2.3 Trieda P o je trieda optimalizačných problémov (I, SOL, m, c), ktoré spĺňajú (2.1), (2.2), a navyše existuje deterministický Turingov stroj, ktorý v polynomiálnom čase vypočíta 2 pre každé x I hodnotu m (x) a nejaké y SOL (x). Ostáva teda otázka, čo je ekvivalent triedy NP pre optimalizačné problémy. Budeme požadovať, aby to boli práve tie problémy, ktorých rozhodovacie verzie tvoria triedu NP, teda problémy, pre ktoré vieme pre daný vstup x a hodnotu k nedeterministicky v polynomiálnom čase povedať, či existuje riešenie s hodnotou aspoň (resp. najviac) k. Definícia 2.4 Trieda NP o je trieda optimalizačných problémov (I, SOL, m, c), ktoré spĺňajú (2.1), (2.2), a navyše existuje deterministický Turingov stroj, ktorý pre dané x I a y také, že y q( x ), v polynomiálnom čase zistí, či y SOL(x). Keďže rozhodovacie problémy sú špeciálnym prípadom optimalizačných, zjavne NP NP o. Ľahko vidno nasledovné tvrdenie: Tvrdenie 2.1 Nech P je optimalizačný problém taký, že P NP o. Potom prislúchajúci jazyk P d NP. 2.2 Redukovateľnosť Prv než pokročíme v našich úvahách, je namieste venovať sa pojmu redukovateľnosti. Našim cieľom bude porovnávať problémy z hľadiska ich ťažkosti, resp. vybrať najťažšie problémy z danej triedy. Pri rozhodovacích problémoch sme používali pojem Karpovej (tzv. many-one) redukcie. Keďže pri rozhodovacích problémoch existuje prirodzená bijekcia medzi problémom a jazykom tých vstupných inštancií, na ktorých je výstupom true, budeme v ďalšom často stotožňovať rozhodovací problém a jemu prislúchajúci jazyk, a pojem redukovateľnosti môžeme definovať na jazykoch Definícia 2.5 Jazyk A je polynomiálne redukovateľný na jazyk B, čo budeme označovať A p m B, ak existuje funkcia f počítaná deterministickým Turingovým strojom v polynomiálnom čase taká, že x A f(x) B. Ak A p m B a zároveň B p m A, budeme písať A p m B. Takto definovaná redukovateľnosť sa nedá priamočiaro použiť na optimalizačné problémy. Jedna cesta je definovať redukovateľnosť optimalizačných problémov pomocou ich prislúchajúcich jazykov. Existuje však aj iný pojem redukovateľnosti, ktorý sa dá priamočiaro použiť aj pre optimalizačné problémy. Táto redukovateľnosť sa označuje ako výpočtová, resp. Turingova redukovateľnosť a využíva pojem Turingových strojov s pomocou 3.
2.3. VZŤAH MEDZI NP A NP O 11 Turingov stroj s pomocou Definícia 2.6 Mech g : Σ Σ je ľubovoľná funkcia. Turingov stroj M s pomocou g, označovaný M(g) je Turingov stroj so špeciálnou pomocnou páskou a špeciálnymi stavmi q? a q!. Ak v nejakom kroku výpočtu je stroj v stave q? a na pomocnej páske je napísané slovo w, stroj prejde do stavu q! a na pomocnej páske bude napísané slovo g(w). Neformálne povedané, problém P 1 je výpočtovo redukovateľný na problém P 2, ak sa P 1 dá vyriešiť s pomocou podprogramu, ktorý rieši P 2. Definícia 2.7 Nech P 1 = (I 1, SOL 1, m 1, c 1 ), P 2 = (I 2, SOL 2, m 2, c 2 ) sú optimalizačné problémy. Nech g je funkcia, pre ktorú platí x : g(x) SOL 2(x). Problém P 1 je polynomiálne výpočtovo redukovateľný na problém P 2, označované P 1 p T P 2, ak existuje deterministický Turingov stroj s pomocou g, ktorý v polynomiálnom čase rieši problém P 1. Ak A p T B a zároveň B p T A, budeme písať A p T B. Ako sme spomínali, rozhodovacie problémy sú špeciálnym prípadom optimalizačných, preto aj Karpova redukovateľnosť je špeciálnym prípadom Turingovej redukovateľnosti, kedy sa pomoc žiada iba jedenkrát, a výstup z pomocnej pásky je výstupom celého výpočtu. Na druhej strane, Turingova redukovateľnosť sa zdá byť silnejšia ako Karpova: zjavne každý problém v co-np je Turingovo redukovateľný na každý NP-úplný problém, na druhej strane problémy z co-np NP (ak existujú), nemajú Karpovu redukciu na žiaden problém z NP 4. S pomocou Turingovej redukcie môžme vybrať najťažšie problémy triedy NP o : Definícia 2.8 Optimalizačný problém P = (I, SOL, m, c) je NP o -ťažký, ak pre každý optimalizačný porblém P platí P p T P. Ak navyše P NP o, hovoríme, že P je NP o -úplný. 2.3 Vzťah medzi NP a NP o Najprv sa zamerajme na vzťahy medzi rôznymi variantmi toho istého problému. Veta 2.2 Nech P NP o. Potom P d p T P e p T P c. Ak navyše P d je NP-úplný, potom P c p T P d. Dôkaz: Zjavne P d p T P e p T P c. Ukážeme teraz, že P e p T P d. Podľa definície NP o je m vypočítateľná v polynomiálnom čase 5 a každé prípustné riešenie y SOL(x) je polynomiálne veľké (t.j. y ( x )). Teda maximálna hodnota m(x, y) pre dané x je zhora ohraničená 2 p( x ) pre nejaký polynóm p. Preto ak máme k dispozícii podprogram pre P d, môžme pomocou binárneho vyhľadávania vyriešiť problém P e v čase log 2 p( x ) = p( x ). Nech teraz P d je NP-úplný. Ukážeme, ako riešiť P c s podprogramom P d. Modifikujme problém P tak, že do ceny riešenia zakódujeme aj samotné riešenie. Formálne, zostrojme problém P, ktorý bude identický s problémom P, ale účelová funkcia bude m P (x, y) = 2 q( x )+1 m P (x, y) + λ(y) Turingova redukovateľnosť NP o -úplnosť 1 ináč by už samotné zapísanie riešenia na pásku Turingovho stroja vyžadovalo viac ako polynomiálne veľa operácií 2 Počítanie deterministického Turingovho stroja A môžme definovať nasledovne: stroj A počíta na vstupnom slove w prirodzené číslo x, ak zastaví v konfigurácii, v ktorej je na začiatku pásky zapísané x v binárnom zápise a zvyšok pásky je prázdny. 3 oracle Turing machines 4 pretože NP je uzavretá na Karpovu redukovateľnosť 5 vzhľadom na veľkosť vstupu
12 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY kde q je polynóm ohraničujúci dĺžku riešenia a λ(y) je poradové číslo reťazca y v lexikografickom usporiadaní. Zjavne problém P má jednoznačné riešenie, a navyše m P je zjemnením m P v tom zmysle, že m P (x, y 1 ) > m P (x, y 2 ) m P (x, y 1 ) m P(x, y 2 ) Preto optimálne riešenie P je aj optimálnym riešením P. Navyše, z ceny optimálneho riešenia P vieme optimálne riešenie P jednoducho získať. S využitím prvej časti vety a NP-úplnosti P d preto dostávame P c p T P e p T P d P m P d Ako sme spomínali, našim cieľom je skúmať riešiteľnosť problémov, o ktorých sme presvedčení, že sú ťažké, t.j. problémov, ktorých rozhodovacie verzie sú NPúplné. Keďže ale Turingova redukovateľnosť je silnejšia ako Karpova, mohla by nastať situácia, že problém, ktorého rozhodovacia verzia je NP-úplná (v zmysle Karpovej redukovateľnosti), a teda je považovaný za ťažký, je Turingovo redukovateľný na ľahký problém. Ako vidno z nasledujúcej vety, takáto situácia nenastáva a ťažké problémy ostávajú ťažkými aj v zmysle Turingovej redukovateľnosti. Veta 2.3 Ak P d je NP-úplný, tak P c je NP o -ťažký. Dôkaz: Treba ukázať, že pre ľubovoľný P c NP o platí P c p T P c. Podobne ako v dôkaze Vety 2.2 zostrojíme problém P pre ktorý platí P c p T P e. Podľa Vety 2.2 potom P e p T P d. Pretože P d je NP-úplný, P d p m P d. Takže máme P c p T P e p T P d p m P d p T P c Prečo neplatí, že P c je NP o -úplný? dôvod je ten, že nemusí byť v NP o : zoberme ľubovoľný minimalizačný NP o -úplný problém a doplňme ku každému vstupu x jedno prípustné riešenie y x SOL(x) exponenciálnej dĺžky. Dodefinujme m(x, y x ) =. Zjavne pre takto upravený problém P d je NP-úplný, pretože dodané prípustné riešenia nikdy nie sú optimálne. Úvahy v tejto kapitole môžme zhrnúť takto: Optimalizačné problémy z triedy NP o, ktorých rozhodovacie verzie sú NP-úplné (t.j. tie, ktoré nás budú zaujímať v tomto texte) sú NP o -ťažké a všetky ich varianty (konštrukčná, vyhodnocovacia, rozhodovacia) sú navzájom Turingovo ekvivalentné. Na záver posledné pozorovanie: Dôsledok 2.4 Ak P NP, potom P o NP o. Dôkaz: Nech P o = NP o. Zoberme problém P NP o taký, že P d je NP-úplný. Potom P c je NP o -ťažký, takže špeciálne každý problém P NP je P p T P c. Lenže pre P c existuje deterministický Turingov stroj, ktorý ho počíta, lebo P o = NP o. Takže máme P = NP. 2.4 Aproximácia aproximačný algoritmus Definícia 2.9 Majme daný optimalizačný problém P = (I, SOL, m, c). Algoritmus A je aproximačný algoritmus pre problém P, ak pre každú vstupnú inštanciu x I platí A(x) SOL(x).
2.4. APROXIMÁCIA 13 Z hľadiska tejto definície je aproximačný algoritmus ľubovoľný algoritmus, ktorý pre daný vstup nájde akékoľvek prípustné riešenie. Pochopiteľne, toto samo osebe nezodpovedá intuitívnej predstave aproximácie cieľom je mať algoritmy, ktoré vrátia riešenie dostatočne blízko optimálnemu. Preto meradlom kvality aproximačných algoritmov je, ako ďaleko je hodnota dosiahnutého riešenia od optimálnej hodnoty. V nasledujúcej časti sa pozrieme do sveta ťažkých problémov (takých, ktorých rozhodovacie verzie sú NP-úplné) a predstavíme v rámci nich hierarchiu podľa kvality aproximácie. 2.4.1 Absolútna aproximácia Definícia 2.10 Majme daný optimalizačný problém P, inštanciu x I a riešenie y SOL(x). Absolútnou chybou y nazveme D(x, y) = m (x) m(x, y) Aproximačný algoritmus A nazveme k-absolútny, ak existuje konštanta k taká, že x I platí D (x, A(x)) k. Je iba veľmi málo problémov, pre ktoré existuje absolútna aproximácia. Príklad 2.1 Uvažujme problém minimálneho vrcholového farbenia planárneho grafu. Z vety o 4 farbách vyplýva, že optimálne riešenie je najviac 4. Z Haewoodovej vety dostávame polynomiálny algoritmus, ktorý nájde 5-farbenie. Uvažujme teraz známy problém batohu : z daného zoznamu vecí treba vybrať niekoľko do batoha tak, aby cena vybratých vecí bola čo najväčšia. Definícia 2.11 Na vstupe je dané prirodzené číslo b a n vecí, pričom i-ta vec má objem v i b a cenu c i. Úlohou je nájsť množinu I {1,..., n} takú, že i I v i b a zároveň i I c i je maximálna možná. Problém Knapsack je NP-úplný. Veta 2.5 Ak P NP, potom pre problém Knapsack neexisuje absolútny algoritmus. Dôkaz: Sporom. Nech existuje algoritmus A, pre ktorý D(x, y) < k. Ukážeme, že potom existuje polynomiálny algoritmus pre Knapsack. Pre daný vstup X s cenami c i a objemami v i vyrobíme nový vstup X s cenami c i a objamami v i := (k + 1)v i a spustíme A na vstupe V. Keďže v i sú násobky k + 1, aj cena ľubovoľného riešenia je násobok k + 1, a teda A dá optimálne riešenie vstupu X. Zjavne ale toto riešenie je aj optimálnym riešením pre X. 2.4.2 Relatívna aproximácia trieda APX Keďže teda sú problémy, pre ktoré neexistuje algoritmus s konštantnou chybou, zvoľnime svoje požiadavky tak, že budeme uvažovať chybu normovanú podľa výslednej hodnoty: Definícia 2.12 Majme daný optimalizačný problém P, inštanciu x I a riešenie y SOL(x). Relatívnou chybou y nazveme E(x, y) = D(x, y) max{m(x, y), m (x)} Aproximačný algoritmus A nazveme ε-relatívny, ak existuje konštanta ε taká, že x I platí E (x, A(x)) ε. absolútna aproximácia farbenie planárneho grafu Knapsack relatívna aproximácia
14 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY trieda APX 2-aproximačný knapsack Namiesto ε-realtívny aproximačný algoritmus budeme skrátene hovoriť ε-aproximačný algoritmus. Podľa predchádzajúcej definície je relatívna chyba pre minimalizačné problémy a pre maximalizačné problémy E(x, y) = m(x, y) m (x) = 1 m (x) m(x, y) m(x, y) E(x, y) = m (x) m(x, y) m(x, y) m = 1 (x) m (x) Namiesto relatívnej chyby budeme často pracovať s pomerom R(x, y) = m(x,y) m (x) (pre minimalizačné problémy), resp. R(x, y) = m (x) m(x,y) (pre maximalizačné problémy). Túto hodnotu, t.j. 1 R(x, y) = 1 E(x, y) budeme označovať aproximačný pomer a udáva, koľkokrát je výstup algoritmu horší ako optimálne riešenie. Algoritmus, ktorý má na každom vstupe aproximačný pomer najviac r budeme volať r-aproximačný algoritmus 6. Definícia 2.13 Trieda APX je trieda problémov, pre ktoré existuje polynomiálny r-aproximačný algoritmus pre nejakú konštantu r. Príklad 2.2 Uvažujme problém Kapscak. Na začiatok si vezmime jeho racionálnu verziu, t.j. verziu, pri ktorej je možné jednotlivé veci deliť, takže je možné do batoha dať ľubovoľnú časť z danej veci 7. V tomto prípade je riešenie jednoduché stačí utriediť veci podľa relatívnej ceny (t.j. podľa pomeru c i /v i ) a postupovať greedy spôsobom, t.j. brať zaradom veci kým sa zmestia do batoha a z prvej veci ktorá sa nezmestí zobrať príslušnú časť tak, aby sa batoh zaplnil. 8 Skúsme teraz použiť ten istý greedy algoritmus na celočíselnú verziu: utriedime si veci podľa relatívnej ceny, a kým sa zmestia, pridávame ich do batoha. Vieme ohraničiť aproximačný pomer tohoto algoritmu konštantou? Odpoveď je záporná: pre ľubovoľné r vieme zostrojiť vstup, na ktorom je greedy algoritmus aspoň r-krát horší ako optimum. Vstup bude mať n vecí, pričom veľkosť batoha bude b = rn. Prvých n 1 vecí bude mať objem aj cenu 1, n-tá vec bude mať objem v n = b a cenu c n = b 1. Optimálne riešenie má cenu rn 1, ale greedy algoritmus naplní batoh n 1 vecami s jednotkovou cenou, taže vráti riešenie s cenou n 1. Upravme teda greedy algoritmus tak, že ak je výsledné riešenie menšie ako najcennejšia vec, algoritmus vráti najdrahšiu vec (Algoritmus 1) Ukážeme, že takto upravený algoritmus je 2-aproximačný, t.j. že pre každý vstup je pomer m /m < 2, kde m označuje cenu optimálneho riešenia a m cenu riešenia nájdeného algoritmom. Nech j je index prvej nevybratej veci; označme c j = j 1 k=1 c k. Ako sme už ukázali, optimálne riešenie racionálnej verzie má hodnotu c j +αc j pre nejaké 0 α < 1. Keďže ale racionálna verzia obsahuje celočíselnú verziu ako špeciálny prípad, platí m c j + αc j c j + c j. Rozlíšime 2 prípady: 6 Keďže relatívna chyba ε je vždy 0 ε 1, kým aproximačný pomer r je vždy r 1, je pojem x-aproximačný algoritmus dobre definovaný algoritmus s konštantnou relatívnou chybou má aj konštantný aproximačný pomer a navyše je z kontextu zrejmé, či x označuje relatívnu chybu alebo aproximačný pomer. 7 formálne povedané, na vstupe je dané prirodzené číslo b a n vecí, pričom i-ta vec má objem v i a cenu c i. Úlohou je nájsť vektor x = (x 1,..., x n), kde 0 x i 1 taký, že n i=1 x iv i b a zároveň n i=1 x ic i je maximálna možná. 8 Prečo je tento algoritmus optimálny? Zoberme ľubovoľné iné riešenie x. Potom existuje kus nejakej veci, nazvime ho A, ktorý je vybratý greedy algoritmom a nevybratý v x. Lenže z toho, ako bol greedy algoritmus konštruovaný vyplýva, že miesto, ktoré zaberalo A v greedy riešení je v x zabraté nejakou lacnejšou vecou B. Takže keď vymeníme B za A v x, dostaneme lepšie riešenie.
2.4. APROXIMÁCIA 15 Algoritmus 1 2-aproximačný algoritmus pre problém Knapsack 1: vstup: číslo b a n vecí x 1,..., x n s objemami v i b a cenami c i 2: majme veci utriedené podľa c i /v i 3: nech x max je vec s maximálnou cenou 4: I := ; i := 1 5: while j I v j < b do 6: I := I {x i }; i := i + 1 7: end while 8: if j I c j > c max then vráť I else vráť {x max } Ak c j c j c max, máme m 2c max 2m Ak c j > c j, máme m < 2c j 2m 2.4.3 Lepšie ako APX: PTAS a FPTAS Je trieda APX dobrým popisom problémov, ktoré sú efektívne aproximovateľné? Nie celkom, pretože príslušnosť do triedy APX zaručuje iba existenciu konštanty, ohraničujúcej aproximačný pomer. Táto konštanta však môže byť ľubovoľne veľká, čo môže znamenať, že príslušný algoritmus je pre praktické účely nepoužiteľný. Hodnotnejší výsledok je, ak existuje r-aproximačný algoritmus pre každé r > 1: Definícia 2.14 Trieda PTAS 9 zahŕňa problémy, pre ktoré existuje aproximačná schéma. Aproximačná schéma je algoritmus A, ktorý pre ľubovoľný vstup x a ľubovoľné r > 1 vráti riešenie s relatívnou chybou E(x, A(x, r)) 1 1 r v čase polynomiálnom od veľkosti vstupu x. Príkladom problému, pre ktorý existuje PTAS je problém rovnomerného rozdelenia množiny vecí: Definícia 2.15 Na vstupe je daných n prirodzených čísel x = (x 1,..., x n ). Úlohou je nájsť rozklad Y množiny {1,..., n} na dve dizjunktné množiny Y 1, Y 2 tak, aby cena { } m(x, Y) = max x i, x i i Y 1 i Y 2 bola najmenšia možná. Príklad 2.3 Bez ujmy na všeobecnosti predpokladajme, že r < 2 (inak stačí vrátiť prázdnu množinu). Idea algoritmu spočíva v tom, že veľké čísla sú dôležitejšie, pretože chyba pri ich umiestnení sa ťažšie napráva. Preto sa prvých k najväčších čísel snažíme rozdeliť presne. Zyšné čísla doplníme jednoduchou greedy metódou dúfajúc, že sa tým veľa nepokazí. Greedy metóda spočíva v tom, že postupne prechádzame cez čísla od najväčšieho po najmenšie a pridávame ich k tej množine, ktorá je momentálne menšia. Číslo k treba zvoliť tak, aby sa optimálne riešenie pre prvých k čísel dalo nájsť v polynomiálnom čase. trieda PTAS Min-Partition PTAS pre Min- Partition 9 polynomial-time approximation scheme
16 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY trieda FPTAS Algoritmus 2 PTAS pre problém Min-Partition 1: vstup: čísla x = (x 1,..., x n ), utriedené zostupne, a 1 < r < 2 2 r 2: k := r 1 3: nájdi optimálne riešenie Y 1, Y 2 pre x = (x 1,..., x k ) 4: for i = k + 1 to n do 5: pridaj i do množiny Y k s menšou hodnotou 6: end for j Y k x j Krok 3 sa dá riešiť prehľadaním všetkých možností v čase O(2 k ), čo je pre konštantné r konštanta, preto celý algoritmus pracuje v polynomiálnom čase. Ostáva nám ukázať, že je r-aproximačný. Zaveďme najprv niekoľko označení. Nech W 1 = j Y 1 x j a W 2 = j Y 2 x j. Bez ujmy na všeobecnosti predpokladajme W 1 > W 2. Ďalej nech L = (W 1 + W 2 )/2, t.j. L je dolné ohraničenie optimálneho riešenia pre prípad, že sa množina dá rozdeliť na dve presne rovnaké časti. Nech h je index prvku, ktorý bol posledne pridaný do Y. Ak h < k ľahko vidno, že algoritmus vrátil optimálne riešenie: W 1 je totiž optimálna hodnota pre podporoblém daného vstupu a preto je dolným ohraničením každého riešenia celého vstupu. Nech teda h k. Zjavne W 1 x h W 2, pretože v okamihu, keď sa položil prvok h do Y 1 bola Y 1 menšia ako Y 2 a potom už pribúdali prvky iba do Y 2. Teda platí Odhadnime teraz aproximačný pomer: W 1 m (x) W 1 L L + xh 2 L W 1 x h 2 L = 1 + x h 2L 1 + x h (k + 1) r Predposledná nerovnosť vyplýva z nasledujúceho pozorovania: keďže h k, existuje aspoň k + 1 prvkov veľkosti aspoň x h. Lenže 2L je súče všetkých prvkov, preto 2L x h (k + 1). Dá sa povedať, že problémy v triede PTAS vieme aproximovať s ľubovoľnou presnosťou v polynomiálnom čase. Má to však jeden háčik. Pre ľubovoľnú konštantnú presnosť síce existuje polynomiálny algoritmus, ale stupeň tohto polynómu môže s rastúcou presnosťou exponenciálne rásť, takže za istou hranicou presnosti už aproximácia nie je efektívne vypočítateľná. Preto pojem PTAS zjemníme nasledovne Definícia 2.16 Trieda FPTAS 10 zahŕňa problémy, pre ktoré existuje polynomiálna aproximačná schéma, t.j algoritmus A, ktorý pre ľubovoľný vstup x a ľubovoľné r > 1 vráti riešenie s relatívnou chybou E(x, A(x, r)) 1 1 r v čase polynomiálnom od veľkosti vstupu x a od hodnoty 1 x h r 1. FPTAS Knapsack pre Príklad 2.4 Vezmime si opäť problém batoha. Naším cieľom je ukázať, že preňho existuje FPTAS. Uvažujme nasledujúci algoritmus, ktorý rieši problém batoha optimálne pomocou dynamického programovania. Majme dvojrozmernú tabuľku M, ktorej políčko M[k, p] {1,..., k} obsahuje výber spomedzi prvých k vecí, ktorý 10 fully polynomial-time approximation scheme
2.4. APROXIMÁCIA 17 má cenu práve p 11, t.j. vyžadujeme, aby i M[k,p] v i b a i M[k,p] c i = p. Prvý stĺpec tabuľky M[1, p] sa inicializuje ľahko je to buď alebo {1}, ak p = c 1. Ďalšie stĺpce sa vypĺňajú podľa nasledovného vzorca (S[k, p] je celkový objem vecí v políčku M[k, p] alebo ak M[k, p] = ): M[k 1, p c k ] {k} ak p c k a M[k 1, p c k ] a S[k 1, p c M[k, p] = k ] + v k b a S[k 1, p c k ] + v k S[k 1, p] M[k 1, p] inak Zjavne pre nájdenie optimálneho riešenia stačí prehľadať posledný stĺpec tabuľky M[n, p] a navyše celý algoritmus pracuje v čase polynomiálnom od rozmerov tabuľky. Pravda, tieto rozmery nie sú polynomiálne od veľkosti vstupu: počet riadkov tabuľky zodpovedá maximálnej možnej cene, t.j. n i=1 c i, ktorá môže byť exponenciálna od veľkosti vstupu 12. Pre naše účely využijeme tento algoritmus; aby sme však dosiahli polynomiálny čas, spustíme ho na vstupe s naškálovanými cenami (viď Algoritmus 3) Algoritmus 3 FPTAS pre problém Knapsack 1: T := cmax(r 1) n 2: naškáluj vstup tak, že c i := c i 3: nájdi riešenie dynamickým programovaním T Akej veľkej chyby sme sa dopustili? Optimálne riešenie by sa zrejme nezmenilo, keby sme naškálované ceny prenásobili hodnotou T. Zoberme si takto naškálovaný a prenásobený problém. Každá vec je môže byť o niečo lacnejšia, ako v pôvodnom vstupe, avšak najviac o T. Pretože každé riešenie pôvodného problému (t.j. každý výber vecí, ktorý sa zmestí do batoha) je zároveň riešením modifikovaného problému a naopak 13, dynamickým programovaním najdeme riešenie s cenou m, pre ktorú m m nt, kde m je cena optimálneho riešenia. Preto dostaneme a odtiaľ m m m m nt c max m nt + c max r Navyše počet riadkov tabuľky je najviac nc max T c max n2 r 1 preto celý algoritmus pracuje v čase polynomiálnom od n a 1/(r 1), a teda je FPTAS. 2.4.4 Horšie ako APX V predchádzajúcej časti sme sa dopracovali k triede PTAS ako ku kandidátovi na definíciu efektívne riešiteľných problémov. V tejto časti si ukážeme naopak príklady 11 ak taký výber neexistuje, je M[k, p] =, ak ich existuje viac, vyberieme ten s minimálnym objemom 12 takýto algoritmus sa nazýva pseudopolynomiálny algoritmus 13 nemenili sme objemy, iba ceny
18 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY Min-Set- Cover problémov, ktoré sú aproximovateľné, ale aproximačný pomer nie je konštantný, ako vyžaduje definícia triedy APX, ale závisí od veľkosti vstupu. Tak, ako sme v triede APX hovorili o r-aproximačných algoritmoch pre nejakú konštantu r, môžme prirodzeným spôsobom rozšíriť našu definíciu aproximovateľnosti a hovoriť o f(n)- aproximovateľných, či O(f(n))-aproximovateľných problémoch. Ukážeme si teraz dva príklady takýchto problémov. Prvým príkladom je ( ln n + 1)-aproximačný algoritmus pre problém Min-Set-Cover. Problém Min-Set-Cover Definícia 2.17 Na vstupe je daná množina S a množina m množín C = {C 1,..., C m }, pričom C i S. Úlohou je vybrať množinu C C tak, aby pokrývala všetky prvky S, t.j. aby i S C C : i C, a zároveň aby C bola minimálna. Nájdeme ( ln n +1)-aproximačný algoritmus pre Min-Set-Cover, kde n = S. Uvažujme greedy algoritmus, ktorý vždy vyberie najväčšiu množinu a jej prvky odstáni (viď. Algoritmus 4) Algoritmus 4 ( ln n + 1)-aproximačný algoritmus pre Min-Set-Cover 1: vstup: C = {C 1,..., C m }, C i S 2: U := S, C =, C i C : X i := C i 3: while U do 4: nech X j je najväčšia množina spomedzi X 1,..., X m 5: C := C {C j } 6: U := U X j 7: X i : X i := X i X j 8: end while 9: return C Ukážeme, že Algoritmus 4 je ( ln n + 1)-aproximačný. *** to do: tento dôkaz je zbytočne technický, treba ho nahradiť jednoduchším *** Nech C je optimálne riešenie a C je riešenie, ktoré vráti Algoritmus 4. Stačí nám ukázať nasledujúce tvrdenie: C i C H( C i ) C (2.3) kde H(n) je n-té harmonické číslo. Z (2.3) totiž priamo vyplýva, že C C i C H( C i ) C H(n) ( ln n + 1) C Nech a 1, a 2,..., a C sú indexy množín v poradí, v akom ich Algoritmus 4 vyberal. Označme C j i zvyšok z množiny C i po j 1 krokoch, t.j. pred vybratím množiny C aj (platí Ci 1 = C i). Pozrime sa teraz na prvky nejakej množiny C i, ktoré boli prvýkrát pokryté v j-tom kroku, t.j. prvky C i Ca j j. Z obrázka 2.1 je zrejmé, že C i C j a j = C j i Cj a j = C j i Cj+1 i (2.4) Tvrdenie (2.3) dokážeme v dvoch krokoch. Najprv dokážeme, že i : H( C i ) C j=1 C j i Cj a j C j a j (2.5)
2.4. APROXIMÁCIA 19 a potom C j i 000000000 111111111 00000000000 11111111111 0000000000000 1111111111111 000000000 111111111 000000000000000 111111111111111 00000000000 11111111111 000000000000000 111111111111111 000000000000 111111111111 000000000000000 111111111111111 0000000000000 1111111111111 000000000000000 111111111111111 00000000000000 11111111111111 0000000000000000 1111111111111111 00000000000000 11111111111111 000000000000000 111111111111111 00000000000000 11111111111111 000000000000000 111111111111111 00000000000000 11111111111111 000000000000000 111111111111111 00000000000000 11111111111111 0000000000000 1111111111111 0000000000000 1111111111111 0000000000000 1111111111111000000000000 00000000000 11111111111 00000000000 11111111111 0000000 1111111 0000000 1111111 C j a j Obr. 2.1: Časť množiny C i, ktorú prvýkrát pokryla množina C aj. pokrytie C : C C i C j=1 C j i Cj a j Ca j C (2.6) j dôkaz (2.5) Zvoľme pevné i. Nech l i je maximálny taký index, že C li i > 0. Pretože Cj a j bola Algoritmom 4 vybratá ako najväčšia množina,podľa (2.4) máme C C j i Cj a j C j i Ca j = Cj+1 j Ca j j j=1 C j=1 Vnútornú sumu ďalej upravíme C j i k= C j+1 i +1 1 C j i = Preto dostávame C C j i Cj a j Ca j j j=1 C j i Cj+1 i l i k=1 i 1 C j i l i j=1 C j i Cj+1 i k=1 C j i Cj+1 i C j i = C j+1 i j=1 dôkaz (2.6) Ľavú stranu upravíme: [ ] H( C j i ) H( Cj+1 i ) = H ( Ci 1 ) ( H C C i C j=1 C l i C j i j=1 k= C j+1 i +1 1 ) ( ( C + k = H j i H C li+1 i C j i Cj a j 1 Ca j = j j=1 Ca j C j i j Cj a j C i C 1 C j i C j+1 i ) = H ( C 1 i ) Zoberme si prvky z množiny Ca j j. Pretože C je pokrytie, každý prvok z Ca j j je zahrnutý aspoň v jednej množine C i C. Preto C j=1 1 Ca j C j i j Cj a j C i C C j=1 C j a j C j a j = C ) Problém vrcholového farbenia Druhým príkladom je O(n/ log n)-aproximačný algoritmus pre problém vrcholového farbenia grafov.
20 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY Uvažujme vrcholovo k-zafarbiteľný graf s n vrcholmi. Nájdeme algoritmus, ktorý 3n ho v polynomiálnom čase ofarbí použitím najviac log k n farieb. Idea algoritmu je jednoduchá: nájdeme čo najväčšiu nezávislú množinu vrcholov, ofarbíme ich jednou farbou, odstránime ich z grafu a celý proces opakujeme. Na nájdenie nezávislej množiny použijeme jednoduchý greedy algoritmus: vyberme vrchol minimálneho stupňa, ofarbime ho a odstráňme ho aj so všetkými susedmi z grafu. ( Algoritmus 5 O n log k n ) -aproximačný algoritmus pre vrcholové farbenie 1: vstup: graf G = (V, E) 2: f := 0, U := V 3: while U 0 do 4: f := f + 1, W := U 5: while W 0 do 6: nech H je graf indukovaný W, a v je vrchol s minimálnym stupňom v H 7: ofarbi v farbou f 8: W := W \ {v} \ Neigh H (v) 9: end while 10: end while Najprv ukážeme, že pre každú farbu i sa vo vnútornom while cykle ofarbí aspoň log k W vrcholov farbou i, t.j. že vnútorný cyklus urobí aspoň log k W iterácií. Keďže H je k-zafarbiteľný 14, určite má nejakú nezávislú množinu s aspoň W /k vrcholmi 15. Každý vrchol tejto množiny má stupeň najviac W W /k, preto vieme, že v má stupeň najviac W k 1 k, a teda na konci iterácie ostane aspoň W W k 1 k = W /k vrcholov. Takže počet iterácií vnútorného cyklu je aspoň log k W. 3n Teraz ukážeme, že celý algoritmus potrebuje najviac log k n farieb. Zoberme si množinu U na začiatku vnútornej iterácie. Ak U n log k n môžme na každý vrchol rátať samostatnú farbu. Nech teda U > n Potom ale log k n ( ) n ( ) 1 log k U log k > log log k n k n = 2 log k n Preto vieme, že vo vnútornom cykle zafarbíme aspoň 1 2 log k n vrcholov, a teda bude 2n najviac iterácií vonkajšieho cyklu. log k n 2.4.5 Asymptotická aproximácia Skúmajme najprv aproximačné algoritmy pre problém Bin-Packing. Bin-Packing Definícia 2.18 Na vstupe je daných n racionálnych čísel a 1,..., a n, a i (0, 1. Cieľom je rozdeliť ich do množín B 1,..., B m tak, aby i B i = {a 1,..., a n }, pre každé B i platilo a j B i a j 1 a počet množín m bol minimálny. Jednoduchý greedy algoritmus pracuje tak, že sekvenčne spracováva veci zo vstupu a umiestňuje ich do krabice. Ak sa uvažovaná vec do aktuálnej krabice nezmestí, zoberie novú krabicu. Ľahko vidno, že takýto algoritmus je 2-aproximačný. Keď totiž označíme A = n i=1 a i, zjavne m A. Na druhej strane m 2A : uvažujme dve po sebe idúce krabice v greedy riešení. Algoritmus vybral druhú krabicu, pretože aktuálna vec sa do tej prvej už nezmestila. Preto súčet vecí v dvoch po sebe idúcich krabiciach je aspoň 1. 14 lebo pôvodný graf G bol tiež 15 množina vrcholov jednej farby z optimálneho ofarbenia
2.4. APROXIMÁCIA 21 Rovnako ľahko vidieť, že aproximačný pomer tohto algoritmu sa zlepšiť nedá. Zoberme postupnosť 4n vecí s objemami 1/2, 1/2n, 1/2, 1/2n,..., 1/2, 1/2n. Optimálne riešenie je použiť n krabíc na 2n vecí veľkosti 1/2 a jednu krabicu na zvyšné veci. Algoritmus ale použije 2n krabíc. *** to do: FirstFit: m 1.7m + 2 *** Výhodou uvedených algoritmov je, že sú tzv. online *** to do: online algoritmy *** Ak nepotrebujeme, aby algoritmus pracoval online, môžme algoritmus vylepšiť (Algoritmus 6). Algoritmus 6 FirstFit Decreasing pre Bin Packing 1: vstup: n racionálnych čísel a 1,..., a n, a i (0, 1 2: výstup: rozdelenie čísel do m množín B 1,..., B m 3: utrieď čísla tak, aby t 1 t 2 t n 4: for i := 1,..., n do 5: priraď a i do prvej množiny B j, do ktorej sa zmestí 6: ak taká neexistuje, pridaj novú 7: end for Veta 2.6 Algoritmus 6 vráti pre každý vstup riešenie, pre ktoré m 1.5m + 1. Dôkaz: Veci, pre ktoré a i < 1/3 nazvime malé, ostatné veľké. Ak v riešení algoritmu existuje krabica, ktorá obsahuje iba malé veci, potom najviac jedna (posledná) krabica je zaplnená do menej ako 2/3. Ak je v každej krabici aspoň jedna veľká vec, uvažujme vstup bez malých vecí a ukážeme, že algoritmus dá optimálne riešenie. Zjavne veci väčšie ako 2/3 musia byť v samostatnej krabici, a teda ich netreba ďalej uvažovať. Naviac, v každej krabici sú najviac dve veci. *** to do: podrobnejšie *** Poznámka: tesný. Lepšou analýzou sa dá ukázať m 11/9m + 4, a tento odhad je Podľa formálnej definície aproximačného algoritmu, Algoritmus 6 nie je 1.5- aproximačný. S rastúcou hodnotou optimálneho riešenia sa ale jeho aproximačný pomer blíži k 1.5. Preto sa zvykne zavádzať pojem asymptotickej aproximácie: Definícia 2.19 Majme daný optimalizačný problém P, inštanciu x I a riešenie y SOL(x). Aproximačný algoritmus A nazveme asymptoicky r-aproximačný, ak existú konštanty r a c také, že x I platí E (x, A(x)) (r 1)m (x)+c rm (x)+c. Inými slovami, asymptoticky ( r-aproximačný ) algoritmus je algoritmus, ktorého 1 aproximačný pomer je r + O m (x). Posobne sa dá definovať asymptotický PTAS ako schéma, v ktorej pre akžé r existuje asymptoticky r-aproximačný algoritmus. Predchádzajúci výsledok teda môžme interpertovať tak, že existuje asymptoticky 1.5-aproximačný algoritmus pre problém Bin Packing. Teraz dokážeme silnejšie tvrdenie, a síce, že pre problém Bin Packing existuje asymptotický PTAS. Intuitívne, najdôležitejšie je umiestniť veľké veci, lebo pri nich môžu vznikať veľké chyby. Náš algoritmus preto naprv zruší malé veci, vyrieši inštanciu so zostávajúcimi veľkými vecami, a potom malé veci vráti naspäť. Ako vyriešiť inštanciu s veľkými veciami? asymptotická aproximácia
22 KAPITOLA 2. OPTIMALIZAČNÉ PROBLÉMY
Kapitola 3 Techniky návrhu aproximačných algoritmov 3.1 Greedy algoritmy *** to do: greedy matroidy, matroid intersection *** Príkladom použitia greedy algoritmov bol 2-aproximačný algoritmus pre problém Knapcask. Iným príkladom je algoritmus na hľadanie maximálnej nezávislej množiny v grafe, t.j. množiny vrcholov, z ktorých žiadne dva nie sú spojené hranou: Definícia 3.1 Majme daný graf G = (V, E) cieľom je nájsť maximálnu množinu vrcholov V V tak, aby pre každú hranu e = (u, v) E platí u V alebo v V. Intuícia nám vraví, že zlé vrcholy sú také, ktoré majú veľký stupeň, pretože blokujú veľa iných vrcholov. Uvažujme teda nasledujúci greedy algoritmus (Algoritmus 7), ktorý sme už implicitne použili v Algoritme 5 na vrcholové farbenie: Algoritmus 7 Greedy algoritmus pre problém Max-Independent-Set 1: vstup: graf G = (V, E) 2: výstup: nezávislá množina V 3: V :=, U := V 4: while U do 5: nech x je vrchol s minimálnym stupňon z podgrafu indukovaného U 6: V := V {x} 7: U := U \ {x} 8: U := U \ Neigh(x) 9: end while Žiaľ, tento algoritmus nie je dobrý aproximačný algoritmus, ako ukazuje obrázok 3.1. Majme graf G, ktorý pozostáva z úplného grafu K n, nezávislej množiny I n a vrchola v tak, že každý vrchol z K n {v} je spojený hranou s každým vrcholom z I n. Pretože vrchol v má minimálny stupeň, Algoritmus 7 ho vyberie do nezávislej množiny. Lenže potom ľahko vidno, že nemôže pridať žiaden vrchol z I n a iba jeden vrchol z K n, t.j. vráti dvojprvkovú nezávislú množinu. Zjavne ale I n tvorí n-prvkovú nezávislú množinu, preto Algoritmus 7 nemá ohraničený aproximačný pomer. Napriek tomuto nepriazdnivému výsledku Algoritmus 7 celkom nezahodíme. Ukáže sa totiž, že funguje dobre na grafoch, ktoré sú riedke, t.j. majú málo hrán. Definícia 3.2 Majme graf G = (V, E). Potom číslo δ = E / V sa nazýva hustota grafu G. Max- Independent Set hustota grafu 23
24 KAPITOLA 3. TECHNIKY NÁVRHU APROXIMAČNÝCH ALGORITMOV K n I n Obr. 3.1: Greedy algoritmus pre problém Max-Independent-Set Ukážeme teraz, že Algoritmus 7 má ohraničený aproximačný pomer na grafoch s konštantnou hustotou. Veta 3.1 Majme daný graf G = (V, E), kde V = n, E = m a δ = m/n. Nech m G je veľkosť nezávislej množiny nájdenej Algoritmom 7. Potom m G n 2δ + 1 Dôkaz: Uvažujme iterácie while cyklu na riadku 4. V každej iterácii sa pridá jjeden vrchol do nezávislej množiny, preto počet iterácií je m G. V i-tej iterácii sa vyberie vrchol x i so stupňom d i a z grafu sa odstráni x i aj jeho d i susedov. Nakoniec sa odstránia všetky vrcholy, takže v m G (d i + 1) = n (3.1) i=1 Keďže x i mal minimálny stupeň, v i-tej iterácii sa odstráni aspoň 1 2 d i(d i +1) hrán 1. Pretože sme nemohli odstrániť viac hrán, ako ich v grafe pôvodne bolo, dostávame m G d i (d i + 1) 2m = 2nδ (3.2) i=1 Sčítaním (3.1) a (3.1) dostaneme m G (d i + 1) 2 n(2δ + 1) i=1 Ľavú stranu prenásobíme rafinovane zapísanou jednotkou a použijeme Cauchy- Schwarzovu nerovnosť m G ( ) ( 2 1 m G n(2δ + 1) (d i + 1) 2 1 mg ) 2 d i + 1 = n2 mg k=1 i=1 m G i=1 m G kde posledná rovnosť vyplýva z (3.1). Dôsledok 3.2 Pre grafy s konštantnou hustotou (napr. planárne grafy, grafy s ohraničeným stupňom, a pod.) je problém nájdenia maximálnej nezávislej množiny v APX. 1 odstránili sme d i + 1 vrcholov, každý stupňa aspoň d i, čiže d i (d i + 1) polhrán; každá hrana má najviac 2 polhrany
3.2. LINEÁRNE PROGRAMOVANIE 25 Dôsledok 3.3 Každý graf s n vrcholmi a m hranami obsahuje nezávislú množinu veľkosi aspoň n 2 2m+n Definícia 3.3 Na vstupe je daná konštanta p (počet procesorov) a n úloh, pričom spracovanie i-tej úlohy na ktoromkoľvek procesore trvá čas t i. Cieľom je nájsť priradenie úloh procesorom, { t.j. funkciu f : {1,..., n} {1,..., p}, tak aby celkový } čas spracovania, t.j. max f(i)=k t i k = 1,..., p, bol minimálny. Jednoduchý greedy algoritmus, riešiaci problém Min-Scheduling najprv utriedi úlohy podľa dĺžky. Potom ich sekvenčne spracováva, pričom každú úlohu priradí procesoru, ktorý je momentálne najmenej zaťažený. Veta 3.4 Greedy ( algoritmus ) pre problém Min-Scheduling má aproximačný pomer najviac 4. 3 1 3p Dôkaz: Označme m G cenu greedy riešenia a m optimálnu cenu. Nech W = n i=1 t i je celkový čas všetkých úloh. Bez ujmy na všeobecnosti nech t 1 t 2 t n, a nech maximum f(i)=k t i sa dosahuje na prvom procesore, t.j. m G = f(i)=1 t i. Nech t h je posledná úloha, ktorú algoritmus proradil procesoru 1. Rozlíšime dva prípady: prípad 1: t h m 3 V čase, keď algoritmus priradil h-tu úlohu prvému procesoru, tento už mal priradené úlohy s celkovým časom m t h. Navyše, všetky ostatné procesory mali priradené úlohy s väčším celkovým časom, takže W p(m t h ) + t h, odkiaľ dostaneme m w + t h(p 1) p Pretože t h m /3 a m W/p dosadením dostaneme ( 4 m 3 1 ) m 3p prípad 2: t h > m 3 Ukážeme, že v tomto prípade algoritmus vráti optimálne riešenie. *** to do: po položení každý max. 2 veci, v opt tiež *** 3.2 Lineárne programovanie Priblížime si dva spôsoby využitia LP pri návrhu aproximačných algoritmov. Budeme ich ilustrovať na probléme minimálneho vrcholového pokrytia: Rôzne verzie plánovacích (scheduling) a umiestňovacích (packing) problémov sú taktiež často riešené greedy algoritmami. Najprv prezentujeme problém plánovania úloh na nezávislých procesoroch, ktorý je zovšeobecnením problému Min- Partition: Min- Scheduling Definícia 3.4 Majme daný graf G = (V, E) s n vrcholmi a m hranami, pričom i-ty vrchol má váhu ω i R +. Cieľom je nájsť množinu vrcholov V V s najmenšou celkovou váhou, ktorá pokrýva všekty hrany, t.j. (u, v) E : u V v V minimálne vrcholové pokrytie