Minimálny rozpínací strom (MST): definícia, vlastnosti a algoritmy
Minimálny rozpínací strom (MST): zrozumiteľná definícia, kľúčové vlastnosti a praktické algoritmy (Kruskal, Prim) pre efektívne riešenie grafových problémov.
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.

Minimálny strom rovinného grafu. Každá hrana je označená svojou váhou, ktorá je tu približne úmerná jej dĺžke.
Nájdenie minimálneho rozprestierajúceho sa stromu
Prvý pokus
Môže byť veľmi jednoduché vytvoriť algoritmus, ktorý objaví minimálny rozprestierajúci sa strom:
funkcia MST(G,W): T = {} kým T netvorí rozprestierajúci sa strom: nájdite minimálnu váženú hranu v E, ktorá je bezpečná pre T T = T union {(u,v)} return TV tomto prípade "bezpečné" znamená, že zahrnutie hrany nevytvára v grafe cyklus. Cyklus znamená, že sa začína v určitom vrchole, prechádza sa do niekoľkých ďalších vrcholov a končí sa opäť vo východiskovom bode bez toho, aby sa dvakrát použila tá istá hrana.
História
Český vedec Otakar Borůvka vyvinul v roku 1926 prvý známy algoritmus na nájdenie minimálneho rozvetvenia stromu. Chcel vyriešiť problém nájdenia efektívneho pokrytia Moravy elektrickou energiou. Dnes je tento algoritmus známy ako Borůvkov algoritmus. Dnes sa bežne používajú ďalšie dva algoritmy. Jeden z nich vyvinul Vojtěch Jarník v roku 1930 a do praxe ho uviedol Robert Clay Prim v roku 1957. Edsger Wybe Dijkstra ho znovu objavil v roku 1959 a nazval ho Primov algoritmus. Druhý algoritmus sa nazýva Kruskalov algoritmus a v roku 1956 ho vytiahol Joseph Kruskal. Všetky tri algoritmy sú chamtivé a bežia v polynomiálnom čase.
Doteraz najrýchlejší algoritmus minimálneho rozprestierajúceho sa stromu vyvinul Bernard Chazelle. Algoritmus je založený na mäkkej halde, približnom prioritnom fronte. Jeho čas behu je O(m α(m,n)), kde m je počet hrán, n je počet vrcholov a α je klasická funkčná inverzia Ackermannovej funkcie. Funkcia α rastie extrémne pomaly, takže pre všetky praktické účely ju možno považovať za konštantu nie väčšiu ako 4; Chazelleho algoritmus teda trvá veľmi blízko lineárneho času.
Aký je najrýchlejší možný algoritmus pre tento problém? To je jedna z najstarších otvorených otázok v informatike. Jednoznačne existuje lineárna dolná hranica, pretože musíme preskúmať aspoň všetky váhy. Ak sú váhy hrán celé čísla s ohraničenou bitovou dĺžkou, potom sú známe deterministické algoritmy s lineárnym časom behu. Pre všeobecné váhy existujú randomizované algoritmy, ktorých očakávaný čas behu je lineárny.
K problému možno pristupovať aj distribuovaným spôsobom. Ak je každý uzol považovaný za počítač a žiadny uzol nepozná nič okrem svojich vlastných pripojených spojení, stále je možné vypočítať distribuovaný minimálny rozprestierajúci sa strom.
Otázky a odpovede
Otázka: Čo je v teórii grafov strom minimálneho rozpätia?
Odpoveď: Minimálny rozpínací strom je v teórii grafov strom, ktorý minimalizuje celkové váhy priradené k hranám.
Otázka: Čo je to strom v teórii grafov?
Odpoveď: Strom je spôsob spojenia všetkých vrcholov v teórii grafov tak, aby z ktoréhokoľvek vrcholu do ktoréhokoľvek iného vrcholu stromu viedla len jedna cesta.
Otázka: Aký je účel výberu ciest v scenári teórie grafov, ktorý predstavuje mestá?
Odpoveď: Účelom výberu ciest v scenári teórie grafov, ktorý predstavuje mestá, je umožniť, aby sa do každého mesta dalo dostať z každého iného mesta, ale aby neexistovala viac ako jedna možná cesta z jedného mesta do druhého.
Otázka: Môže mať graf viac ako jeden rozprestierajúci sa strom?
Odpoveď: Áno, graf môže mať viac ako jeden strom rozpätí.
Otázka: Aký je rozdiel medzi minimálnym stromom rozpätia a inými stromami v teórii grafov?
Odpoveď: Minimálny strom minimalizuje celkové váhy priradené k hranám, zatiaľ čo ostatné stromy túto vlastnosť nemajú.
Otázka: Čo sú hrany v teórii grafov?
Odpoveď: Hrany sú v teórii grafov spojenia medzi dvoma vrcholmi.
Otázka: Môže v grafe existovať viac ako jeden minimálny rozpínací strom s rôznymi váhami hrán?
Odpoveď: Áno, v závislosti od toho, ako graf vyzerá, môže existovať viac ako jeden minimálny rozpínací strom.
Prehľadať