Prerekvizity: [L0.4] Strom, kostra, les, DAG (kostra = strom na všech vrcholech).
V [L0.4] jsme viděli, že souvislý graf má kostru — a typicky jich má hodně (úplný graf na pouhých 4 vrcholech jich má $4^{2}=16$, obecně $n^{n-2}$). Jakmile mají hrany váhy (weights) $c(e)$, nejsou si kostry rovné: každá má cenu $c(T) = \sum_{e \in T} c(e)$. Minimum spanning tree — MST (minimální kostra) je kostra s nejmenší cenou. Definice ze slidů (03_SPT, slide 6): „In an undirected graph with the weights associated to arcs, find a spanning tree of minimum weight or decide that the graph is not connected.“
Jde to mnohem líp — nejlevnější kostra má cenu 9. A hledat ji můžeš hladově (greedy): ber hrany od nejlevnější a přidávej je, pokud nevytvoří kružnici. Přesně to dělá Kruskalův algoritmus — krokuj si ho níže.
MST je vzácný případ, kdy hladový postup zaručeně najde optimum. Dva klasické algoritmy:
Pro zkoušku nepotřebuješ důkazy správnosti — potřebuješ MST umět rychle spočítat na papíře (Kruskalem) a vědět, že je to polynomiální, „levný“ objekt.
Různých minimálních koster může být víc — když se váhy opakují (remízy), může Kruskal při stejné váze vybrat různé hrany a obě volby dopadnou stejně dobře. Ale cena MST je vždy jednoznačná: všechny minimální kostry mají z definice tentýž (nejmenší) součet. „MST grafu“ jako číslo $c(\mathrm{MST})$ je tedy dobře definované.
V tomhle kurzu MST skoro nikdy není finální odpověď — je to stavební kámen a dolní mez (lower bound). Klíčové pozorování (06_TSP, slide 25): když z libovolného okruhu procházejícího všemi vrcholy odebereš jednu hranu, zbyde kostra. Ta nemůže být levnější než MST. Takže žádný okruh přes všechny vrcholy nemůže být levnější než $c(\mathrm{MST})$ — to je srdce 2-aproximace TSP, kterou rozvineme v [L3.8b] MST jako dolní mez (OPT ≥ c(MST)).
Okruh přes všechny vrcholy má $n$ hran a je souvislý. Odebráním jedné hrany se souvislost nezruší (zbytek okruhu oba konce pořád spojuje) a zbyde $n-1$ hran — souvislý graf s $n-1$ hranami je podle ekvivalencí z [L0.4] strom na všech vrcholech, tedy kostra.
“Minimum Spanning Tree — MST: In an undirected graph with the weights associated to arcs, find a spanning tree of minimum weight or decide that the graph is not connected. … The spanning tree in the middle (SPT from central node) has weight 8 and diameter 4 (the longest path between two nodes) while the spanning tree on the right side (MST) has weight 5 and diameter 5.” For the graph drawn below (four outer nodes in a ring, edges of weight 1; central node $s$ joined to each outer node by an edge of weight 2), find the MST and verify both claimed weights and diameters.
Graf „čtverec se středem“: kružnice $v_1 v_2 v_3 v_4$ z hran váhy 1, střed $s$ napojený na každý rohový vrchol hranou váhy 2. Najdi minimální kostru, spočítej její váhu a průměr (délku nejdelší cesty mezi dvojicí vrcholů) a srovnej se stromem nejkratších cest ze středu (SPT = všechny čtyři hrany ze středu).
Kostra na $n=5$ vrcholech má 4 hrany. Kruskal: kolik hran váhy 1 můžeš vzít, než vznikne kružnice? Kolik hran váhy 2 pak ještě potřebuješ? Pro průměr si výslednou kostru nakresli a najdi nejdelší cestu (váženou).
Kruskal: hrany váhy 1 jsou čtyři: $v_1v_2, v_2v_3, v_3v_4, v_4v_1$. Vezmu $v_1v_2$, $v_2v_3$, $v_3v_4$; čtvrtá hrana $v_4v_1$ by uzavřela kružnici — zahodím. Zbývá připojit $s$: libovolná hrana $s v_i$ váhy 2, např. $s v_1$. MST $= \{v_1v_2, v_2v_3, v_3v_4, s v_1\}$, váha $1+1+1+2 = \mathbf{5}$ ✓. Průměr: nejdelší cesta je $s \to v_1 \to v_2 \to v_3 \to v_4$ s váhou $2+1+1+1 = \mathbf{5}$ ✓ (remízami může MST vyjít i jinak, váha je vždy 5).
SPT ze středu $= \{s v_1, s v_2, s v_3, s v_4\}$: váha $4 \cdot 2 = \mathbf{8}$ ✓, průměr = cesta $v_i \to s \to v_j$ s váhou $2+2=\mathbf{4}$ ✓. Pointa slidu: strom nejkratších cest a minimální kostra jsou různé objekty — SPT minimalizuje vzdálenosti od kořene (a je dražší), MST minimalizuje celkovou váhu (a má delší cesty).
“2. while deleting one edge in the circuit, we create the tree. Therefore, inequality $\mathrm{OPT}(K_n, c) \ge c(E(T))$ holds”, where $T$ is a minimum weight spanning tree of $K_n$ and $\mathrm{OPT}(K_n,c)$ is the cost of the cheapest circuit visiting all $n$ nodes. Justify this inequality in detail (assume non-negative edge costs $c$).
Dokaž, že cena nejlevnějšího okruhu přes všechny vrcholy je aspoň cena MST. (Je to jeden krok důkazu 2-aproximace TSP — tady ho trénujeme samostatně.)
Vezmi optimální okruh a odeber z něj jednu hranu. Co za objekt ti zbyl (kolik má hran, je souvislý)? Jak se jeho cena srovnává (i) s cenou okruhu a (ii) s cenou MST?
Nechť $H$ je optimální okruh přes všech $n$ vrcholů, $c(H) = \mathrm{OPT}(K_n, c)$. Odeberu z $H$ libovolnou hranu $e$ a dostanu podgraf $P = H - e$: je souvislý (zbytek okruhu spojuje oba konce $e$), obsahuje všech $n$ vrcholů a má $n-1$ hran — je to tedy kostra (cesta přes všechny vrcholy), viz ekvivalence (c) z [L0.4].
Dvě nerovnosti: $$c(\mathrm{MST}) \;\le\; c(P) \;=\; c(H) - c(e) \;\le\; c(H) = \mathrm{OPT}(K_n,c).$$ První platí, protože MST je nejlevnější kostra a $P$ je nějaká kostra; druhá protože $c(e) \ge 0$. Dohromady $c(E(T)) = c(\mathrm{MST}) \le \mathrm{OPT}(K_n, c)$. $\blacksquare$