Viaceré problémy z teórie grafov sa týkajú konštrukcie stromov, ktoré spájajú všetky vrcholy grafu špecifickým spôsobom; najznámejším z nich je minimálny rozprestierajúci sa strom (MST, z anglického minimum spanning tree). V teórii grafov je strom taký podgraf, ktorý spája všetky vrcholov bez cyklov — teda medzi ľubovoľnými dvoma vrcholmi existuje práve jedna cesta. Ak graf modeluje napríklad miest spojených cestami, strom rozprestierajúci sa dá predstaviť ako výber takého počtu ciest, aby bolo možné dostať sa z každého mesta do každého iného, pričom medzi dvoma mestami vedie najviac jedna cesta (a celkový počet vybraných ciest je minimálny, aby nevznikol cyklus).

Definícia

Pre ohodnotený súvislý neorientovaný graf G = (V, E, w), kde w: E → R je funkcia priraďujúca každé hrane reálnu váhu, je minimálny rozprestierajúci sa strom taký podgraf T = (V, E_T), kde E_T ⊆ E, ktorý je stromom (spája všetky vrcholy a neobsahuje cykly) a minimalizuje súčet váh vybraných hrán:

w(E_T) = Σ_{e ∈ E_T} w(e) je minimálne možné medzi všetkými stromami grafu G.

Vlastnosti MST

  • Súvislosť a bezcyklovosť: MST obsahuje |V| − 1 hrán a spája všetky vrcholy bez cyklov.
  • Jednoznačnosť: Ak sú všetky hrany rôznych váh (žiadne dve hrany nemajú rovnakú váhu), MST je jedinečný. Ak však existujú rovnaké váhy, môže existovať viacero rôznych MST s rovnakou celkovou váhou.
  • Vlastnosť rezu (cut property): Pre ľubovoľné rozdelenie vrcholov na dve množiny S a V\S, najľahšia hrana medzi týmito množinami musí patriť aspoň jednému MST. Táto vlastnosť je základom correctness viacerých algoritmov (napr. Kruskalovho a Borůvkovho).
  • Vlastnosť cyklu (cycle property): V každom cykle v grafe najťažšia hrana nie je súčasťou žiadneho MST (ak viaceré hrany majú rovnakú najvyššiu váhu, aspoň jedna z najťažších nie je v žiadnom MST).

Najpoužívanejšie algoritmy

Najčastejšie používané algoritmy na nájdenie MST sú Kruskalov algoritmus, Primov algoritmus a Borůvkov algoritmus. Všetky sú založené na vyššie uvedených vlastnostiach (rez a cyklus) a líšia sa spôsobom, akým postupne vyberajú hrany.

  • Kruskalov algoritmus:
    • Ide tak, že zoradíme všetky hrany podľa váhy vzostupne a postupne berieme najľahšie hrany, ktoré nepridajú cyklus do momentálneho lesu.
    • Na detekciu cyklov sa používa dátová štruktúra disjoint-set union (zjednocovanie z množín, tzv. union–find) s heuristikami ako path compression a union by rank.
    • Časová zložitosť: O(E log E) pre bežné implementácie (zoradenie hrán dominuje). Pri efektívnom zoradení a union-find je to typicky O(E log V).
  • Primov algoritmus:
    • Začína v ľubovoľnom vrchole a postupne rozširuje strom pridaním najľahšej hrany, ktorá spája už vybrané vrcholy s nevybranými.
    • Efektívna implementácia využíva prioritnú frontu (napr. binárnu haldu alebo fibonacciho haldu). Pri binárnej halde je časová zložitosť O(E log V), pri fibonacciho halde O(E + V log V).
    • Je vhodný pre husté grafy, keďže nepotrebuje úplné zoradenie všetkých hrán.
  • Borůvkov algoritmus:
    • Paralelizovateľný prístup: v každom kroku každá komponenta vyberie svoju najľahšiu vychádzajúcu hranu a tieto hrany sa pridajú; komponenty sa zlučujú a proces sa opakuje, až kým nezostane jeden strom.
    • Má logaritmický počet iterácií a je základom niektorých paralelných alebo distribuovaných riešení MST.

Komplexnosť a implementačné poznámky

  • Pre graf s V vrcholmi a E hranami sú bežné časové zložkosti:
    • Kruskal: O(E log E) ≈ O(E log V)
    • Prim (s binárnou haldou): O(E log V)
    • Prim (s fibonacciho haldou): O(E + V log V)
  • Pri implementácii Kruskalovho algoritmu je kľúčová efektívna implementácia union–find.
  • Pamäťová náročnosť je typicky O(E + V), pretože treba uložiť zoznam hrán (alebo susedností) a pomocné štruktúry.

Aplikácie

MST má široké uplatnenie v praxi, napríklad:

  • navrhovanie lacných komunikačných alebo elektrických sietí (minimálne náklady prepojenia uzlov),
  • klasifikácia a zhlukovanie dát (napr. single-linkage clustering),
  • konštrukcia kostry v počítačovej grafike a výpočtových problémoch,
  • algoritmické rozhodovanie v geometrii (napr. pri spojovaní bodov podľa vzdialeností).

Príklady a poznámky

V grafe, kde majú všetky hrany rovnakú váhu, je každý strom rozpätia zároveň minimálnym rozpínacím stromom, pretože všetky majú rovnakú celkovú váhu. Naopak, ak sú váhy všetkých hrán rôzne, MST je jednoznačný. Pri rovnakých váhach je dobré si uvedomiť, že rôzne algoritmy (resp. rôzne rozhodovacie poradie pri rovných váhach) môžu viesť k rôznym konkrétnym MST, ale všetky majú rovnakú celkovú váhu.

Pre praktické použitie sa odporúča:

  • pre riedke grafy použiť Kruskal alebo Prim s vhodnou prioritnou frontou,
  • pre husté grafy zvážiť Primov algoritmus s maticou sousednosti alebo efektívnou haldou,
  • pri paralelnom spracovaní/potrebách distribuovaného výpočtu zvážiť Borůvkov prístup.

Minimálny rozpínací strom je preto základným a zároveň prakticky veľmi užitočným pojmom v teórii grafov sa a v aplikovaných algoritmických disciplínach.