Dtstrukturr och lgoritmr Förläsning 9 Träd Innhåll 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 Modll/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 OOP Bslut-/sök-/splträd inom AI Exkvring v logisk språk xvis prolog 3 4 Orgnistion och trminologi (1) Orgnistion och trminologi (2) Vrj träd hr minst n nod - rotn Om dt finns flr nodr så finns dt också grnr löv hr trädn också! 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å som hr smm föräldr 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. En nod utn brn klls löv Nivå 1 Nivå 2 Nivå 3 Nivå 4 5 6 1
Orgnistion och trminologi (3) Signturdigrm för ordnt träd 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 b c Nivå 1 Nivå 2 Nivå 3 Nivå 4 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. nivå(x) = d(x) + 1 7 8 Signturdigrm för ordnt träd Olik typr v träd 9 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å ovnstånd. Hr n gn dttyp som hntrr syskonn. Vi kn int h md någr oprtionr som förutsättr något om hur brnn är orgnisrd. Kvr blir Insrt-childrn som stoppr in n mängd md brn och childrn som tr frm brnn till n nod. 10 Olik typr v träd Riktd träd Mn kn br gå i n riktning i trädt, upp llr nr I tt ndåtriktt träd skns Prnt I tt uppåtriktt träd skns Childrn. Dt måst gå tt nå något nnt än rotn, t.x n oprtion som rturnrr ll löv. Binär träd (x stmtvl) Vrj nod hr högst två brn Vnligt och myckt nvändbrt 11 Bgrppspus om ordning Ordnd Används för tt bskriv olik sätt tt ordn lmnt i tt objkt En list är ordnd v för/ftr-rltionn Riktd När dt finns n ssymtri när dt gällr oprtionr för tt nvigr från tt lmnt till tt nnt Sortrd När lmntvärdn är sortrd nligt någon ordningsrltion 12 2
Binär träd (1) Mximl och miniml höjd 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 ). Mximl höjd (n-1) för n=3, n nod/nivå Miniml höjd, mn kn int flytt om någr nodr och få n mindr höjd: 13 Miniml Ej miniml 14 Binär träd (2) Binär träd (3) För binär träd T md n nodr och höjd h gällr: h n 1 (mximl höjdn) h log2(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 < log2(n + 1) dvs h är v O(log 2 (n)) 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 15 16 Algoritmr Trvrsring v träd Bslgoritmr för träd Djup Höjd Slå ihop Dl upp Bräkn Trvrsr Tillämpningr v träd involvrr oft tt mn Sökr ftr tt lmnt md viss gnskpr Trnsformrr (omvndlr) strukturn till n nnn struktur Filtrrr ut lmnt md viss gnskpr All dss byggr på tt mn trvrsrr strukturn, dvs tt mn går ignom trädt 17 18 3
Trvrsring v träd Brddn-först Undrsök n nivå i tgt. Först rotn, sdn rotns ll brn, dss brnbrn osv. En kö är oft till 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 så hittr mn dt. 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), b, c, d,, f, g, h, i, j 19 20 Trvrsring v träd Djupt-först Följ vrj grn från rotn till lövt Stck till hjälp vid implmntringn Vrj nod bsöks ndst n gång, dvs O(n) Tr vrintr: Prordr Postordr Inordr 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(bintr T) comput(root(t)) prordr(lftchild(t)) prordr(rightchild(t)) 21 22 Prordr Prordr - läs tt dokumnt, b, c, d, f, g,, h, i, j 23 24 4
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)) Postordr b, c, f, g, d, h, i, j,, 25 Postordr bräkn ritmtisk uttryck Algoritm vlutexprssion(tr t) If islf(t) rturn gtvlu(t) ls op <- gtvlu(t) x <- vlutexprssion(lftchild(t)) y <- vlutexprssion(rightchild(t)) op <- gtvlu(t) rturn x op y Notr tt dtt är n postordr-lgoritm op nvänds ftr dt tt dlträdn vlurts gtvlu kn flytts sist * + 3-2 3 1 9 5 / + 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)) 27 28 Inordr Inordr - skriv ritmtisk uttryck b,, c, f, d, g, h,, i, j Algoritm printexprssion(tr t) print ( if hslftchild(t) thn printexprssion(lftchild(t)) print gtvlu(t) if hsrightchild(t) thn printexprssion(rightchild(t)) print ) * / + ( ( ( (3) + (1)) * 3) / ((9-5) + 2 ) + 3-2 3 1 9 5 29 30 5
Trädd binär träd Tillämpningr v 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 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 dt kn finns oändligt mång Lft rcursion kn bli tt problm Oft nvänds huristik 31 32 Tillämpningr Implmnttionr v träd 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 Dt finns också syntx llr prsträd som visr hur tt språk är uppbyggt 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 Finns flr olik förslg i bokn. Läs och fundr! 33 34 Implmnttionr v träd 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. 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. 35 36 6
Implmnttionr v träd Implmnttionr v träd Nodr som hållr rd på föräldr, först brn och syskon. Uppåtriktt binärt träd md hjälp v 1-cll Ndåtriktt binärt träd md 2-cll Oriktt binärt träd md 3-cll 37 38 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 39 7