08. Nekratší cesty. Úloha obchodního cestuícího. Heurstky a aproxmační algortmy. Metoda dynamckého programování. Problém batohu. Pseudopolynomální algortmy 1. Nekratší cesta v grafu - sled e lbovolná posloupnost vrcholů a hran doucí po sobě př průchodu grafem - cesta e sled bez cyklů - nstance: orentovaný graf G, váhy c : E(G) R a dva vrcholy s, t V(G) - pokud nekratší sled neobsahue cyklus záporné délky, e zároveň nekratší cestou - pokud graf obsahue cyklus se zápornou délkou, pak de o NP-obtížný problém Troúhelníková nerovnost - estlže graf neobsahue cyklus se zápornou délkou, pak pro všechny troce vrcholů,, k platí: l(,) l(,k) + l(k,)... l(,) e délka nekratší cesty z do Bellmanova rovnce - estlže graf neobsahue cyklus se zápornou délkou, pak pro všechny troce vrcholů,, k platí: l(,) mn{l(,k) + c(k,)} Podobné úlohy - hledání nedelších cest se řeší obrácením znamének u délek všech hran. Tím sme převedl hledání maxma na hledání mnma. - pokud sou ohodnocené en vrcholy a ne hrany, lze převést na hledání v grafu s ohodnoceným hranam: každý vrchol v původního grafu nahradíme dvocí vrcholů v1 a v2, spoíme e hranou o délce rovné původní hodnotě vrcholu v hrany, které končly ve vrcholu v přesměrueme do v1, hrany, které vycházely z vrcholu v budou vycházet z vrcholu v2 Dkstrův algortmus - vždy vyberu nelevněší uzel, který není closed, z tohoto uzlu zkouším pnkat do všech OPEN sousedů a zkoušíme, estl se do nch dostaneme přes tento uzel levně. Pokud ano, nastaví se nová cena a zapíše se předek na cestě do pole. - omezení: neumí grafy se záporným ohodnocením hran - mplementace pomocí prortní haldy, která rychle vrací mnmum -1-
- nekratší cesta se skládá z nekratších cest - pokud nás zaímá nekratší cesta pouze do ednoho cílového vrcholu c, lze skončt, akmle odebereme vrchol z množny R - časová náročnost algortmu e O(n2), respektve s využtím prortní fronty O(m + nlogn) Bellman-Fordův algortmus - dokáže detekovat cykly záporné délky - časová náročnost algortmu e O(nm) - umí s poradt se záporným hranam Floydův algortmus - časová náročnost algortmu e O(n 3 ) - nade nekratší cestu mez všem dvocem uzlů - graf obsahue cyklus záporné délky právě když exstue takové, že l < 0 - modfkací Floydova algortmu (l 0 = ) lze nalézt (nezáporný) cyklus o mnmální délce -2-
2. Úloha obchodního cestuícího - cíl: Rozhodnout, zda v grafu G exstue Hamltonovská kružnce (uzavřená cesta procházeící každým vrcholem právě ednou), eíž váha e mnmální - Hamltonovská kružnce e NP-úplný problém - důkaz, že TSP e slně NP-obtížný problém: 1. Polynomální redukcí vytvoříme nstanc TSP tak, že každému vrcholu grafu G odpovídá 1 vrchol v úplném neorentovaném grafu Kn. 2. váha hrany {.} v Kn e: 1 pokud {,} E(G) 3. váha hrany {.} v Kn e: 2 pokud {,} E(G) - ednoduše (v polyn. čase) lze ověřt, že G má Hamltonovskou kružnc právě když optmální řešení TSP má hodnotu n. Nebol TSP e NP-obtížný. -pro důkaz, že TSP e slně NP-obtížný musíme dokázat, že neexstue pseudo-polynomální algortmus Metrcký TSP - pokud v grafu platí troúhelníková nerovnost, pak metrcký TSP e NP-obtížný Heurstka Neblžší soused Vstup: Instance (Kn, c) Metrckého TSP Výstup: Hamltonovská kružnce H - v každém kroku e vybráno neblžší doposud nenavštívené město - není to aproxmační algortmus - časová náročnost algortmu e O(n 2 ) 2-aproxmační algortmus Dvotá mnmální kostra - Eulerovská cesta prode každou hranou právě ednou A / OPT( I(Kn, c) ) <= 2 - časová náročnost algortmu e O(n 2 ) 3/2-aproxmační Chrstofdesův algortmus - časová náročnost algortmu e O(n 3 ) Lokální prohledávání k-opt 1. použeme lbovolnou Hamltonovskou kružnc nalezenou např. heurstkou 2. toto řešení zkoušíme vylepšovat pomocí lokálních změn (např. vymazáním dvou hran rozdělíme kružnc na dvě část, které spoíme pomocí ných hran) -3-
- dovolené sou en modfkace, které vylepšuí řešení 3. Problém batohu Obrázek 1 - k OPT - nstance: n e počet předmětů, c sou ceny předmětů, w sou hmotnost předmětů a W e nosnost batohu. Cíl: Nalézt podmnožnu S {1,..., n} takovou, že w < W a c maxmální S - de o NP obtížný problém - složtost ( C n) O, kde C e suma všech cen, C ovlvňue počet sloupců tabulky - algortmus pro knapsack e pseudo-polynomální, protože eho složtost e závslá na C (může být až exponencálně velké) - eden z mála problémů, pro něž exstue aproxmační algortmus s lbovolně malou poměrnou odchylkou od optma - postup: 1. začínáme na pozc [0,0], což znamená, že v batohu e nula klo za nula korun 2. procházíme strom všech možných řešení a ořezáváme ty, které ž přerostly stanovenou nosnost batohu 3. pohyb o ednu pozc dolů znamená, že předmět do batohu nedáváme 4. pohyb o ednu pozc dolů a o w pozc doprava znamená, že předmět o váze w do batohu přdáme 5. nakonec se prode poslední řádek a nade se poslední nevětší cena 6. průchodem stromu doleva vzhůru lze zstt seznam předmětů, které se do batohu vešly S -4-
Fractonal knapsack problem = nstance úlohy taková, že předměty lze dělt na část, čl x 0<=x <=1 S c e mnmální, - řešení: seřadt předměty sestupně podle relatvní ceny nevede a doplnt zbytek částí něakého předmětu c, zaplnt batoh, až už se nc w 2-aproxmační algortmus pro Knapsack - předměty sou seřazené sestupně podle relatvní ceny h = mn{ {1,..., n} : = 1 w > w } - výběr lepšího ze dvou řešení {1,..., h-1} a {h} e 2-aproxmační algortmus - časová náročnost e O(n) c w -5-