Minimalaus svorio aprėpiantis medis – apibrėžimas ir savybės (MST)

Sužinokite, kas yra minimalaus svorio aprėpiantis medis (MST): apibrėžimas, savybės, reikšmė grafų teorijoje ir populiariausi algoritmai bei praktiniai panaudojimai.

Autorius: Leandro Alegsa

Keletas grafų teorijos uždavinių yra vadinami minimaliuoju besidriekiančiu medžiu (angl. Minimum Spanning Tree, sutrumpintai MST). Paprastai kalbant, medis grafų teorijoje yra ryšingas aciklinis grafas: jis sujungia visas viršūnes taip, kad iš bet kurios viršūnės į bet kurią kitą egzistuoja lygiai vienas kelias. Jei grafas vaizduoja kelis miestus, sujungtus keliais, galima pasirinkti tokią kelių aibę, kad kiekvieną miestą būtų galima pasiekti iš kiekvieno kito, tačiau iš vieno miesto į kitą būtų kelias tik vienas — tai ir būtų medžio pavidalo sujungimas miestų tinkle.

Kas yra minimalaus svorio aprėpiantis medis?

Minimalaus svorio aprėpiantis medis (MST) yra medžio pavidalo aprėpiantis grafas, kuris apima visas pradinio grafo viršūnes ir kurio briaunų svorių suma yra mažiausia iš visų galimų aprėpiančių medžių. Jei grafas yra susvertintas (t. y. kiekviena briauna turi skaičiaus tipo svorį: ilgį, kainą ar laiką), MST suranda būdą sujungti visas viršūnes su mažiausiomis bendromis sąnaudomis.

Savybės ir pastebėjimai

  • Gali būti daugiau nei vienas aprėpiantis medis. Jei visos briaunos turi vienodą svorį, visi medžiai yra minimalūs.
  • Jei visos briaunos turi skirtingus svorius (t. y. nėra dviejų briaunų su vienodais svoriais), MST yra unikalus.
  • Jei grafas nesusietas (disconnected), problema pereina į minimalių svorių miško (minimum spanning forest) radimą — MST kiekvienai susietai komponentui.
  • MST niekada nesudarys ciklo (jis yra medis), taigi turi lygiai V−1 briaunų, jeigu grafas turi V viršūnių ir yra susietas.

Algoritmai

Paprastai naudojami trys pagrindiniai MST algoritmai:

  • Kruskal: rūšiuoja visas briaunas pagal svorį ir prideda jas viena po kitos (nuo mažiausios), jei jos nesukuria ciklo. Dažnai įgyvendinamas su Union-Find (susivienijimo–radimo) duomenų struktūra. Laiko sudėtingumas: O(E log E) ≈ O(E log V).
  • Prim: pradeda nuo vienos viršūnės ir nuolatos prijungia prie jau sukurto medžio mažiausios kainos briauną, vedančią į dar neprijungtą viršūnę. Įgyvendinus su binarine kauke (binary heap) — O(E log V), su Fibonacci kauke — O(E + V log V).
  • Borůvka: keliais etapais prijungia kiekvienos komponentės mažiausios svorio briaunas, kol lieka vienas medis. Gali būti naudingas lygiagrečiai vykdomose arba greituose algoritminiuose sprendimuose.

Teoriniai pagrindai — ciklo ir užtvaros savybės

  • Užtvaros (cut) savybė: tarp bet kurios grafo užtvaros (t. y. padalijus viršūnes į dvi dalis) mažiausios svorio briauna, jungiančią tas dvi dalis, priklauso bent vienam MST. Tai leidžia saugiai pasirinkti mažiausias briaunas tarp komponentų (naudinga Kruskal ir Borůvka algoritmams).
  • Ciklo savybė: bet kuriame cikle grafe briauna didžiausiu svoriu niekada nepriklauso jokiam MST (jei tokia briauna yra unikali cikle). Tai paaiškina, kodėl pridedant mažesnio svorio briaunas cikle galima visada pašalinti didžiausią.

Unikalumas ir lygi svoris

Jei nėra lygių svorių tarp briaunų (visi svoriai skirtingi), MST yra vienintelis. Tačiau kai kelios briaunos turi vienodą svorį, gali egzistuoti keli skirtingi MST su ta pačia bendra svorio suma.

Praktiniai panaudojimai

  • Tinklų projektavimas: elektros linijų, telefoninių ar kompiuterių tinklų klojimas siekiant minimizuoti kainas.
  • Transporto ir logistikos optimizavimas: maksimaliai pigus kelių ar vamzdynų tinklas.
  • Klasifikacija ir duomenų segmentavimas: MST naudojamas duomenų klasterizavimui bei hierarchinei klasterizacijai.
  • Mažinimo problemos sprendimas grafų vizualizacijoje ar aproksimacijoms sudėtingesnėse optimizavimo problemose.

Laiko sudėtingumas ir įgyvendinimo pastabos

  • Kruskal: reikia rūšiuoti E briaunų → O(E log E). Union-Find su heuristikomis (path compression ir union by rank) užtikrina beveik amortizuotą konstantinį radimo/laidojungimo veiksmų laiką.
  • Prim: su prioritetine eile (heap) — O(E log V); su Fibonacci heap — O(E + V log V), tačiau Fibonacci heap retai naudojama praktikoje dėl žymios sudėtingumo realiame kode.
  • Borůvka: O(E log V) — kartais efektyvu kartu su kitais metodais.

Variantai ir praplėtimai

  • Maximum spanning tree — analogiškas MST, bet maksimalizuoja briaunų sumą (naudojamas zonoje, kur norima didžiausio srauto ar patikimumo).
  • Steinerio medis — leidžia pridėti papildomas (neprivalomas) viršūnes (Steinerio taškus) tam, kad suma briaunų būtų dar mažesnė; problema yra NP-sunki.
  • Minimum spanning forest — MST kiekvienai susietai komponentui, jeigu grafas nėra susietas.

Trumpas pavyzdys mintyse

Tarkime, turime keturias miestų viršūnes A, B, C, D ir svorius tarp jų: A–B (1), A–C (3), B–C (2), B–D (4), C–D (5). Kruskal algoritmas rūšiuotų briaunas: 1, 2, 3, 4, 5. Paimtų A–B (1), B–C (2) (dabar A, B, C sujungtos), tada prijungtų B–D (4) — suformuojamas medis su suma 1+2+4 = 7. Prim algoritmas, pradėjęs nuo A, gautų tą patį rezultatą.

Išvados

MST yra pagrindinė ir plačiai taikoma užduotis grafų teorijoje, svarbi tiek teorijoje, tiek praktikoje. Žinant pagrindinius algoritmus (Kruskal, Prim, Borůvka) ir pagrindines savybes (užtvaros ir ciklo savybes), galima efektyviai rasti optimalų sprendimą daugeliui realių problemų, susijusių su tinklų projektavimu ir optimizavimu.

Plokščiojo grafo minimalus ištęstinis medis. Kiekviena briauna pažymėta jos svoriu, kuris čia maždaug proporcingas jos ilgiui.Zoom
Plokščiojo grafo minimalus ištęstinis medis. Kiekviena briauna pažymėta jos svoriu, kuris čia maždaug proporcingas jos ilgiui.

Minimalaus besidriekiančio medžio radimas

Pirmasis bandymas

Gali būti labai paprasta sukurti algoritmą, kuris atrastų minimalųjį ištęstinį medį:

 funkcija MST(G,W):     T = {} kol T nesudaro medžio: suraskite mažiausią E svertinę briauną, kuri yra saugi T T = T sąjunga {(u,v)} grąžinti T

Šiuo atveju "saugus" reiškia, kad, įtraukus briauną, grafas nesudaro ciklo. Ciklas reiškia, kad pradedama nuo viršūnės, keliaujama į kelias kitas viršūnes ir vėl baigiama pradiniame taške, nenaudojant tos pačios briaunos du kartus.

Istorija

1926 m. čekų mokslininkas Otakaras Borůvka sukūrė pirmąjį žinomą algoritmą, skirtą mažiausiam medžiui rasti. Jis norėjo išspręsti efektyvaus Moravijos padengimo elektra problemą. Šiandien šis algoritmas žinomas kaip Borůvkos algoritmas. Šiandien plačiai naudojami dar du algoritmai. Vieną iš jų 1930 m. sukūrė Vojtěchas Jarnikas (Vojtěch Jarník), o 1957 m. jį praktiškai pritaikė Robertas Klėjus Primas (Robert Clay Prim). Edsgeris Vybe Dijkstra jį iš naujo atrado 1959 m. ir pavadino Prim'o algoritmu. Kitas algoritmas vadinamas Kruskalio algoritmu, jį 1956 m. ištraukė Josephas Kruskalis. Visi trys algoritmai yra godūs ir veikia per polinominį laiką.

Greičiausią iki šiol minimalaus besidriekiančio medžio algoritmą sukūrė Bernardas Chazelis. Algoritmas pagrįstas minkštąja krūva - apytiksle prioritetų eile. Jo veikimo laikas yra O(m α(m,n)), kur m - briaunų skaičius, n - viršūnių skaičius, o α - klasikinė funkcinė atvirkštinė Ackermanno funkcija. Funkcija α auga labai lėtai, todėl visais praktiniais tikslais ją galima laikyti konstanta, ne didesne kaip 4; taigi Chazelle'io algoritmas trunka labai arti tiesinio laiko.

Koks yra greičiausias įmanomas šio uždavinio algoritmas? Tai vienas seniausių atvirų informatikos klausimų. Akivaizdu, kad yra tiesinė apatinė riba, nes turime bent jau patikrinti visus svorius. Jei briaunų svoriai yra sveikieji skaičiai su ribotu bitų ilgiu, tada žinomi deterministiniai algoritmai su tiesiniu veikimo laiku. Bendriesiems svoriams yra atsitiktinių imčių algoritmų, kurių tikėtinas vykdymo laikas yra tiesinis.

Problemą taip pat galima spręsti paskirstytuoju būdu. Jei kiekvienas mazgas laikomas kompiuteriu ir nė vienas mazgas nežino nieko, išskyrus savo sujungtas jungtis, vis tiek galima apskaičiuoti paskirstytąjį minimalųjį ištęstinį medį.

Klausimai ir atsakymai

Klausimas: Kas grafų teorijoje yra mažiausias apimantis medis (angl. minimum spanning tree)?


Atsakymas: Grafų teorijoje minimalus medis - tai medis, kuris minimizuoja bendrą briaunoms priskirtų svorių sumą.

K: Kas yra medis grafų teorijoje?


A: Grafų teorijoje medis yra būdas sujungti visas viršūnes taip, kad iš bet kurios viršūnės į bet kurią kitą medžio viršūnę būtų tik vienas kelias.

K: Kokiu tikslu grafų teorijos scenarijuje, kuriame vaizduojami miestai, pasirenkami keliai?


A: Grafų teorijos scenarijuje, kuriame vaizduojami miestai, keliai parenkami taip, kad kiekvieną miestą būtų galima pasiekti iš kiekvieno kito miesto, tačiau iš vieno miesto į kitą būtų galima keliauti tik vienu keliu.

Klausimas: Ar grafas gali turėti daugiau nei vieną besidriekiantį medį?


A: Taip, grafas gali turėti daugiau nei vieną atraminį medį.

K: Kuo skiriasi minimalus medis nuo kitų grafų teorijoje naudojamų medžių?


A: Minimalus medis minimizuoja bendrą briaunų svorį, o kiti medžiai šios savybės neturi.

K: Kas grafų teorijoje yra briaunos?


Atsakymas: Grafų teorijoje briaunos yra ryšiai tarp dviejų viršūnių.

Klausimas: Ar gali būti daugiau nei vienas minimalus medis grafe su skirtingais briaunų svoriais?


A: Taip, priklausomai nuo grafo išvaizdos, gali būti daugiau nei vienas minimalus erdvinis medis.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3