Razapinjuće stablo minimalnog stepena
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Minimum_spanning_tree.svg/300px-Minimum_spanning_tree.svg.png)
Minimalno razapinjuće stablo je razapinjuće stablo nekog povezanog, težinskog i neusmerenog grafa koje sadrži sve čvorove tog grafa, a zbir težina njegovih grana je minimalan.
Jedan graf može imati više ovakvih stabala, zavisno od svoje konfiguracije. Ukoliko svakoj grani dodelimo određenu težinu onda je zbir težina grana u nekom razapinjućem stablu u stvari težina tog stabla. Minimalno razapinjuće stablo ili minimalno težinsko razapinjuće stablo je razapinjuće stablo čija je težina manja ili jednaka u odnosu na ostala razapinjuća stabla nekog grafa. Uopštenije, svaki neusmeren graf (ne nužno povezan) ima minimalnu razapinjuću šumu, koja je unija minimalnih razapinjućih stabala.
Postoji dosta slučajeva kada se koriste minimalna razapinjuća stabla. Tipičan problem koji se vezuje za ovo stablo je dostavljanje usluga telekomunikacione kompanije na više lokacija na što isplatljiviji način. Ako se pretpostavi da se kablovi zakopavaju duž određenih puteva (npr. duž kolovoza) onda bismo mogli napraviti graf koji predstavlja koje lokacije su povezane tim putevima. Neki od puteva su duži, ili zahtevaju da kablovi budu dublje zakopani, zbog čega su i skuplji; ti putevi su predstavljeni granama veće težine. Težina grane odgovara troškovima postavljanja kablova - nije neophodno da se dužine grana pridržavaju pravila geometrije kao što je nejednakost trouglova. Razapinjuće stablo tog grafa je podskup onih puteva koji ne obrazuju ciklus, a ipak povezuju sve lokacije; moguće je da postoji nekoliko razapinjućih stabala. Minimalno razapinjuće stablo je ono razapinjuće stablo koje ima najmanju težinu, odnosno čiji je trošak postavljanja kablova najmanji.
Osobine
[uredi | uredi izvor]Mogućnost mnogobrojnosti
[uredi | uredi izvor]![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Multiple_minimum_spanning_trees.svg/220px-Multiple_minimum_spanning_trees.svg.png)
Moguće je da u nekom grafu postoji nekoliko minimalnih razapinjućih stabala iste težine sa minimalnim brojem grana; posebno, ako su sve grane zadatog grafa iste težine, onda je svako razapinjuće stablo tog grafa minimalno.
Ako graf ima čvorova, tada svako razapinjuće stablo ima grana.
Jedinstvenost
[uredi | uredi izvor]Ukoliko svaka grana ima različitu težinu, tada graf sadrži samo jedno jedinstveno minimalno razapinjuće stablo. Ovo je najčešći slučaj u realnim situacijama, kao što je gorenavedeni primer telekomunikacione kompanije, gde je malo verovatno da dva puta snose potpuno iste troškove. Opštije gledano ovo važi i za razapinjuće šume.
Ako težine grana nisu jedinstvene, onda je samo multiskup težina u minimalnom razapinjućem stablu jedinstven, to je zajedničko za sva minimalna razapinjuća stabla.[1]
Dokaz:
- Pretpostavimo suprotno, da postoje dva različita minimalna razapinjuća stabla i .
- Neka je grana najmanje težine koja se nalazi samo u jednom minimalnom razapinjućem stablu. Bez gubitka opštosti, pretpostavimo da se nalazi u i ne nalazi u .
- Kako jeste minimalno razapinjuće stablo mora sadržati ciklus .
- Tada sadrži neku granu čija je težina veća od težine grane , s obzirom da sve grane koje su manje od {} i nalaze se u sadrže se i u , i ciklus mora imati barem jednu granu koja nije u jer u suprotnom bi sadržalo ciklus što je kontradikcija sa tim da je ono i minimalno razapinjuće stablo.
- Zamenom sa u dobija se razapinjuće stablo manje težine.
- Ovo je u suprotnosti sa pretpostavkom da je minimalno razapinjuće stablo.
Podgraf minimalne težine
[uredi | uredi izvor]Ako su sve težine pozitivne tada je minimalno razapinjuće stablo u stvari podgraf minimalne težine koji sadrži sve čvorove, kako podgrafovi sadrže cikluse uglavnom su i veće težine.
Osobina ciklusa
[uredi | uredi izvor]Za svaki ciklus u nekom grafu važi da ako je grana koja se nalazi u ciklusu veće težine od svih drugih grana tog ciklusa, onda ta grana ne može pripadati minimalnom razapinjućem stablu.
Dokaz: Pretpostavimo suprotno, tj. da pripada minimalnom razapinjućem stablu . Tada brisanjem grane se deli na dva podstabla kod kojih se jedan kraj grane nalazi u jednom, a drugi kraj u drugom podstablu. Ostatak ciklusa ponovo povezuje podstabla, pošto postoji grana iz koja ima krajeve u različitim podstablima, tj. ona ponovo povezuje podstabla u stablo težine manje nego , jer je težina manja od težine .
Osobina odsecanja
[uredi | uredi izvor]![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Msp-the-cut-correct.svg/400px-Msp-the-cut-correct.svg.png)
Za svaki odsečak iz nekog grafa važi da ako je težina grane (koja se nalazi u tom odsečku ) striktno manja od težina svih grana iz tog odsečka, onda ta grana pripada svim minimalno razapinjućim stablima tog grafa.
Grana minimalne težine
[uredi | uredi izvor]Ako je grana jedinstvena grana minimalne težine nekog grafa, onda se ona nalazi u svim minimalnim razapinjućim stablima tog grafa.
Dokaz: Pretpostavimo da se ne nalazi u minimalnom razapinjućem stablu, tada uklanjanjem bilo koje grane (veće težine) iz ciklusa koji je formiran nakon što je grana dodana u minimalno razapinjuće stablo se formira novo razapinjuće stablo manje težine.
Kontrakcija
[uredi | uredi izvor]Ako je stablo sastavljeno od grana iz minimalnog razapinjućeg stabla, onda možemo kontrahovati u jedan čvor dok održavamo invarijantu da minimalno razapinjuće stablo kontrahovanog grafa zajedno sa daje minimalno razapinjuće stablo grafa pre kontrakcije.
Algoritmi
[uredi | uredi izvor]U svim algoritmima ispod predstavlja broj grana u grafu dok predstavlja broj čvorova.
Klasičani algoritmi
[uredi | uredi izvor]Prvi algoritam za traženje minimalnog razapinjućeg stabla je razvio Češki naučnik Otakar Boruvka 1926. godine (videti Boruvkin algoritam). Njegova svrha je bila izgradnja električne mreže za Moravsku. Algoritam se izvršava u nekoliko faza. U svakoj fazi, nazvanoj Boruvkin korak, identifikuje se šuma koja se sastoji od grana incidentnih sa svakim čvorom u grafu , zatim formira graf kao ulaz u sledećem koraku. Ovde označava graf dobijen od odsecanjem grana u (Osobina odsecanja). Svaki Boruvkin korak je linearne složenosti. Pošto je broj čvorova redukovan za barem polovinu u svakom koraku, Boruvkin algoritam je složenosti .
Drugi algoritam je Primov algoritam, koji je 1930. godine izumeo Vojteh Jarnik, a kasnije nezavisno od njega informatičar Robert Prim 1957, i ponovo Edsger Dajkstra 1959. Algoritam postepeno povećava veličinu stabla počevši od jednog čvora, dok ne poveže sve čvorove. Složenost Primovog algoritma je ) ili u zavisnosti od strukture podataka koja se koristi.
Treći algoritam koji se često koristi je Kruskalov algoritam koji takođe ima složenost .
Četvrti ne tako često korišćen algoritam je Algoritam obrnutog brisanja koji je suprotan Kruskalovom algoritmu. Njegova složenost je .
Sva četiri algoritma spadaju u pohlepne algoritme.
Brži algoritmi
[uredi | uredi izvor]Nekoliko istraživanja su pokušala da pronađu više računski-efikasnijih algoritama.
U modelu poređenja, u kom su jedine dozvoljene operacije nad težinama grana operacije poređenje parova, Karger, Klejn i Tardžan 1995. godine pronašli su nasumični algoritam u linearnom vremenu baziran na kombinaciji Borvukinog algoritma i algoritma obrnutog brisanja.[2][3]
Najbrži nenasumični baziran na poređenju algoritam sa poznatom složenošću napravljen od strane Bernard Šazela je baziran na približnom prioritetu soft hipa.[4][5] Njegovo vreme izvršavanja je , gde predstavlja klasičnu inverznu funkciju Akermanove funkcije. Funkcija raste ekstremno sporo, tako da se za sve praktične svrhe može posmatrati kao konstanta ne veća od 4; stoga je Šazelov algoritam veoma blizu linearne složenosti.
Algoritam linearne sloeonsti u specijalnim slučajevima
[uredi | uredi izvor]Gusti grafovi
[uredi | uredi izvor]Ako je graf gust tj. , onda Fredmanov i Tardžanov deterministički algoritam pronalazi minimalno razapinjuće stablo za vreme .[6] Algoritam izvršava niz faza. Svaka faza izvršava Primov algoritam mnogo puta, svaki put za ograničen broj koraka. Vreme izvršavanja svake faze je . Ako je broj čvorova pre izvršavanja faze , onda je broj čvorova nakon izvršavanja faze . Stoga je potrebno da se izvrši najviše faza, što nam daje linearno vreme izvršavanja za guste grafove.
Postoje i drugi algoritmi koji rade sa gustim grafovima.[7]
Celobrojne težine
[uredi | uredi izvor]Ako je težina grane ceo broj predstavljen u binarnom zapisu, onda je poznato da deterministički algoritmi rešavaju problem u celobrojnih operacija. Iako se problem može rešiti deterministički za opšti graf u linearnoj složenosti, za algoritme bazirane na poređenju to ostaje otvoreno pitanje.
Stabla odlučivanja
[uredi | uredi izvor]Za zadat graf kod koga su čvorovi i grane fiksirane ali je težina nepoznata, moguće je konstruisati binarno stablo odlučivanja za računanje minimalnog razapinjućeg stabla za bilo koju permutaciju težina. Svaki unutrašnji čvor iz stabla odlučivanja sadrži poređenje između dve grane, npr. „ Da li je težina grane između čvorova i veća od težine grane između čvorova i ?“. Dva deteta čvora odgovaraju odgovorima „da“ ili „ne“. U svakom listu stabla odlučivanja postoji lista grana koja odgovara minimalnom razapinjućem stablu. Složenost izvršavanja stabla odlučivanja jednaka je najvećem broju upita potrebnim da se nađe minimalno razapinjuće stablo, što je u stvari dubina stabla odlučivanja. Stablo odlučivanja za graf je optimalno ako ima najmanju dubinu u odnosu na sva ispravna stabla odlučivanja iz grafa .
Za svaki ceo broj , moguće je pronaći optimalna stabla odlučivanja za sve grafove sa čvorova, pomoću iscrpne pretrage.
A. Generisanje svih potencijalnih stabala odlučivanja
[uredi | uredi izvor]- Postoji različitih grafova sa čvorova.
- Za svaki graf, minimalno razapinjuće stablo se može naći pomoću poređenja, npr. pomoću Primovog algoritma.
- Stoga, dubina optimalnog stabla odlučivanja je .
- Dakle, broj čvorova u optimalnom stablu odlučivanja je manji od .
- Svaki unutrašnjni čvor poredi dve grane. Broj grana je najviše , tako da postoji najviše različitih poređenja.
- Dakle, broj potencijalnih stabala odlučivanja je manji od: .
B. Pronalaženje ispravnih stabala odlučivanja
[uredi | uredi izvor]Da bismo proverili da li je stablo odlučivanja ispravno, potrebno je proveriti ga za sve moguće permutacije težina grana.
- Broj takvih permutacija je najviše .
- Za svaku permutaciju rešava se problem minimalnog razapinjućeg stabla za dat graf koristeći bilo koji postojeći algoritam, i rezultat se poredi sa odgovorom dobijenim iz stabla odlučivanja.
- Vreme izvršavanja bilo kog algoritma za minimalno razapinjuće stablo je najviše , tako da je ukupno vreme da se provere sve permutacije najviše .
Stoga, ukupno vreme koje je potrebno da se pronađe optimalno stablo odlučivanja za sve grafove sa čvorova iznosi: što je manje od: .
Optimalan algoritam
[uredi | uredi izvor]Seth Petit i Vidžaja Ramačandran su pronašli optimalni deterministički baziran na komparaciji algoritam koji pronalazi minimalno razapinjuće stablo. U nastavku je opisan pojednostavljen prikaz algoritma.
- Neka je , gde predstavlja broj čvorova. Potrebno je pronaći sva optimalna stabla odlučivanja sa . Ovo se može uraditi za vreme .
- Podeliti graf na komponente, tako da u svakoj komponenti ima najviše čvorova. Ova podela se može izvršiti za vremena.
- Koristimo optimalno stablo odlučivanja da bismo našli minimalno razapinjuće stablo u svakoj komponenti.
- Kontrahujemo svaku povezanu komponentu obuhvaćenu minimalnim razapinjućim stablom u po jedan čvor.
- Moguće je dokazati da dobijeni graf ima najviše čvorova. Dakle, graf je gust i mi možemo koristiti bilo koji algoritam koji se koristi kod gustih grafova u vremenu .
Vreme izvršavanja svih koraka u algoritmu je , izuzev koraka gde se koriste stabla odlučivanja. Mi ne znamo vreme izvršavanja ovog koraka, ali znamo da je optimalno - nijedan algoritam ne može dati bolji rezutat od optimalnog stabla odlučivanja.
Prema tome, ovaj algoritam ima čudnu osobinu da je dokazivo optimalan iako je njegova složenost nepoznata.
Paralelni i raspodeljeni algoritmi
[uredi | uredi izvor]Pri istraživanju problema minimalnog razapinjućeg stabla uzeti su u obzir i paralelni algoritmi. Sa linearnim brojem procesora moguće je rešiti ovaj problem za vremena. Bader i Čong 2006. godine su demonstrirali algoritam koji može da pronađe minimalna razapinjuća stabla 5 puta brže na 8 procesora nego optimizovani sekvencijalni algoritam.
Ostali specijalizovani algoritmi dizajnirani za nalaženje minimalnog razapinjućeg stabla su toliko veliki da većim delom moraju biti čuvani na disku sve vreme. Ovi algoritmi sa spoljašnjim skladištenjem, kao na primer oni koji su opisani u radu „Konstrukcija algoritma za pronalaženje minimalnog razapinjućeg stabla koji koristi eksternu memoriju“ od Romana Dementijeva mogu, se izvršavati, kako autor tvrdi, 2 do 5 puta sporije nego tradicionalni algoritmi koji koriste unutrašnju memoriju. Oni se oslanjaju na efikasno spoljašnje sortiranje i na kontrakciju grafa - tehniku za efikasno smanjenje veličine grafa.
Problemu se takođe može pristupiti pomoću raspodeljenog izračunavanja. Ako se svaki čvor posmatra kao računar i nijedan čvor ne zna ništa sem veza sa kojima je povezan, jedan sigurno može pronaći distribuirano minimalno razapinjuće stablo.
Minimalno razapinjuće stablo u kompletnim grafovima
[uredi | uredi izvor]Alan M. Friz je pokazao da zadat kompletan graf sa čvorova, koji ima grane čije su težine nezavisne identično raspoređene slučajne promenljive sa funkcijom raspodele zadovoljava , i kako prilazi +∞ očekivana težina minimalnog razapinjućeg stabla se približava , gde predstavlja Rimanovu zeta-funkciju. Friz i Stil su takođe dokazali konvergenciju u verovatnoći. Svante Janson je dokazao centralnu graničnu teoremu za težinu minimalnog razapinjućeg stabla.
Za nasumično odabrane težine iz intervala ,tačna očekivana veličina minimalnog razapinjućeg stabla je izračunata za male kompletne grafove.
Čvorovi | Očekivana veličina | Približna očekivana veličina |
---|---|---|
2 | 1 / 2 | 0.5 |
3 | 3 / 4 | 0.75 |
4 | 31 / 35 | 0.8857143 |
5 | 893 / 924 | 0.9664502 |
6 | 278 / 273 | 1.0183151 |
7 | 30739 / 29172 | 1.053716 |
8 | 199462271 / 184848378 | 1.0790588 |
9 | 126510063932 / 115228853025 | 1.0979027 |
Aplikacije
[uredi | uredi izvor]Srodni problemi
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ Do the minimum spanning trees of a weighted graph have the same number of edges with a given weight?
- ^ Karger, David R.; Klein, Philip N.; Tarjan, Robert E. (1995), „A randomized linear-time algorithm to find minimum spanning trees”, Journal of the Association for Computing Machinery, 42 (2): 321—328, MR 1409738, doi:10.1145/201019.201022
- ^ Pettie, Seth; Ramachandran, Vijaya (2002), „Minimizing randomness in minimum spanning tree, parallel connectivity, and set maxima algorithms”, Proc. 13th ACM-SIAM Symposium on Discrete Algorithms (SODA '02), San Francisco, California, str. 713—722.
- ^ Chazelle, Bernard (2000), „A minimum spanning tree algorithm with inverse-Ackermann type complexity”, Journal of the Association for Computing Machinery, 47 (6): 1028—1047, MR 1866456, doi:10.1145/355541.355562.
- ^ Chazelle, Bernard (2000), „The soft heap: an approximate priority queue with optimal error rate”, Journal of the Association for Computing Machinery, 47 (6): 1012—1027, MR 1866455, doi:10.1145/355541.355554.
- ^ Fredman, M. L.; Tarjan, R. E. (1987). „Fibonacci heaps and their uses in improved network optimization algorithms”. Journal of the ACM. 34 (3): 596. doi:10.1145/28869.28874.
- ^ Gabow, H. N.; Galil, Z.; Spencer, T.; Tarjan, R. E. (1986). „Efficient algorithms for finding minimum spanning trees in undirected and directed graphs”. Combinatorica. 6 (2): 109. doi:10.1007/bf02579168.