TGH08 - Optimální kostry Jan Březina Technical University of Liberec 14. dubna 2015
Problém profesora Borůvky řešil elektrifikaci Moravy Jak propojit N obcí vedením s minimální celkovou délkou. Vedení semůže větvit jen v obcích. 1926 - článek: O jistém problému minimálním První publikovaný algoritmus na hlednání minimální kostry
Grafová formulace problému Kostra (spanning tree) neorientovaného souvislého grafu G je strom obsahující všechny jeho vrcholy. Cena podgrafu F G, kde G má ohodnocené hrany, je součet hodnot hran v F. Minimální kostra (minimal spannig tree - MST) je kostra s minimální cenou. Jelikož minimalita ceny vylučuje existenci cyklů v MST, lze MST definovat také jako: Minimální souvislý indukovaný podgraf. Problém: Najdi minimální kostru grafu. hladové algoritmy - v každém kroku výpočtu voĺı aktuálně nejlepší možnost, časově efektivní. Obecně tato strategie vede k nalezení pouze lokálního, ne globálního minima.
Primův-Jarníkův algoritmus Vstup: graf G(V, E). Výstup: kostra S. Inicializuj strom kostry S jedním vrcholem. while S neobsahuje V do Najdi minimální hranu e z S do V \ S.; Přidej e ke stromu S. Implementační detaily: Kĺıčová je realizace hledání minimální hrany. Použijeme prioritní frontu hran založenou na binární haldě. Fronta obsahuje všechny vrcholy z V \ S sousedící s S. Podobně jako v Dijkstrovi udržujeme předky π[:]. ODEBER MIN se složitostí O(log E) = O(log V ) Přidání e : INSERT O(log E), pro každou hranu max. jednou. Celkem O((E + V ) log V ), jelikož každou hranu musíme projít alespoň jednou.
Minima lnı kostra grafu Pr ı buznı pr ı klad
Minima lnı kostra grafu Pr ı buznı pr ı klad
Primův-Jarníkův algoritmus detailně for u V do d[u] = d[s] = 0; π[s] = s Naplň prioritní frontu Q vrcholy V s prioritami d[ ]. while u = OdeberMin(Q) do d[u] = 0 for e = (u, v) Adj[u] do alt = w(e) if d[v] 0 and alt < d[v] then π[v] = u; d[v] = alt ZmenšiKĺıč(Q,v) modifikace Dijkstrova algoritmu (relaxace, test přítomnosti v ve frontě d[v] 0). d je minimální vzdálenost vrcholu od kostry S.
Kruskalův algoritmus Vstup: graf G(V, E). Výstup: kostra L. vytvoř les L z vrcholů V ; naplň S hranami E; while S a L není strom do odeber z S hranu e s nejmenší váhou; if e spojuje vrcholy různých stromů v lese L then spoj stromy; Implementační detaily: S bude setříděné pole hran. O(E log E) L je strom pokud obsahuje V 1 hran. O(1) volba nejkratší hrany O(1) Test hrany: datová struktura pro disjunktní rozklad množiny. O(α(V )) a lepší Kruskal: O((V + E)α(V )) Celkem O(E log E) = O(E log V )
Borůvkův algoritmus - obecně vytvoř les L z vrcholů V ; while L není strom do for komponenty L i lesu L do Najdi minimální hranu e i z L i ven.; Přidej hrany {e i } do L. V každém kroku se počet komponent zmenší alespoň na polovinu. složitost (redukční implemenace...) min(o(e log V ), O(V 2 )) vhodný pro paralelizaci
Borůvkův algoritmus - detailně vytvoř les L z vrcholů V while L není strom do for u V do add minimal edge e = (u, v) into L, set π[u] = v for u V do π[u] = F indroot(u, π), add to V for e = (u, v) E do add (π[u], π[v]) into E set (V, E) = (V, E ) FindRoot(u, π) kořen komponenty s vrcholem u v lese s hranami π while π[π[u]] u do u = π[u] ; ; return min{u, π[u]}
Meta algoritmus Řez δ(a) je množina hran mezi A a V \ A. Pokud pro množinu hran M existuje minimální kostra T, M T, řekneme, že M je rozšiřitelná do minimální kostry. Lemma (o existenci řezu) M je rozšiřitelná, ale ještě není kostrou, pak existuje neprázdný řez δa disjunktní s M. (Existuje netriviální řez s hranami mimo M.) 1. Zvoĺıme x M. 2. A bude množina vrcholů dosažitelných z x po hranách z M 3. δ(a) neobsahuje žádnou hranu z M, jinak bychom množinu A mohli zvětšit 4. pokud y / A, existuje cesta x y, která obsahuje hranu z řezu 5. řez je tedy neprázdný
Lemma (o nejlevnější hraně) Pokud M je rozšiřitelná a e je nejlevnější hrana řezu δa disjunktního s M, pak je i množina M {e} rozšiřitelná do minimální kostry.
meta-algoritmus: Postupně rozšiřujeme M s prázdné množiny až do T. V každém kroku najdeme vhodný řez
Shrnutí Kruskal - Začíná pokrývajícím nesouvislým lesem a ten postupně propojuje. Disjunktní rozklad vrcholů. O(E log E). Prim - Začíná souvislým nepokrývajícím stromem a rozšiřuje ho na celý graf. Binární halda. O((E + V ) log E). Borůvka - Začíná jako Kruskal, ale spojuje komponenty vyváženě. Paralelismus. O(E log V ) vylepšení až O(Eα(V )).
Reálné problémy Elektrická sít. Pro N měst najít propojení elektrickou sítí s minimální délkou (problém prof. Borůvky). Návrh obvobů. Pro N el. vývodů najít propojení ( se stejným potenciálem ) s minimální délkou drátu. Segmentace obrazu. Strom taxonomie. N pojmů (Wikipedie) s definovanou obsahovou podobností. Clustering. Rozdělení velké množiny objektů do tříd podobných objektů. Musí být kvantifikována podobnost. Approximace problému obchodního cestujícího.
Kostra s minimální cenou hrdla. Hrdlem kostry nazveme hranu s maximální váhou. Minimum bottleneck spanning tree (MBST) je kostra s minimální cenou hrdla. Řez je rozdělení vrcholů V = S T na disjunktní množiny Theorem Každá minimální kostra grafu G je zároveň kostrou s minimálním hrdlem. Důkaz: 1. Vlastnost řezu. Pro každý řez S, T grafu G platí, že nejmenší hrana e přes řez (u S, v T ) patří do MST. Alespoň jedna hrana f řezu musí náležet do MST. Sporem e f a w(e) w(f). Použitím e najdu menší kostru. 2. Uvažuju řez S, T procházející hrdlem - maximální hranou a z K MST a libovolnou hranou b z G MBST. Pokud má G levnější hrdlo, je w(b) < w(a), a pak podle vlastnosti řezu b K. Tj. K obsahuje minimálně V hran. Spor K nemůže být strom.
clustering I Člověk to dělá běžně... dělá si škatulky, aby uchopil složitou realitu. Úloha: Je dáno n objektů a jejich vzájemné vzdálenosti d(i, j). Najdi jejich rozdělení do k skupin A i tak, aby separace s byla maximální. s := min i,j d(a i, A j ), d(a i, A j ) := min x A i,y A j d(x, y), MSBT po odstranění hrdla dává 2-clustering. Podobně dále. Přímočarý algoritmus: Provádět Kruskala, dokud počet komponent není k.
Problém obchodního cestujícího Úloha: Jak si má naplánovat cestu po N městech, aby strávil na cestách nejméně času. Grafově: Najdi nejkratší Hamiltonovská kružnice v (úplném) ohodnoceném grafu. (NP-hard) Praktický předpoklad. Platí trojúhelníková nerovnost: d(i, j) d(i, k) + d(k, j)... stále NP-úplný problém. Aproximace.
Aproximace pomocí MST 1. Zvol počáteční vrchol v. Najdi z něj MST pomocí Primova algoritmu. 2. Z kořene v procházej kostru pomocí DF S algoritmu. Urči pořadí uzlů podle previzit. Tato aproximace dává kružnici po všech uzlech, která je max. dvakrát delší než optimální řešení.