Teória grafov Stromy a kostry 1. časť
Definícia: Graf G=(V, E) nazývame strom, ak neobsahuje kružnicu ako podgraf
Definícia Strom T=(V, E T ) nazývame koreňový strom ak máme v ňom pevne vybraný vybraný v k vrchol, ktorý nazveme koreň a budeme ho označovať T = ( V, E T, v k ) C v k, v Dĺžku cesty budeme nazývať úroveň vrcholu v ( ) Číslo max d v k, v budeme nazývať hĺbka koreňového v V stromu.
Príklad
Dôležité pojmy v k vnútorný vrchol list predkovia v v k otec (rodič) syn (dieťa) potomkovia koncový vrchol
Definícia Koreňový strom, ktorého každý vrchol má najviac dvoch synov označovaných ľavý syn (dieťa) a pravý syn (dieťa) sa nazýva binárny strom. Binárny strom, ktorého každý vrchol má práve dvoch synov sa nazýva úplný binárny strom. Ľavý (pravý) podstrom vrcholu v v binárnom strome T je binárny podstrom vetvený z ľavého (pravého) syna z v a všetkých jeho potomkov
Príklad Štyri rôzne binárne stromy
Definícia: Binárny kód je priradenie symbolu, alebo iného významu množine binárnych postupností. Každá takáto postupnosť sa nazýva kódové slovo Prefixový kód je taký kód, ktorého žiadne kódové slovo nie je prefixom (predponou) iného slova
Konštrukcia prefixového kódu pomocou binárneho stromu 0 1 0 1 0 1 0 1 0 1 F 0 1 B A 0 1 G H C D E Písmeno A B C D E F G H kód 000 001 0100 0101 011 10 110 111
Písmeno A B C D E F G H váha 0,2 0,05 0,1 0,15 0,21 0,09 0,11 0,09 Definícia: Nech T je binárny strom s listami s 1, s 2,...,s k, takých, že každému listu s i je priradená jeho váha w i. Nech dpth(s i ) je úroveň vrcholu s i. Potom priemerná vážená hĺbka stromu T, wt(t) je daná vzťahom: wt ( T ) dpth( ) = k i= 1 s i w i
Príklad: Určite priemernú váženú hĺbku stromu, ak Písmeno A B C D E F G H hĺbka 3 3 4 4 3 2 3 3 váha 0,2 0,05 0,1 0,15 0,21 0,09 0,11 0,09 wt(t) = 3.0,2+3.0,05+4.0,1+4.0,15+3.0,21+2.0,09+3.0,11+3.0,09= 3,01
Algoritmus: Huffmanovo prefixové kódovanie Vstup: množina S= {s 1,s 2,...,s k } symbolov a množina W= {w 1,w 2,...,w k } ich váh. Výstup: binárny strom reprezentujúci prefixové kódovanie symbolov z S, ktorého kódové slová majú minimálnu priemernú váženú hĺbku. Inicializácia: Nech F je les izolovaných vrcholov s 1,s 2,...,s k, s príslušnými váhami w 1,w 2,...,w k.
Vykonaj pre i=1 až k-1: Zvoľ z lesa F dva stromy, najmenšej váhy v F. Vytvor nový binárny strom, ktorého koreň má T 1 a T 2. ako ľavý a pravý podstrom v danom poradí. Označ hranu do T 1 s nulou a hranu do T 2 jednotkou. Priraď novému stromu váhu w(t 1 ) +w (T 2 ). Návrat na F. Nahraď stromy T 1 a T 2 v lese F novým stromom.
Príklad: Aplikujte Huffmanov algoritmus na symboly ich váhy z predchádzajúceho príkladu a vypíšte optimálny prefixový binárny kód. Vypočítajte váženú hĺbku vzniknutého binárneho stromu.
Riešenie: 0 0 Inicializácia 0,2 0,05 0,1 0,15 0,21 0,09 0,11 0,09 A B C D E F G H
1 Iterácia 0,1 0,2 0,15 0,21 0,11 0,09 0,14 A D E G H 0 1 C B F
2 Iterácia 0,19 0,2 0,11 0,21 0,15 0,14 A G 0 1 0 1 E D B F C H
3 Iterácia 0,25 0,19 0,2 0,21 0,15 A 0 1 E 0 1 D 0 1 G C H B F
5. Iterácia 0,25 0,2 0,21 0,34 A 0 1 E 0 1 0 1 G C 1 D B F C H
6. Iterácia 0,41 0,25 0,34 0 1 0 1 0 1 A E 0 1 G 0 1 D B F C H
7. Iterácia 0,41 0 1 0,59 0 1 A E 0 1 0 1 0 1 G 0 1 D B F C H
Záverečná iterácia 0 1 0 1 0 1 A E 0 1 0 1 0 1 G 0 1 D B F C H Písmeno A B C D E F G H kód 00 1000 1100 111 01 1001 101 1101
Písmeno A B C D E F G H kód 00 1000 1100 111 01 1001 101 1101 hĺbka 2 4 4 3 2 4 3 4 wt(t) = 2.0,2+4.0,05+4.0,1+3.0,15+2.0,21+4.0,09+3.0,11+4.0,09= 2,52
Definícia: Faktorový podgraf súvislého grafu G=(V, E ), ktorý je strom nazývame kostra grafu G. T=(V, E T )
Problémy, ktoré budeme riešiť: 1. Nájdenie kostry grafu 2. Zistenie počtu kostier grafu 3. Hľadanie kostry s najmenším (najväčším ohodnotením) 4. Aplikácie
Definícia Nech T = (V T, E T ) je podgraf grafu G. Budeme hovoriť, že hrana [u, v] je hraničná hrana, ak u V T a v V T. Ak e =[u, v] je hraničná hrana, budeme hovoriť, že u je zaradený vrchol a v je voľný vrchol.
Algoritmus 5: Prehľadávanie grafu do hĺbky (Depht-First Search) 1. Nech T je triviálny strom obsahujúci vrchol v V položíme p(v)=1, k=1. 2. Ak T obsahuje všetky vrcholy grafu, potom STOP. Inak : 3. V grafe G so stromom T nájdeme hraničnú hranu e = [u,v] s maximálnou značkou p(u) zaradeného vrchola u. 4. Položíme T=:T+e+v k=:k+1, p(v)=k. Prejdeme na bod 2.
Algoritmus 6: Prehľadávanie grafu do šírky (Breadth-First Search) 1. Nech T je triviálny strom obsahujúci vrchol v V položíme p(v)=1, k=1. 2. Ak T obsahuje všetky vrcholy grafu, potom STOP. Inak : 3. V grafe G so stromom T nájdeme hraničnú hranu e = [u,v] s minimálnou značkou p(u) zaradeného vrchola u. 4. Položíme T=:T+e+v k=:k+1, p(v)=k. Prejdeme na bod 2.
Príklad: prehľadajte daný graf do šírky a hĺbky 1 v
1. prehliadanie do šírky 1 2 v
2 v 1 3
1 2 v 3 4
1 5 2 v 3 4
1 5 2 v 3 4 6
1 5 2 v 3 4 6 7
1 5 2 v 3 4 8 6 7
1 5 2 v 3 4 8 6 7 9
1 5 2 6 v 3 7 4 9 8 10
1 5 2 v 3 4 8 6 7 9 10 11
1 5 2 6 v 3 7 4 9 8 10 11 12
1 5 2 6 v 3 7 4 9 8 10 13 11 12
1. prehliadanie do hĺbky 1 2 v
1 2 v 3
1 2 v 3 4
1 2 v 3 4 5
2 1 v 6 3 4 5
2 1 v 6 7 3 4 5
1 8 2 v 6 7 3 4 5
1 8 2 v 6 9 7 3 4 5
1 8 2 v 10 6 9 7 3 4 5
1 8 2 v 10 6 9 7 3 4 5 11
1 8 2 v 10 6 9 7 3 4 5 11 12
1 8 2 v 10 6 9 7 3 4 5 11 13 12