Datastrukturer och algoritmer Frelsning 10 Datastrukturer och algoritmer

  • Slides: 33
Download presentation
Datastrukturer och algoritmer Föreläsning 10

Datastrukturer och algoritmer Föreläsning 10

Datastrukturer och algoritmer Innehåll VT 08 u Modeller/tillämpningar för träd u Organisation och terminologi

Datastrukturer och algoritmer Innehåll VT 08 u Modeller/tillämpningar för träd u Organisation och terminologi u Olika typer av träd u Trädalgoritmer u Implementering av träd u Kapitel 10 och 11 i kursboken

Datastrukturer och algoritmer Modeller/tillämpningar för träd VT 08 u Modell: Ø Ordnat träd: o

Datastrukturer och algoritmer Modeller/tillämpningar för träd VT 08 u Modell: Ø Ordnat träd: o Ordervägarna i ett regemente Ø Binärt träd: o Stamtavla/släktträd u Tillämpningsexempel inom datavärlden: Ø Filsystem Ø Klasshierarkier i Java/OOP Ø Besluts-/sök-/spelträd inom AI Ø Prologs exekvering

Datastrukturer och algoritmer Organisation och terminologi (1) VT 08 Varje träd har minst en

Datastrukturer och algoritmer Organisation och terminologi (1) VT 08 Varje träd har minst en nod - roten Om det finns flera noder så finns det också grenar… …löv har träden också!

Datastrukturer och algoritmer Organisation och terminologi (2) VT 08 Elementen i ett träd kallas

Datastrukturer och algoritmer Organisation och terminologi (2) VT 08 Elementen i ett träd kallas för noder. En nod har en position och ev. ett värde. Nivå 1 u Värdet på en nod kallas etikett. Nivå 2 u Alla noder på en nivå kallas syskon. Nivå 3 u Ett träd har ett ändligt antal noder och är en homogen datatyp. Nivå 4 u Föräldra-barn hierarki. u Delträd = en nod och dess avkomma. u

från g i s r lje i k s a r! t t e

från g i s r lje i k s a r! t t e e n o D i t ! i fin e OBS d s n ke o b s r u k Datastrukturer och algoritmer Organisation och terminologi (3) VT 08 Ett träds noder finns på olika nivåer. u Höjden h(x) för nod x är antalet bågar på den längsta grenen i det träd där x är rot. u Ø Höjden av ett träd T, h(T) = h(roten) Ø h(a) = 0, h(b) = 2 och h(c) = 3 = h(T) u Djupet d(x) hos en nod x är antalet bågar från x upp till roten. Ø d(a) = 3, d(b) = 1, d(c) = 0 Ø nivå(x) = d(x) + 1 c b Nivå 1 Nivå 2 Nivå 3 a Nivå 4

Datastrukturer och algoritmer Olika typer av träd VT 08 u Ordnat träd (ex militärhierarki)

Datastrukturer och algoritmer Olika typer av träd VT 08 u Ordnat träd (ex militärhierarki) Ø Syskonen är linjärt ordnade u Oordnat 10. 1 r u ig f e 91! S 1 n sida träd (ex filsystemet på en dator) Ø Ordningen bland syskonen har ingen betydelse u Urträd Ø Mer abstrakt än de två förra. Har en egen datatyp som hanterar syskonen.

Datastrukturer och algoritmer Olika typer av träd VT 08 u Riktade träd Ø Kan

Datastrukturer och algoritmer Olika typer av träd VT 08 u Riktade träd Ø Kan bara gå i en riktning i trädet. Ø I ett nedåtriktat träd saknas Parent. Ø I ett uppåtriktat träd saknas Children, måste gå att nå något annat än roten, tex en operation som ger alla löv. u Binära träd (tex stamtavla) Ø Varje nod har högst två barn

Datastrukturer och algoritmer ”Begreppspaus”- Om ordning VT 08 u Ordnad Ø Används för att

Datastrukturer och algoritmer ”Begreppspaus”- Om ordning VT 08 u Ordnad Ø Används för att beskriva olika sätt att ordna element i ett objekt i en datatyp u Riktad Ø När det finns en asymmetri när det gäller operationer för att hitta från ett element till ett annat. u Sorterad Ø När elementvärdena är sorterade enligt någon ordningsrelation

Datastrukturer och algoritmer Binära träd (1) VT 08 u En nod i ett binärt

Datastrukturer och algoritmer Binära träd (1) VT 08 u En nod i ett binärt träd kan ha högst två barn Ø Barnen kallas vänster- och högerbarn. Ø Det andra barnet kan komma före det första Ø Träden nedan är OLIKA binära träd (men samma ”ordnade träd med max två barn”).

Datastrukturer och algoritmer Maximal och minimal höjd VT 08 u Maximal höjd (n-1) för

Datastrukturer och algoritmer Maximal och minimal höjd VT 08 u Maximal höjd (n-1) för n=3, en nod på varje nivå: u Minimal höjd, man kan inte flytta om några noder och få en mindre höjd: Minimal Ej minimal

Datastrukturer och algoritmer Binära träd (2) VT 08 u För binära träd T med

Datastrukturer och algoritmer Binära träd (2) VT 08 u För binära träd T med n noder och höjd h gäller: Ø h n-1 (maximala höjden) Ø h log 2(n+1)-1 o Antalet noder på höjd i: ni 2 i dvs 1, 2, 4, 8, …, 2 h o Antalet noder totalt i trädet: n 2(h+1) - 1 Ø Ett träd har minimal höjd om n > 2 h - 1 vilket ger o log 2(n+1)-1 h < log 2(n+1) o dvs h är av O(log 2(n))

Datastrukturer och algoritmer Binära träd (3) VT 08 u Man 1. 3 1 r

Datastrukturer och algoritmer Binära träd (3) VT 08 u Man 1. 3 1 r igu för F e S 24 2 n sida empel! ex vill ha så grunda träd som möjligt Ø Om vänster och höger delträd är ungefär lika stora har trädet balans och vägen till en slumpvis vald nod är O(log 2(n)) (se OH 12!) u Komplett binärt träd (Rätt bra balans) Ø Fyller på trädet från vänster till höger, en nivå i taget. u Fullt binärt träd (Ofta dålig balans) Ø Varje nod är antingen ett löv eller har två barn.

Datastrukturer och algoritmer Algoritmer VT 08 u Basalgoritmer Ø Djup Ø Höjd Ø Slå

Datastrukturer och algoritmer Algoritmer VT 08 u Basalgoritmer Ø Djup Ø Höjd Ø Slå ihop Ø Dela upp Ø Beräkna Ø Traversera för träd

Datastrukturer och algoritmer Traversering av träd VT 08 u Tillämpningar av träd involverar ofta

Datastrukturer och algoritmer Traversering av träd VT 08 u Tillämpningar av träd involverar ofta att man Ø Söker efter ett element med vissa egenskaper Ø Transformerar strukturen till en annan struktur o Exempelvis sortering och balansering Ø Filtrerar ut element med vissa egenskaper u Alla dessa bygger på att man traverserar strukturen.

Datastrukturer och algoritmer Traversering av träd - Bredden-först VT 08 u Man undersöker en

Datastrukturer och algoritmer Traversering av träd - Bredden-först VT 08 u Man undersöker en nivå i taget. Först roten, sedan rotens barn, dess barn osv. Ø Kö ofta hjälp vid implementationen. Ø Varje nod i trädet besöks endast en gång, dvs O(n). Ø Söker man något som finns hittar man det.

Datastrukturer och algoritmer Traversering av träd-Bredden först Algoritm bf. Order(Tree T) input: A tree

Datastrukturer och algoritmer Traversering av träd-Bredden först Algoritm bf. Order(Tree T) input: A tree T to be traversed for each level L of T do for each node of L do compute(node) a b c d f VT 08 Ordningen: a, b, c, d, e, f, g, h, i, j g e h i j

Datastrukturer och algoritmer Traversering av träd - Djupet-först VT 08 u Man följer varje

Datastrukturer och algoritmer Traversering av träd - Djupet-först VT 08 u Man följer varje gren i trädet utifrån roten till lövet Ø Stack till hjälp för implementeringen Ø Varje nod besöks endast en gång, dvs O(n). Ø Tre varianter: o Preorder o Postorder o Inorder

Datastrukturer och algoritmer Traversering av träd - Preorder Algoritm pre. Order(Tree T) input: A

Datastrukturer och algoritmer Traversering av träd - Preorder Algoritm pre. Order(Tree T) input: A tree T to be traversed compute(root(T)) // Do something with node for each child w of root(T) do pre. Order(w) a b c d f VT 08 pre. Order(Bin. Tree T) compute(root(T)) pre. Order(left. Child(T)) pre. Order(right. Child(T)) g e h i j Ordningen: a, b, c, d, f, g, e, h, i, j

Datastrukturer och algoritmer Preorder – Läsa ett dokument… VT 08

Datastrukturer och algoritmer Preorder – Läsa ett dokument… VT 08

Datastrukturer och algoritmer Traversering av träd - Postorder Algoritm post. Order(Tree T) input: A

Datastrukturer och algoritmer Traversering av träd - Postorder Algoritm post. Order(Tree T) input: A tree T to be traversed for each child w of root(T) do post. Order(w) compute(root(T)) // Do something with node a b c d f VT 08 post. Order(Bin. Tree T) post. Order(left. Child(T)) post. Order(right. Child(T)) compute(root(T)) g e h i j Ordningen: b, c, f, g, d, h, i, j, e, a

Datastrukturer och algoritmer Algoritm evaluate. Expression(Tree t) If is. Leaf(t) return get. Value(t) else

Datastrukturer och algoritmer Algoritm evaluate. Expression(Tree t) If is. Leaf(t) return get. Value(t) else op get. Value(t) x evaluate. Expression(left. Child(t)) y evaluate. Expression(right. Child(t)) return x op y * + 1 VT 08 Postorder – Beräkna aritmetiska uttryck / + 3 3 9 2 5

Datastrukturer och algoritmer Traversering av träd – Inorder Algoritm in. Order(Tree T) input: A

Datastrukturer och algoritmer Traversering av träd – Inorder Algoritm in. Order(Tree T) input: A tree T to be traversed node root(T) in. Order(first. Child(T)) compute(node) // Do something with node for each child w of node (except first) do in. Order(w) a b c d f VT 08 in. Order(Bin. Tree T) in. Order(left. Child(T)) compute(root(T)) in. Order(right. Child(T)) g e h i j Ordningen: b, a, c, f, d, g, h, e, i, j

Datastrukturer och algoritmer Algoritm print. Expression(Tree t) print ”(” if has. Left. Child(t) then

Datastrukturer och algoritmer Algoritm print. Expression(Tree t) print ”(” if has. Left. Child(t) then print. Expression(left. Child(t)) print get. Value(t) if has. Right. Child(t) then print. Expression(right. Child(t)) print ”)” / * + 3 VT 08 + 3 1 Inorder – Skriva aritmetiska uttryck 9 2 5

Datastrukturer och algoritmer Trädda binära träd u Nedåtriktade binära träd har ”lediga” länkar. u

Datastrukturer och algoritmer Trädda binära träd u Nedåtriktade binära träd har ”lediga” länkar. u Utnyttja dessa för att ”trä” genvägar i trädet. u Det är vanligt att skapa inorderträdda träd. u Detta gör att man kan traversera med hjälp av iteration istället för rekursion. Ø Sparar minne VT 08

Datastrukturer och algoritmer Tillämpningar av träd VT 08 u Sökträd Ø Varje nod symboliserar

Datastrukturer och algoritmer Tillämpningar av träd VT 08 u Sökträd Ø Varje nod symboliserar ett givet tillstånd. Ø Barnen symboliserar de olika tillstånd man kan hamna i utifrån förälderns tillstånd. Ø Det gäller att hitta målnoden, dvs ett tillstånd som löser problemet. Ø Inte rimligt att bygga upp alla noder (möjliga tillstånd). Ø Ofta används heuristik

Datastrukturer och algoritmer Tillämpningar av träd VT 08 u Planträd och OCH/ELLER-träd Ø Noderna

Datastrukturer och algoritmer Tillämpningar av träd VT 08 u Planträd och OCH/ELLER-träd Ø Noderna symboliserar hur man bryter ned ett stort problem i mindre delar och i vilken ordning man bör lösa dessa mindre delproblem. Ø Ofta använder man OCH/ELLER-träd där man kan ha OCH-kanter eller ELLER-kanter mellan förälder och barn. o OCH – alla barn behövs för lösningen o ELLER – något barn behövs

Datastrukturer och algoritmer Implementationer av träd VT 08 u Oordnat uppåtriktat träd som fält

Datastrukturer och algoritmer Implementationer av träd VT 08 u Oordnat uppåtriktat träd som fält Ø Varje element i en vektor består av ett par: nodens etikett och en referens till föräldern. + Tar liten plats - Inget bra stöd för traversering (t ex svårt veta vilka noder som är löv) - Maximala storleken på trädet måste bestämmas i förväg h. 7 oc r 10 205 u g i Se F på sid. l! 10. 8 exempe för

Datastrukturer och algoritmer Implementationer av träd VT 08 u Ordnat träd som n-länkad struktur

Datastrukturer och algoritmer Implementationer av träd VT 08 u Ordnat träd som n-länkad struktur Ø Noden i trädet består av n-celler med etikett, länk till föräldern och n-1 länkar till barnen + Antalet noder i trädet dynamiskt. - Maximala antalet barn bestämt i förväg. - Om det är stor variation i antalet barn så finns outnyttjade länkar. . 9 på 10 r u g i r Se F. 206 fö sid mpel! exe

Datastrukturer och algoritmer Implementationer av träd VT 08 u Nedåtriktat ordnat träd som 1

Datastrukturer och algoritmer Implementationer av träd VT 08 u Nedåtriktat ordnat träd som 1 -länkad struktur med lista av barn Ø Noden i trädet består av 1 -celler med en etikett och en länk till en barnlista 0. 11 1 r + Antalet noder i trädet dynamiskt. Se Fig. u 12 på side. l! 0 p ch 1 r exem o + Antalet barn i nätet dynamiskt ö 07 f u Utöka 2 till 2 -celler så blir trädet oriktat Ø Noden får en länk till föräldern, en etikett samt en länk till barnlista.

Datastrukturer och algoritmer Implementationer av träd VT 08 u Uppåtriktat u Nedåtriktat binärt träd

Datastrukturer och algoritmer Implementationer av träd VT 08 u Uppåtriktat u Nedåtriktat binärt träd med hjälp av 1 -cell binärt träd med Föräldra- Etikett länk 2 -cell u Oriktat binärt träd med Vänster- Etikett barn Högerbarn 3 -cell Föräldra- Vänster- Etikett länk barn Högerbarn

Datastrukturer och algoritmer Implementationer av träd u Noder som håller reda på förälder, första

Datastrukturer och algoritmer Implementationer av träd u Noder som håller reda på förälder, första barn a och syskon. c b d e g VT 08 f

Datastrukturer och algoritmer Implementationer av träd VT 08 u Binärt träd som fält Ø

Datastrukturer och algoritmer Implementationer av träd VT 08 u Binärt träd som fält Ø Roten har index 1 och noden med index i har o sitt vänsterbarn i noden med index 2 i o sitt högerbarn i noden med index 2 i +1 o sin förälder i noden med index floor(i/2) Ø + Tar inget utrymme för strukturinformation Ø - Trädet har ett maxdjup (statiskt fält) Ø - Ev. slöseri med utrymme Ø Krävs ”markörer” för tom nod och inget värde