Slot 2 nemusí být vždy počítací — místo modelovací úlohy se objevuje i čistá teorie nejkratších cest. Dochovaly se dva formáty: čtyřdílná úloha Handling negative cycles in the graph (zkouška KO 21. 06. 2021, úloha T01 níže — třetí a poslední FOTO checkpoint kapitoly) a úloha „5 výroků“ (dokaž, nebo vyvrať protipříkladem; úloha T02). Dobrá zpráva: žádný nový obsah dnes nepotřebuješ — všechny odpovědi už máš z minulých lekcí. Nová je jen disciplína skládání: poznat, na kterou „páku“ výrok tlačí, a vytáhnout správný argument.
Asymetrie je tvůj přítel: k vyvrácení stačí jediný protipříklad, a klidně miniaturní — 3–4 vrcholy bohatě stačí. K potvrzení naopak nestačí žádné množství příkladů: potřebuješ obecný argument pokrývající všechny instance (typicky rozpis ceny cesty, např. $c'(P) = c(P) + h\,|P|$ z [L2.15], nebo odvolání na korektní algoritmus se splněnými vstupními podmínkami). Proto se vyplatí nejdřív chvíli hledat protipříklad — když se ani po systematickém pokusu nenajde, bývá to nápověda, že výrok platí a má krátký důkaz.
Pět otázek, které si polož u každého výroku:
Ne — a přesně tahle záměna je nejčastější chyba celé úlohy. Jsou to dva různé problémy:
Ukažme si obojí na jednom silně souvislém grafu $G^\star$ (instance vlastní) se záporným cyklem $a \rightleftarrows b$ o váze $-2 + 1 = -1$:
Detekce v akci — rychlá repríza běhu z [L2.12], tentokrát na $G^\star$ (pořadí hran $(s,a), (a,b), (b,a), (b,t), (t,s)$):
Všimni si bonusu silné souvislosti: z libovolného startu $s$ je dosažitelné všechno, takže trik s pomocným vrcholem $s'$ a nulovými hranami [L2.12] tady není potřeba — to se hodí do odpovědi na první podotázku T01.
Mapa „téma výroku → hotový argument“. U zkoušky ji budeš mít v hlavě; teď slouží jako rozcestník k úlohám, kde je každý argument vypracovaný:
| Téma výroku / podotázky | Verdikt | Kde je důkaz / protipříklad |
|---|---|---|
| posun všech vah o $+h$ zachová SP | NEPLATÍ — $c'(P) = c(P) + h\,|P|$ | [L2.15] T01 |
| násobení všech vah $k > 0$ zachová SP | PLATÍ — $c'(P) = k \cdot c(P)$, délka $\times k$ | [L2.15] T02 |
| Dijkstra najde SP s nejmenším počtem hran | NEPLATÍ — cena ≠ počet hran | [L2.16] T01 |
| nejmenší počet hran chci doopravdy | všem hranám váhu $1$ → BFS | [L2.16] takeaways |
| nejdelší cesta, kladné váhy, obecný graf | NP-těžká (Hamiltonovská cesta) | [L2.17] T01 |
| nejdelší cesta, všechny váhy záporné | snadná — ×(−1) + Dijkstra | [L2.17] takeaways, T02 |
| detekce záporného cyklu | polynomiální — Bellman-Ford + kontrolní průchod, $\mathcal{O}(nm)$ | [L2.12] |
| SP v grafu se záporným cyklem | NP-těžká | [L2.1] |
Consider having a strongly connected graph $G$, with a set of edges $E$, and with arbitrary edge weights from $\mathbb{Z}$; $c(e)$ denotes the weight of edge $e$. (For the following questions, consider $P \neq NP$.)
Tuhle úlohu vyřeš celou NA PAPÍR — všechny čtyři podotázky, od prázdného listu, bez koukání do lekce, orientačně do 15–20 minut (přesný limit zkoušky doložený není, ale při 6 úlohách na test víc mít nebudeš). U podotázky 3 nakresli konkrétní dvojici grafů $G$, $G'$ s čísly a dopočítej obě cesty v obou grafech. Pak mi pošli fotku — zkontroluju ti ji a vytknu chyby přesně jako hodnotitel.
Silně souvislý orientovaný graf s libovolnými celočíselnými vahami (i zápornými) a čtyři podotázky: ① jak polynomiálně detekovat záporný cyklus, ② zda je nejkratší cesta vždy polynomiálně řešitelná, ③ zda posun všech vah o $+h$ (zvolené tak, aby váhy vyšly nezáporné) zachová nejkratší cesty, ④ zda při všech záporných vahách umíme polynomiálně nejdelší cestu. Závorka „consider $P \ne NP$“ prozrazuje, že aspoň jedna odpověď bude „ne, je to NP-těžké“.
Každá podotázka je jedna lekce — poznej kterou. ① je čistá reprodukce detekce; využij silnou souvislost (vše je dosažitelné → $s'$-trik netřeba). ② pozor na slovo always: váhy jsou libovolné ze $\mathbb{Z}$, takže graf může obsahovat záporný cyklus — a co pak? ③ neptej se „změní se délky?“, ale „změní se vítěz?“ — rozepiš $c'(P)$ a postav mini protipříklad (nezapomeň: silně souvislý, bez záporného cyklu). ④ aplikuj checklist nejdelší cesty: má graf po ×(−1) záporný cyklus? Dochovaná studentská odpověď je dobrý trenažér: u ② a ③ napsala „yes“ a hodnotitel ji červeně opravoval („What about negative cycles?“) — zkus říct přesně, kde se spletla.
① Detekce záporného cyklu — Bellman-Ford + kontrolní průchod, $\mathcal{O}(nm)$. Zvol libovolný startovní vrchol $s$; díky silné souvislosti je z něj dosažitelný celý graf (pomocný vrchol $s'$ s nulovými hranami [L2.12] není potřeba). Proveď $n-1$ průchodů relaxací všech hran. Pak proveď jeden kontrolní průchod: existuje-li hrana $(v,t)$ s $l(t) > l(v) + c(v,t)$, graf obsahuje záporný cyklus; jinak neobsahuje (slide 34). Celkem $\mathcal{O}(nm)$ — polynomiální. (Dochovaná odpověď „run Bellman-Ford $|V|-1$ times, then relax once more; if any distance changes, there is a negative cycle“ je ekvivalentní — hodnotitel ji označil „not incorrect“.)
② NE — ne vždy. Váhy jsou libovolné ze $\mathbb{Z}$, takže $G$ může obsahovat záporný cyklus (silně souvislý graf cykly má; stačí jeden se záporným součtem, např. $a \rightleftarrows b$ v grafu $G^\star$ z lekce). Pak nejkratší sled neexistuje a hledání nejkratší cesty je NP-těžké [L2.1] (redukce z Hamiltonovské kružnice, slide 12) — za předpokladu $P \ne NP$ tedy žádný polynomiální algoritmus neexistuje. Polynomiálně řešitelné to je jen v případě, že $G$ záporný cyklus nemá (Bellman-Ford, $\mathcal{O}(nm)$) — což díky ① umíme poznat. (Dochovaná odpověď „yes, since we are working with finite number of $V$ and $E$“ je chybná — konečnost instance neznamená polynomialitu; hodnotitel ji označil „very confusing“.)
③ NE — protipříklad (tentýž jako v [L2.15] T01). Pro každou cestu platí $c'(P) = c(P) + h \cdot |P|$: příplatek roste s počtem hran, takže se pořadí cest s různým počtem hran může přehodit. Konkrétně $G$: vrcholy $\{s, a, t\}$, hrany $c(s,a) = -2$, $c(a,t) = -2$, $c(s,t) = -3$ a zpáteční hrana $c(t,s) = 10$ (silná souvislost; všechny cykly kladné → nejkratší cesty definované). Minimum vah je $-3$, zvol $h = 3 \ge |{-3}|$.
Nejkratší cesta v $G'$ tedy neodpovídá nejkratší cestě v $G$ (grafy nakreslené pod řešením). $\blacksquare$ (Dochovaná odpověď „yes — rozdíly dvojic hran se nezmění“ je chybná: o vítězi rozhodují součty podél celých cest, viz danger box lekce; hodnotitel připsal „What about negative cycles?“ a skicu trojúhelníkového protipříkladu.)
④ ANO. Vytvoř $G'$ shodný s $G$, ale každou váhu vynásob $(-1)$: z $c(e) < 0$ plyne, že v $G'$ jsou všechny váhy kladné — žádný záporný cyklus, dokonce splněné vstupní podmínky Dijkstry [L2.4]. Nejkratší cesta v $G'$ je nejdelší cestou v $G$ a její délka je $(-1)\times$ délka nalezená v $G'$ [L2.17]. Složitost $\mathcal{O}(n^2)$ (resp. $\mathcal{O}(m + n \log n)$) — polynomiální. (Dochovaná odpověď je správně — hodnotitel ✓.) Pikantní detail k ústní: $G$ sám je samými zápornými vahami prošpikovaný zápornými cykly (silně souvislý graf cykly má a každý je tu záporný), takže nejkratší cesta v $G$ by byla NP-těžká — ale na nejdelší se ptáme „ze správné strany“.
5 výroků a říct zda platí nebo ne. Pokud platí, dokázat, pokud ne, udělat protipříklad. Výroky typu „když zvýšíme cenu hrany v grafu o násobek $k$, délka nejkratší cesty se také zvýší $k$-krát“, „Dijkstrův algoritmus nalezne vždy nejkratší cestu s nejmenším počtem hran“)
Decide whether each of the following statements holds. If it does, prove it; if it does not, give a counterexample.
Formát „dokaž, nebo vyvrať“: u každého výroku verdikt PLATÍ/NEPLATÍ + důkaz, resp. protipříklad. Dochovaly se jen dva ukázkové výroky (1 a 2) — zbylé tři jsou doplněné tak, aby pokryly páky, na které se K2 výroky ptají nejčastěji.
Na každý výrok pusť checklist z lekce: definovanost → vstupní podmínky → transformace vah → cena vs. počet hran → kladný cyklus. Výroky 2, 3 a 5 padají na protipříklad/protiargument, výroky 1 a 4 mají krátký důkaz. Nepřepisuj argumenty z minulých lekcí — tady si jen ověř, že je umíš vybrat a stručně podat (na písemce stačí pár řádků + obrázek na výrok).
Poznámka k písemce: přesné EN znění pětice se každý termín liší — formát i páky ale zůstávají. Když výrok nepoznáš, projdi checklist z této lekce; téměř jistě tlačí na jednu z pěti pák.