Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er en unik simpel vej mellem ethvert par af punkter i grafen. Definition : Rootede træ er en træ hvori et punkt v er valgt som værende rod og enhver kant derefter er rettet væk mod dette punkt. Definition : Et Rootede træ T kaldes et m-ary træ hvis ethvert indre punkt højst har m børn. Et ordnet rooted træ er et rooted træ hvor børnene til ethvert indre punkt er ordnet. Hvis m = 2 da kaldes et m-ary ordnet træ et binært træ. 1
Egenskaber for træer Et træ med n punkter har n 1 kanter. Et m-ary træ med i indre punkter har højst mi + 1 punkter. Hvis højden h af et rooted træ defineres som længden af den længste vej deri da gælder at et m-ary træ højst har m h blade (og der gælder lighed hvis m er fyldt). Hvis et m-ary træ har højde h og l blade da er h log m l. Hvis træet er fuldt og balanceret da gælder at h = log m l. Højden af et rooted træ defineres som længden af længste vej deri. Anvendelser af træer Binære søge træer (og andre søgetræer) Beslutningstræer komprimering 2
komprimering Simpel komprimering : præfiks koder. Målet er at omdanne almindelige strenge til binære strenge med mindst mulig længde. Ide : De k bogstaver i det givne alfabet laves om til strengene 0,10,110,1110,,11 110,11 11 (her har de to sidste strenge længde k 1) således bogstaver som oftest benyttes omdannes til 0, 10,110, osv. Konvertering kan repræsenteres ved binært træ. 3
Huffman 1. procedure huffman(c : Symboler a i med frekvenser w i, i=1,..., n) 2. F:= en skov med n rooted træer hver med et punkt a i og vægt w i. 3. while F ikke er et træ do 4. Erstat de to træer T og T (w(t) w(t )) fra F med mindst vægt med et træ der fås ved at tilføje et nyt punkt som vælges som rod, og derefter tilføje kanter fra dette punkt til roden i T og T og giv disse kanter labels hhv. 0 og 1 (Det nye træ har T som sit venstre deltræ og T som sit højre deltræ). Tildel vægten w(t) + w(t ) til det nye træ. 5. Huffmankodningen for et symbol a i er da konkatenationen af de labels som er på kanterne i den entydige vej mellem roden i F og punktet a i. Bemærk : Grådig algoritme men dog optimal. 4
Traversering af træer preorder inorder postorder Definition : Lad T være et ordnet rooted træ med rod r. Hvis T kun består af r da er r preorder Traverseringen af T. Ellers antag at T 1,...,T n er deltræerne under r fra venstre til højre. Da fås preorder Traverseringen som r, efterfulgt af preorder Traverseringen af T 1, efterfulgt af preorder Traverseringen af T 2,, efterfulgt af preorder Traverseringen af T n (i deltræerne benyttes naboen til r som rod og samme ordning benyttes som ved T). 5
Definition : Lad T være et ordnet rooted træ med rod r. Hvis T kun består af r da er r inorder Traverseringen af T. Ellers antag at T 1,...,T n er deltræerne under r fra venstre til højre. Da fås inorder Traverseringen som inorder Traverseringen af T 1, efterfulgt af r, efterfulgt af inorder Traverseringen af T 2,, efterfulgt af inorder Traverseringen af T n (i deltræerne benyttes naboen til r som rod og samme ordning benyttes som ved T). Definition : Lad T være et ordnet rooted træ med rod r. Hvis T kun består af r da er r postorder Traverseringen af T. Ellers antag at T 1,...,T n er deltræerne under r fra venstre til højre. Da fås postorder Traverseringen som posrorder Traverseringen af T 1, efterfulgt af postorder Traverseringen af T 2,, efterfulgt af postorder Traverseringen af T n efterfulgt af r (i deltræerne benyttes naboen til r som rod og samme ordning benyttes som ved T). 6
1. procedure preorder(t : ordnet rooted træ) 2. r:= rod for T 3. list r 4. for hvert barn c af r fra venstre mod højre do 5. T(c):= deltræ med c som rod 6. preorder(t(c)) 7
Udspændende træer Definition : Hvis G er en simpel graf da er et træ T et udspændende træ for G hvis T er en delgraf af G med alle punkter fra G. Sætning : En simpel graf er sammenhængende hvis og kun hvis grafen har et udspændende træ. 8
Konstruktion af udspændende træ via dybde og breds først søgning 1. procedure dfs(g : samh. graf med punkter v 1,...,v n ) 2. T:= træet der kun består af punktet v 1. 3. besøg (v 1 ) 4. procedure besøg(v: punkt i G) 5. for hver nabo w til v som ikke er i T do 6. tilføj w og {v, w} til T 7. besøg(w) 8. return T Kompleksitet : O(e) (derved også O(n 2 )). 9
1. procedure BFS(G : samh. graf med punkter v 1,...,v n ) 2. T:= træet der kun består af punktet v 1. 3. L:= kø kun med elementet v 1. 4. while L ikke er tom do 5. fjern det første punkt v fra køen 6. for hver nabo w til vdo 7. if w ikke er i L eller T then 8. tilføj w til køen L og tilføj w og {v, w} til T 9. return T Kompleksitet : O(e) (derved også O(n 2 )). 10
Minimum udspændende træer Definition : Et minimum udspændende træ i en sammenhængende vægtet graf er et udspændende træ hvori summen af kanternes vægte er minimal. 1. procedure prim(g : samh. vægtet graf med n punkter) 2. T:= en kant med minimal vægt (eller T vælges til at være et punkt) 3. for i:=1 to n-2do (her skal i gå til n 1 hvis T blev valgt til et punkt fra starten) 4. e i := en kant med minimal vægt når e i er incident med et punkt i T og G T. 5. T:=T med kanten e i tilføjet. 6. return T 11
Korrekthed : Lad T være træet der dannes af Prims-algoritme, og lad H være et minimum spannig træ som har så mange kanter som muligt tilfælles med T. Antag at e i er den første algoritme som tilføjes til T som ikke er i H. Lad U være T forinden e i tilføjes (eller et punkt hvis i = 1). Det følger at H + e indeholder en kreds og deri må e i oe en anden kant e 0 gå mellem V (U)ogV (T U). Da e i blev tilføjet ved algoritme er w(e i ) w(e 0 ). Derved er w(h + e i e 0 ) et minimum udspændende træ. Da dette træ har en kant mere tilfælles med T end H havde er der opnået en modstrid. 12
1. procedure kruskal(g : samh. vægtet graf med n punkter) 2. T:= tom graf 3. for i:=1 to n-1do 4. e i := en kant med minimal vægt når e i ikke må være incident med to punkter i T. 5. T:=T med kanten e i tilføjet. 6. return T 13