Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Binarna stabla. Minimalna razapinjuća stabla
Tomislav Bujanović
Sveučilište u ZagrebuPMF-MO
1. srpnja 2016.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 1 / 18
Sadržaj
1 Osnovne definicije uz grafove
2 Pojam stabla
3 Minimalna razapinjuća stabla (MST)
4 Literatura
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 2 / 18
Općenito o grafovima
DefinicijaGraf je uređeni par skupova (V ,E ), gdje je V skup vrhova, a E skup2-podskupova od V, koje zovemo bridovi.
DefinicijaStupanj vrha v grafa G definiramo kao broj bridova grafa G koji sadrže vrhv .
Ponekad, ako zadamo težine bridovima ili vrhovima, govorimo o težinskomgrafu.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 3 / 18
Općenito o grafovima (II)
DefinicijaPodgraf grafa G = (V ,E ) je graf kojemu su skup vrhova i skup bridovapodskupovi od V i E , redom.
DefinicijaRazapinjući podgraf je graf oblika G ′ = (V ,E ′), gdje je E ′ ⊆ E .
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 4 / 18
Što je stablo?
DefinicijaStablo je povezan graf bez ciklusa.Binarno stablo je stablo u kojem svaki čvor ima najviše dvoje djece. U tomslučaju, razlikujemo lijevo i desno dijete.
Jedan primjer binarnog stabla:
a
b c
d e
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 5 / 18
TeoremPovezani graf s n vrhova ima barem n − 1 bridova, a točno n − 1 bridovaako i samo ako je stablo.
Dokaz.Pokažimo najprije da stablo ima n − 1 bridova. To dokazujemomatematičkom indukcijom.Ako n = 1, radi se o samo jednom čvoru, pa je očito broj bridova 0 = 1 - 1.Ako n = 2, budući da je stablo povezan graf, onda je broj bridova jednak 1.
Pretpostavimo da stablo s n − 1 vrhova ima n − 2 bridova. Neka je v list ustablu S koje sadrži n vrhova. Tada S − v ima n − 1 vrhova i ne sadržicikluse. Također, očito je S − v povezan graf, jer put u S između x , y 6= vne može prolaziti kroz v (jer je v list). Dakle, S − v je stablo. Popretpostavci S − v ima n − 2 bridova, pa S ima n − 1 brid.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 6 / 18
TeoremPovezani graf s n vrhova ima barem n − 1 bridova, a točno n − 1 bridovaako i samo ako je stablo.
Dokaz (Nast.)Dokažimo sada i drugi dio.Neka je G neki povezan graf s n vrhova i pretpostavimo da G nije stablo.Tada G sadrži ciklus. Neka je e brid u tom ciklusu, i neka je G1 = G − e.Tada je G1 i dalje povezan. Ako nastavimo ovaj postupak, u nekomtrenutku, recimo nakon k koraka, dolazimo do stabla. Dakle, G iman − 1+ k bridova. Specijalno, ako G ima n − 1 bridova, slijedi da G nesadrži ciklus, dakle G je stablo.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 6 / 18
DefinicijaPotpuno binarno stablo je stablo koje je građeno od n čvorova, s oznakama0, 1, . . . , n − 1, pri čemu vrijedi:
lijevo dijete čvora i je čvor 2i + 1 (ako je 2i + 1 > n − 1, tada čvornema lijevo dijete )desno dijete čvora i je čvor 2i + 2 (ako je 2i + 2 > n − 1, tada čvornema desno dijete )
Uočimo da na i-toj razini potpunog binarnog stabla ima najviše 2i−1
čvorova. Na svim razinama do tada ima ukupno 2i−1 − 1 čvorova, zai > 1. Stablo s k razina ima najviše 2k − 1 čvorova. Stablo s k − 1 razinaima najviše 2k−1 − 1 čvorova. Ako je stablo potpuno, započeta jeposljednja razina, pa vrijedi
2k−1 − 1 < n ≤ 2k − 1 (1)
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 7 / 18
KorolarNeka potpuno binarno stablo sadrži n čvorova, te neka je k visina togstabla. Tada vrijedi:
k = dlog2(n + 1)e . (2)
Dokaz.Iz (1) imamo:
2k−1 < n + 1⇒ (k − 1) log2 2 < log2(n + 1)⇒ k < log2(n + 1) + 1 (3)
n + 1 ≤ 2k ⇒ log2(n + 1) ≤ k log2 2⇒ log2(n + 1) ≤ k (4)
Iz (3) i (4) slijedi log2(n + 1) ≤ k < log2(n + 1) + 1, tj. vrijedi (2).
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 8 / 18
Primjer - visina stabla
Primjeri uporabe prethodnog korolara:Za n = 13 imamo da je visina stabla:
sage: ceil( log(13)/log(2) )4
0
1
3
7 8
4
9 10
2
5
11 12
6
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 9 / 18
Minimalna razapinjuća stabla
Minimalno razapinjuće stablo je stablo koje povezuje sve vrhove nekog(težinskog) grafa, pri čemu je ukupna suma težina svih bridova minimalna.
Sljedeća tablica sadrži popis i karakteristike najpoznatijih algoritama koji sekoriste za pronalaženje MST-a.
Algoritmi za MSTIme autora Složenost Karakteristike
Prim O(E logV ) greedyKruskal O(E logV ) greedy
Boruvka O(E logV )greedy, sve težinebridova su različite
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 10 / 18
Primov algoritam
Algorithm 1 Primov algoritam
1: inicijaliziraj stablo T s proizvoljnim čvorom grafa2: od svih bridova koji povezuju stablo T s nekim čvorom grafa koji nije u
T, odaberi onaj najmanje težine3: ponavljaj korak 2 dok T ne sadrži sve vrhove početnog grafa
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 11 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b
d
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b
d
c
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b
d
c
e
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Primov algoritam - primjer
Ukupna težina: 2+ 5+ 3+ 5+ 2 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b
d
c
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 12 / 18
Kruskalov algoritam
Algorithm 2 Kruskalov algoritam
1: neka je F šuma koja se sastoji od čvorova stabla gdje svaki čvor pred-stavlja zasebno stablo
2: neka je S skup svih bridova u grafu3: while S je neprazan i F nije razapinjuće stablo do4: makni brid koji ima najmanju težinu u S5: ako taj brid povezuje dva stabla u F, dodaj ga u F6: end while
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 13 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Kruskalov algoritam - primjer
Ukupna težina: 2+ 2+ 3+ 5+ 5 = 17.
a
b c
d
ef
2
8
5
63
5
57
6
2
a
b c
d
ef
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 14 / 18
Uporabom Sage-a možemo provjeriti rezultat:
sage: from sage.graphs.spanning_tree import kruskalsage: G = Graph({’a’:{’b’:2, ’d’:5, ’f’:6}, ’b’:{’c’:8, ’d’
:6}, ’c’:{’d’:3, ’e’:5}, ’e’:{’d’:6, ’f’:2}})sage: G.weighted( True )Nonesage: E = kruskal( G, check = True )sage: E[(’a’, ’b’, 2), (’a’, ’d’, 5), (’c’, ’d’, 3), (’c’, ’e’, 5)
, (’e’, ’f’, 2)]
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 15 / 18
Dokaz korektnosti Kruskalovog algoritma
TvrdnjaDobiven podgraf je razapinjuće stablo početnog grafa.
Dokaz.Neka je T podgraf dobiven Kruskalovim algoritmom. Očito T ne možeimati ciklus, jer svaki brid koji se dodaje povezuje dva (različita) podstabla.T ne može biti nepovezan, jer bi to značilo da ne postoji brid koji bipovezao neke dvije komponente, a što bi bilo u kontradikciji spretpostavkom da je početni graf povezan.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 16 / 18
Dokaz korektnosti Kruskalovog algoritma (II)
TvrdnjaDobiveno razapinjuće stablo je minimalno.
Dokaz.Matematičkom indukcijom dokazujemo sljedeću propoziciju P :Ako je E skup odabranih bridova u nekom koraku algoritma, tada postojiMST koji sadrži E .
Baza:Očito P vrijedi na početku jer svaki graf sadrži minimalno razapinjućestablo.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 17 / 18
Dokaz korektnosti Kruskalovog algoritma (II)
TvrdnjaDobiveno razapinjuće stablo je minimalno.
Dokaz (Nast.)Korak:Neka je sada P istinit u nekom (ne konačnom) koraku algoritma, te neka jeT MST koji sadrži E . Ako je sljedeći odabrani brid e također u T , tada jeP točna za E + e. U suprotnom, T + e ima ciklus C i postoji brid f koji jeu C , a nije u E . Tada je T − f + e stablo, i ima istu težinu kao i T , budućida je T imao najmanju težinu, a f ima težinu koja je veća ili jednaka težiniod e. Dakle, T − f + e je MST koji sadrži F + e, pa P vrijedi.
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 17 / 18
Literatura
https://en.wikipedia.org/wiki/Prim’s algorithmhttps://en.wikipedia.org/wiki/Kruskal’s algorithmI. Nakić, "Predavanja iz Diskretne matematike", ht-tps://web.math.pmf.unizg.hr/nastava/komb/predavanja/predavanja.pdf
Tomislav Bujanović Binarna stabla. Minimalna razapinjuća stabla 1. srpnja 2016. 18 / 18