Vítej v kapitole důkazů. Slot 3 písemky padá v ~95 % termínů a žebříček nejpravděpodobnějších důkazů pro 15. 6. zní: Christofides 3/2 [L3.10], korektnost Dijkstry [L3.2], neexistence r-aproximace TSP [L3.6], korektnost Bellman-Forda [L3.7]. Tři ze čtyř položek mluví o „aproximaci“ a „faktoru“ — a všechny důkazy faktorů v této kapitole jsou jen řetízky nerovností kolem jedné definice. Tu definici si dnes postavíme; je to jediná nová věc téhle lekce a společný jazyk celé K3.
Zatím jsme měli štěstí: nejkratší cesty řeší Dijkstra [L2.4] přesně a v polynomiálním čase. Jenže už v K2 jsme zahlédli druhý břeh — nejdelší cesta je NP-těžká [L2.17] a stejně na tom je obchodní cestující (TSP, traveling salesman problem: najdi nejlevnější okruh přes všechna města; pořádně ho zavedeme v [L3.4] a [L3.5]). U takových problémů přesný polynomiální algoritmus nejspíš neexistuje (pokud $P \ne NP$).
Trojici „přesně + rychle + pro každý vstup“ najednou mít nemůžeš. Obětovat můžeš:
Druhá cesta je v praxi nejčastější. Okamžitě ale vyvstává otázka: co přesně znamená „dost dobré“? Bez záruky se může rychlý algoritmus na zákeřném vstupu trefit libovolně mimo.
Jediný rozumný etalon je optimum dané instance. A měřit absolutně („budu mimo nejvýš o 7“) se ukáže jako nesmysl — instanci stačí přeškálovat a absolutní chyba uteče (přesně o tom je úloha T01 dole). Zbývá měřit poměrem: „vrátím nejvýš dvakrát tolik, co optimum.“ Poměr přežije škálování a dává slibu smysl pro malé i obří instance. Přesně tohle formalizuje aproximační faktor $r$.
Domluvme značení (převzaté ze slidů): $I$ je instance problému, $J$ kriteriální funkce, $J^*(I)$ hodnota kritéria optimálního řešení instance $I$ a $J^A(I)$ hodnota kritéria řešení, které na instanci $I$ vrátí algoritmus $A$. (Slidy o TSP píší místo $J^*$ zkratku $\mathrm{OPT}(K_n,c)$ — je to totéž.)
$$J^A(I) \le 2 \cdot J^*(I) \quad \text{pro VŠECHNY instance } I.$$
Dvě věci jsou v zápisu zásadní: nerovnost svazuje výstup algoritmu s optimem poměrem a kvantifikátor „pro všechny instance“ z toho dělá worst-case záruku — žádná instance, ani ta nejzákeřnější, nesmí slib porušit. Obecné $r$ místo dvojky dá definici níže.
Algoritmus $A$ pro minimalizaci kriteriální funkce $J$ je r-aproximační (r-approximation algorithm), existuje-li číslo $r \ge 1$ takové, že
$$J^A(I) \;\le\; r \cdot J^*(I) \qquad \text{pro všechny instance } I \text{ problému.}$$Slidy definují explicitně zrcadlovou verzi pro maximalizaci (05_Knapsack, slide 6, EN 1:1): „Algorithm $A$ for objective function $J$ maximization is called $r$-approximation if there exists a number $r \ge 1$ such that $J^A(I) \ge \frac{1}{r} J^*(I)$ for all instances $I$ of this problem.“ Minimalizační verzi slidy používají implicitně — kapitola o TSP říká „double-tree je 2-aproximace“ a dokazuje přesně nerovnost $c(E(H)) \le 2 \cdot \mathrm{OPT}$ [L3.9].
Záruka musí hlídat tu stranu, kterou algoritmus může pokazit. U minimalizace platí $J^A(I) \ge J^*(I)$ vždy zadarmo (pod optimum se dostat nejde — plyne přímo z definice optima); pokazit jde jen směr nahoru, proto omezujeme shora. U maximalizace je to zrcadlově: $J^A(I) \le J^*(I)$ platí zadarmo a pokazit jde jen směr dolů — podmínka $J^A \le r \cdot J^*$ by tedy byla splněna automaticky (třeba i algoritmem, který vrátí prázdné řešení s $J^A = 0$!) a nezaručovala by vůbec nic. Smysluplná záruka je „aspoň $\frac{1}{r}$ optima“, tedy zdola.
Konvence $r \ge 1$ v obou směrech je pohodlná: $r$ vždy čteme jako „nejvýš $r$-krát horší než optimum“ a $r = 1$ znamená exaktní algoritmus, ať minimalizujeme nebo maximalizujeme.
Obě definice dohromady říkají: hodnota $J^A(I)$ je uvězněná v pásu kolem optima. U minimalizace v pásu $[\,J^*(I),\; r \cdot J^*(I)\,]$, u maximalizace v pásu $[\,\tfrac{1}{r} J^*(I),\; J^*(I)\,]$:
Slidy to zdůrazňují výslovně (05_Knapsack, slide 7, EN 1:1): „An approximation algorithm guarantees, that even in the worst case, the value of the objective function will be proportional to the optimum value. The frequency of the worst case is not considered by the approximation algorithm.“ Faktor tedy neříká nic o typickém ani průměrném chování — je to strop pro nejhorší možný vstup, bez ohledu na to, jak vzácný takový vstup je.
(1) Nevíme. Jedno pozorování dává poměr $14/10 = 1{,}4$ na jedné instanci — definice ale kvantifikuje přes všechny instance. Klidně někde existuje instance s poměrem $3$, a pak $A$ není ani 2-aproximační. Faktor se nedá „změřit experimentem“, musí se dokázat pro každou instanci.
(2) Ne — a tady jedno pozorování stačí. Naše instance porušuje $J^A \le 1{,}2 \cdot J^*$ (je $14 > 12$), takže slib „1,2-aproximace“ je vyvrácen protipříkladem. Všimni si asymetrie kvantifikátoru: dokázat faktor znamená zvládnout všechny instance, vyvrátit ho umí jediná. Stejnou logiku „dokaž ∀ / vyvrať jedním protipříkladem“ známe z úloh o výrocích [L2.18].
Místo faktoru $r$ se někdy používá relativní odchylka od optima $\epsilon$ (relative deviation), svázaná vztahem $r = 1 + \epsilon$: třeba „2-aproximace“ je totéž co „relativní odchylka nejvýš $100\,\%$“. Slide k tomu dodává provokativní otázku — proč je při poměrové záruce nesmyslné udávat absolutní chybu? To je úloha T01.
Ne každý rychlý a rozumně vypadající algoritmus je aproximační. Příklad ze slidů: nearest neighbor (nejbližší soused) pro TSP — začni v libovolném městě a vždy jdi do nejbližšího dosud nenavštíveného. Přirozený nápad, $\mathcal{O}(n^2)$, často funguje slušně… a slide 23 k němu suše poznamenává: „This is not an approximation algorithm.“ Žádné $r$ pro něj neplatí — existují vstupy, na kterých je poměr $J^A/J^*$ libovolně velký (co přesně tahle věta znamená a jak by se dokazovala, rozebereme v úloze T02). Algoritmus bez dokázaného faktoru se nazývá heuristika (heuristic) — může být užitečný, ale nic neslibuje; další heuristikou tohoto typu je [L3.14] k-OPT local search.
Zádrhel: hodnotu $J^*(I)$ neznáš — kdybys ji uměl pro každou instanci spočítat, nepotřebuješ aproximaci. Porovnávat $J^A$ přímo s $J^*$ tedy nejde.
Obejití: najdi mez $B(I)$, kterou spočítat či odhadnout umíš, a vlož ji mezi obě strany. U minimalizace potřebuješ dolní mez optima $B(I) \le J^*(I)$ a ukážeš $J^A(I) \le r \cdot B(I)$; řetízek pak dá $$J^A(I) \;\le\; r \cdot B(I) \;\le\; r \cdot J^*(I).$$ U maximalizace zrcadlově: horní mez $B(I) \ge J^*(I)$ a $J^A(I) \ge \frac{1}{r} B(I)$.
Tohle „sendvičování“ přes mez je celé tajemství důkazů faktorů a uvidíš ho v K3 třikrát:
Až tedy v dalších lekcích uvidíš nerovnost typu $c(\mathrm{MST}) \le \mathrm{OPT}$, věz, že to není ornament — je to nosný trám, bez kterého se faktor s neznámým optimem vůbec nedá svázat. A ještě jedna výstraha dopředu: existence aproximace není samozřejmost. Pro obecný (nemetrický) TSP dokážeme [L3.6], že žádný polynomiální r-aproximační algoritmus neexistuje (pokud $P \ne NP$) — i „vzdát se optimality“ je někdy příliš ambiciózní plán.
Notes about approximation algorithms:
Slide shrnuje, že aproximační záruka je poměrová a worst-case, zavádí přepis $r = 1 + \epsilon$ (např. $r = 2 \Leftrightarrow \epsilon = 1$, tj. odchylka do 100 %) a ptá se: proč nemá smysl slibovat absolutní chybu, tedy záruku tvaru $|J^A(I) - J^*(I)| \le E$ pro nějakou konstantu $E$?
Vezmi libovolnou instanci a vyrob z ní novou tak, aby se poměry kritérií řešení nezměnily, ale rozdíly nafoukly. Co udělá s kritérii vynásobení všech vstupních cen konstantou $k$? Pak otoč směr: co by záruka s absolutní chybou $E$ znamenala na instanci, jejíž ceny naopak $k$-krát zmenšíš (nebo ekvivalentně: na celočíselné instanci nafouknuté $k$-krát)?
1) Poměrová záruka žádnou absolutní chybu neimplikuje — škálování ji nafoukne libovolně. Vezmi instanci $I$, na níž má algoritmus nenulovou relativní odchylku, tedy $J^A(I) = (1+\delta) J^*(I)$ pro nějaké $\delta \in (0, \epsilon]$ (minimalizace; pro maximalizaci zrcadlově). Vyrob instanci $I_k$ vynásobením všech cen konstantou $k > 0$: kritérium každého řešení se přenásobí $k$ (týž argument jako u násobení vah cest v [L2.15]), takže množina optimálních řešení se nezmění a $J^*(I_k) = k \, J^*(I)$. Algoritmus porovnávající jen hodnoty kritéria se na $I_k$ rozhoduje stejně jako na $I$ a vrátí totéž řešení s $J^A(I_k) = k \, J^A(I)$. Relativní odchylka zůstala $\delta$ — záruka $r = 1+\epsilon$ platí dál — ale absolutní chyba je $$J^A(I_k) - J^*(I_k) = k \cdot \delta \cdot J^*(I) \;\xrightarrow{\;k \to \infty\;}\; \infty.$$ Žádná konstanta $E$ tedy nemůže absolutní chybu omezit „pro všechny instance“: údaj o absolutní chybě k poměrové záruce nic nepřidává a sám o sobě neobstojí.
2) Bonus — absolutní záruka by byla podezřele silná. Kdyby nějaký polynomiální algoritmus pro problém s celočíselnými cenami garantoval $J^*(I) - J^A(I) \le E$ (např. knapsack, maximalizace), stačilo by instanci nafouknout: vynásob všechny ceny $k = E+1$. Na nafouknuté instanci je každý rozdíl kritérií dvou řešení násobkem $E+1$, takže „chyba nejvýš $E$“ vynucuje chybu $0$ — algoritmus by nafouknutou (a po přepočtu i původní) instanci řešil optimálně v polynomiálním čase. Pro NP-těžké problémy by to znamenalo $P = NP$. Absolutní chyba proto není jen „neinformativní“, jakožto pevná záruka je pro NP-těžké problémy rovnou nedosažitelná.
Shrnutí pro písemku: kritérium se škáluje spolu se vstupem; škálováním instance lze absolutní chybu libovolně zvětšit (a požadavek absolutní chyby naopak „vyžehlit“ na požadavek optimality). Jediná škálovatelně smysluplná míra kvality je poměr $J^A/J^*$, tedy $r$, resp. $\epsilon = r - 1$.
Input: An instance (K_n, c) of metric TSP.
Output: Hamiltonian circuit H.
Choose arbitrary node v_[1] ∈ V(K_n);
for i := 2 to n do
choose v_[i] ∈ V(K_n) \ {v_[1], ..., v_[i-1]} such that c({v_[i-1], v_[i]})
is minimal;
end
Hamiltonian circuit H is defined by the sequence {v_[1], ..., v_[n], v_[1]};
(Doplňující otázka, vlastní:) State formally what the claim “this is not an approximation algorithm” means, and describe what a proof of this claim would have to show.
Nearest neighbor staví okruh hladově: z aktuálního města vždy do nejbližšího nenavštíveného, nakonec zpět do startu. (Detaily TSP tu nepotřebuješ — $K_n$ je úplný graf na $n$ městech, okruh přes všechna města zavedeme v [L3.3]/[L3.4]; tahle úloha je čistě o kvantifikátorech definice z této lekce.) Slide tvrdí, že tento algoritmus není aproximační. Úkol: přeložit výrok do formálního jazyka definice a říct, jak by se dokazoval.
Napiš si, co znamená „NN je r-aproximace pro nějaké $r$“ — dostaneš výrok se dvěma kvantifikátory ($\exists r$, $\forall I$). Pak ho zneguj krok za krokem (negace prohazuje ∃ a ∀). Nakonec si rozmysli: stačí k důkazu jedna konkrétní instance? Jedna pro každé $r$? Nekonečná rodina?
Formalizace. „NN je aproximační algoritmus“ znamená podle definice (TSP minimalizuje):
$$\exists\, r \ge 1 \;\; \forall I:\quad J^{NN}(I) \le r \cdot J^*(I).$$Výrok slidu je negace, a negace prohodí kvantifikátory:
$$\forall\, r \ge 1 \;\; \exists\, I_r:\quad J^{NN}(I_r) > r \cdot J^*(I_r).$$Slovy: ať zvolíš jakkoli velký faktor $r$, existuje instance, na které ho nearest neighbor poruší — poměr $J^{NN}/J^*$ není shora omezen žádnou konstantou.
Co musí důkaz ukázat. Jedna konkrétní instance nestačí — ta by vyvrátila jen jedno konkrétní $r$ (např. poměr $3$ na jedné instanci vylučuje $r = 2$, ale ne $r = 5$). Důkaz musí dodat rodinu instancí $\{I_r\}$ parametrizovanou tak, aby poměr $J^{NN}(I_r)/J^*(I_r)$ rostl nade všechny meze (typicky posloupnost instancí rostoucí velikosti, na nichž poměr roste např. logaritmicky s $n$ — konstrukce takové rodiny je nad rámec slidů, slide 23 výrok jen konstatuje). U hladového pravidla je zdroj potíží intuitivně vidět: lokálně nejlevnější krok může algoritmus zavléct do kouta, odkud se vrací přes velmi drahé hrany, a tenhle efekt lze konstrukcí instance stupňovat.
Pozor na rozdíl rolí: dokázat, že algoritmus aproximační je, znamená zvládnout $\forall I$ (řetízek nerovností přes mez — uvidíš u double-tree [L3.9] a Christofidese [L3.10]); dokázat, že není, znamená vyrábět protipříklady, pro každé $r$ jeden. Srovnej s neexistencí r-aproximace pro obecný TSP [L3.6] — tam je tvrzení ještě silnější: žádný polynomiální algoritmus (nejen NN) nemůže být r-aproximační pro žádné $r$, pokud $P \ne NP$.