Innhåll Förläsning 7 Träd Modllr/tillämpningr för träd Orgnistion och trminologi Signturdigrm för ordnt träd Olik typr v träd Trädlgoritmr Implmnttion v träd 148 149 Modllr/tillämpningr för träd Modll: Ordnt träd: Ordrvägrn i tt rgmnt Binärt träd: Stmtvl/släktträd Tillämpningsxmpl inom dtvärldn: Filsystm Klsshirrkir i Jv/OOP Bsluts-/sök-/splträd inom AI Prologs xkvring Orgnistion och trminologi (1) Vrj träd hr minst n nod - rotn Om dt finns flr nodr så finns dt också grnr löv hr trädn också! 150 151 Orgnistion och trminologi (2) Orgnistion och trminologi (3) Elmntn i tt träd klls för nodr. En nod hr n position och v. tt värd. Värdt på n nod klls tiktt. All nodr på n nivå klls syskon. Ett träd hr tt ändligt ntl nodr och är n homogn dttyp. Föräldr-brn hirrki. Dlträd = n nod och dss vkomm. Nivå 1 Nivå 2 Nivå 3 Nivå 4 Ett träds nodr finns på olik nivår. Höjdn h(x) för nod x är ntlt bågr på dn längst grnn i dt träd där x är rot. Höjdn v tt träd T, h(t) = h(rotn) h() = 0, h(b) = 2 och h(c) = 3 = h(t) Djupt d(x) hos n nod x är ntlt bågr från x upp till rotn. d() = 3, d(b) = 1, d(c) = 0 nivå(x) = d(x) + 1 b c Nivå 1 Nivå 2 Nivå 3 Nivå 4 152 153
Signturdigrm för ordnt träd Signturdigrm för ordnt träd Nvigringsorintrd vs dlträdsorintrd spcifiktion v träd. Om mn rbtr md nstk träd som förändrs långsmt löv för löv så är nvigringsorintrd bättr. Hållr mn på md träd och dlträd som mn vill dl upp llr slå smmn är dlträdsorintrd bättr. 154 155 Olik typr v träd Ordnt träd (x militärhirrki) Syskonn är linjärt ordnd Oordnt träd (x filsystmt på n dtor) Ordningn blnd syskonn hr ingn btydls Urträd Mr bstrkt än d två förr. Hr n gn dttyp som hntrr syskonn. 156 Riktd träd Olik typr v träd Kn br gå i n riktning i trädt. I tt ndåtriktt träd skns Prnt. I tt uppåtriktt träd skns Childrn, måst gå tt nå något nnt än rotn, tx n oprtion som gr ll löv. Binär träd (tx stmtvl) Vrj nod hr högst två brn 157 Ordnd Bgrppspus - Om ordning Används för tt bskriv olik sätt tt ordn lmnt i tt objkt i n dttyp Riktd När dt finns n symmtri när dt gällr oprtionr för tt hitt från tt lmnt till tt nnt. Sortrd När lmntvärdn är sortrd nligt någon ordningsrltion Binär träd (1) En nod i tt binärt träd kn h högst två brn Brnn klls vänstr- och högrbrn. Dt ndr brnt kn komm för dt först Trädn ndn är OLIKA binär träd (mn smm ordnd träd md mx två brn ). 158 159
Mximl och miniml höjd Mximl höjd (n-1) för n=3, n nod på vrj nivå: Miniml höjd, mn kn int flytt om någr nodr och få n mindr höjd: Binär träd (2) För binär träd T md n nodr och höjd h gällr: h! n-1 (mximl höjdn) h " log 2 (n+1)-1 Antlt nodr på djup i är 2 i dvs 1, 2, 4, 8 Antlt nodr totlt i trädt: n! 2 (h+1) - 1 Ett träd hr miniml höjd om n > 2 h 1 vilkt gr log 2 (n+1)-1! h < log 2 (n+1) dvs h är v O(log 2 (n)) Miniml Ej miniml 160 161 Binär träd (3) Mn vill h så grund träd som möjligt Om vänstr och högr dlträd är ungfär lik stor hr trädt blns och vägn till n slumpvis vld nod är O(log 2 (n)) Kompltt binärt träd (Rätt br blns) Fyllr på trädt från vänstr till högr, n nivå i tgt. Fullt binärt träd (Oft dålig blns) Vrj nod är ntingn tt löv llr hr två brn. Algoritmr Bslgoritmr för träd Djup Höjd Slå ihop Dl upp Bräkn Trvrsr 162 163 Trvrsring v träd Tillämpningr v träd involvrr oft tt mn Sökr ftr tt lmnt md viss gnskpr Trnsformrr strukturn till n nnn struktur Exmplvis sortring och blnsring Filtrrr ut lmnt md viss gnskpr All dss byggr på tt mn trvrsrr strukturn. 164 Trvrsring v träd Brddn-först Mn undrsökr n nivå i tgt. Först rotn, sdn rotns brn, dss brnbrn osv. Kö oft hjälp vid implmnttionn. Vrj nod i trädt bsöks ndst n gång, dvs O(n). Sökr mn något som finns hittr mn dt. 165
Trvrsring v träd-brddn först Algoritm bfordr(tr T) input: A tr T to b trvrsd for ch lvl L of T do for ch nod of L do comput(nod) Ordningn:, b, c, d,, f, g, h, i, j Trvrsring v träd Djupt-först Mn följr vrj grn i trädt utifrån rotn till lövt Stck till hjälp för implmntringn Vrj nod bsöks ndst n gång, dvs O(n). Tr vrintr: Prordr Postordr Inordr 167 Trvrsring v träd - Prordr Algoritm prordr(tr T) input: A tr T to b trvrsd comput(root(t)) // Do somthing with nod for ch child w of root(t) do prordr(w) Prordr Läs tt dokumnt prordr(bintr T) comput(root(t)) prordr(lftchild(t)) prordr(rightchild(t)) Ordningn:, b, c, d, f, g,, h, i, j 169 Trvrsring v träd - Postordr Algoritm postordr(tr T) input: A tr T to b trvrsd for ch child w of root(t) do postordr(w) comput(root(t)) // Do somthing with nod postordr(bintr T) postordr(lftchild(t)) postordr(rightchild(t)) comput(root(t)) Algoritm vlutexprssion(tr t) If islf(t) rturn gtvlu(t) ls op # gtvlu(t) x # vlutexprssion(lftchild(t)) y # vlutexprssion(rightchild(t)) rturn x op y * / + Postordr Bräkn ritmtisk uttryck + 3-2 1 3 9 5 Ordningn: b, c, f, g, d, h, i, j,, 171
Trvrsring v träd Inordr Algoritm inordr(tr T) input: A tr T to b trvrsd nod # root(t) inordr(firstchild(t)) comput(nod) // Do somthing with nod for ch child w of nod (xcpt first) do inordr(w) inordr(bintr T) inordr(lftchild(t)) comput(root(t)) inordr(rightchild(t)) Algoritm printexprssion(tr t) print ( if hslftchild(t) thn printexprssion(lftchild(t)) print gtvlu(t) if hsrightchild(t) thn printexprssion(rightchild(t)) print ) * + 3-2 / + Inordr Skriv ritmtisk uttryck 3 1 9 5 Ordningn: b,, c, f, d, g, h,, i, j 173 Trädd binär träd Ndåtriktd binär träd hr ldig länkr. Utnyttj dss för tt trä gnvägr i trädt. Dt är vnligt tt skp inordrträdd träd. Dtt gör tt mn kn trvrsr md hjälp v itrtion iställt för rkursion. Sprr minn 174 Tillämpningr Konstruktionr v ndr typr (spcillt binär träd) Sökträd Vrj nod symbolisrr tt givt tillstånd. Brnn symbolisrr d olik tillstånd mn kn hmn i utifrån föräldrns tillstånd. Dt gällr tt hitt målnodn, dvs tt tillstånd som lösr problmt. Int rimligt tt bygg upp ll nodr (möjlig) tillstånd. Oft nvänds huristik 175 Tillämpningr Plnträd och OCH/ELLER-träd Nodrn symbolisrr hur mn brytr nd tt stort problm i mindr dlr och i vilkn ordning mn bör lös dss mindr dlproblm. Oft nvändr mn OCH/ELLER-träd där mn kn h OCH-kntr llr ELLER-kntr mlln föräldr och brn. OCH ll brn bhövs för lösningn ELLER något brn bhövs Implmnttionr v träd Oordnt uppåtriktt träd som fält Vrj lmnt i n vktor bstår v tt pr: nodns tiktt och n rfrns till föräldrn. + Tr litn plts - Ingt br stöd för trvrsring (t x svårt vt vilk nodr som är löv) - Mximl storlkn på trädt måst bstämms i förväg 176 177
Implmnttionr v träd Ordnt träd som n-länkd struktur Nodn i trädt bstår v n-cllr md tiktt, länk till föräldrn och n-1 länkr till brnn + Antlt nodr i trädt dynmiskt. - Mximl ntlt brn bstämt i förväg. - Om dt är stor vrition i ntlt brn så finns outnyttjd länkr. Implmnttionr v träd Ndåtriktt ordnt träd som 1-länkd struktur md list v brn Nodn i trädt bstår v 1-cllr md tiktt, n länk till n brnlist + Antlt nodr i trädt dynmiskt. + Antlt brn i nätt dynmiskt Utök till 2-cllr så blir trädt oriktt Nodn får n länk till föräldrn, tiktt smt länk till brnlist. 178 179 Implmnttionr v träd Implmnttionr v träd Nodr som hållr rd på föräldr, först brn och syskon. b c Uppåtriktt binärt träd md hjälp v 1-cll Ndåtriktt binärt träd md 2-cll Föräldr länk Vänstr -brn Etiktt Etiktt Högrbrn d f Oriktt binärt träd md 3-cll g 180 Föräldrlänk Vänstrbrn Etiktt Högr brn 181 Implmnttionr v träd Binärt träd som fält Rotn hr indx 1 och nodn md indx i hr sitt vänstrbrn i nodn md indx 2*i sitt högrbrn i nodn md indx 2*i +1 sin föräldr i nodn md indx floor(i/2) + Tr ingt utrymm för strukturinformtion - Trädt hr tt mxdjup (sttiskt fält) - Krävs mrkörr för null och tom nod - Ev. slösri md utrymm 182