Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Relevanta dokument
Föreläsning 6. Sökträd: AVL-träd, Multi-Way -sökträd, B-träd TDDC70/91: DALG. Innehåll. Innehåll. 1 AVL-träd

Föreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018

Datastrukturer och algoritmer

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer. föreläsning 10. Maps 1

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Datastrukturer. föreläsning 10. Maps 1

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Föreläsning Datastrukturer (DAT036)

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Programkonstruktion och. Datastrukturer

Föreläsning Datastrukturer (DAT036)

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Träd Hierarkiska strukturer

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Algoritmer och datastrukturer 2012, fo rela sning 8

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Datastrukturer. föreläsning 9. Maps 1

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Informationsteknologi Tom Smedsaas 19 augusti 2016

Föreläsning 9 Innehåll

Föreläsning 7. Träd och binära sökträd

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 7. Splay-träd. Prioritetsköer och heapar. Union/Find TDDC70/91: DALG. Innehåll. Innehåll. 1 Splay-träd

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 10 Innehåll

Lösningar Datastrukturer TDA

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 10 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Datastrukturer. Föreläsning 5. Maps 1

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Seminarium 13 Innehåll

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 4 Datastrukturer (DAT037)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 9 Innehåll

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Algoritmer och datastrukturer

Lösningsförslag till exempeltenta 1

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Trädstrukturer och grafer

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Föreläsning 13. Träd

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Tentamen Datastrukturer D DAT 036/INN960

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Föreläsning 13 Innehåll

13 Prioritetsköer, heapar

Föreläsning Datastrukturer (DAT036)

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 6 Datastrukturer (DAT037)

Lösningsförslag till tentamen

Datastrukturer i Haskell

Algoritmer och datastrukturer 2012, föreläsning 6

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Tentamen Datastrukturer (DAT036)

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Ekvivalensrelationer

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

Programmering II (ID1019) :00-11:00

Tentamen Datastrukturer för D2 DAT 035

Fredag 10 juni 2016 kl 8 12

Föreläsning Datastrukturer (DAT036)

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Linjär sökning. Föreläsning 12. Binär sökning. Exempel: Binära sökträd. Binärt sökträd

Träd. Rot. Förgrening. Löv

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Tentamen Datastrukturer (DAT036)

Föreläsning 11 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Föreläsning 7. Träd och binära sökträd

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Transkript:

Föreläsning AVL-träd, Multi-Wa -sökträd, B-träd DDD7: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer november 5 omm Färnqvist, IDA, Linköpings universitet. Innehåll Innehåll Binära sökträd AVL-träd (, )-träd 4 4 B-träd 6. Binära sökträd Binära sökträd Ett binärt sökträd (BS) är ett binärt träd sådant att: informationen associerad med en nod är linjärt ordnad t.e. (nckel,värde). Nckeln i varje nod är: större än (eller lika med) nckeln hos alla vänsterättlingar, och mindre än (eller lika med) nckeln hos alla högerättlingar.. Sökning i BS procedure FIND(k, v) if KEY(v) = k then return k else if k <KEY(v) then FIND(k,LEFCHILD(v)) else FIND(k,RIGHCHILD(v)) missl. om inget leftchild missl. om inget rightchild Värsta fallet: HEIGH( ) + jämförelser..4

Insättning och borttagning i BS insert(k,v): lägg till (k,v) som ntt löv om find misslckas eller uppdatera noden om find lckas Värsta fallet: HEIGH( ) + jämförelser. remove(k): find, sedan... om v är ett löv, ta bort v om v har ett barn u, ersätt v med u om v har två barn, ersätt v med dess efterföljare i inorder (alt. med dess föregångare i inorder) Värsta fallet: HEIGH( ) + jämförelser..5 Binära sökträd är inte unika Samma data kan generera olika binära sökträd insert:,,4,5,8 insert: 5,,,4,8.6 Lckad uppslagning BS i värsta fallet BS degenererat till linjär sekvens förväntat antal jämförelser är (n + )/ Balanserat BS djupet av löven skiljer sig inte med mer än O(log n) jämförelser.7 AVL-träd AVL-träd Självbalanserande BS/höjdbalanserat BS AVL = Adelson-Velskii och Landis, 96 Idén: Håll reda på balansinformation i varje nod AVL-egenskapenFör varje intern nod v i skiljer sig höjden av barnen till v med högst... eller alternativt... För varje intern nod v i gäller att b(v) {,,}, där b(v) = height(leftchild(v)) height(rightchild(v)).8 Maimal höjd av AVL-träd Proposition. Höjden av ett AVL-träd som lagrar n poster är O(logn). Vilket får som följd att... Proposition. Vi kan göra find, insert och remove i ett AVL-träd i tid O(logn) medan vi bevarar AVLegenskapen..9

Eempel: ett AVL-träd 44. 7 78 5 88 48 6 Insättning i ett AVL-träd Den na noden gör att trädhöjden förändras och att trädet måste höjdbalanseras. Man kan hålla reda på delträdens höjd på olika sätt: Lagra höjden eplicit i varje nod Lagra balansfaktorn för noden Förändringen brukar beskrivas som en höger- eller vänsterrotation av ett delträd. Det räcker med en rotation för att få trädet i balans igen.. Insättning i AVL-träd (enkla fall). Insättningsalgoritm Starta från den na noden och leta uppåt tills man hittar en nod s.a. dess grandparent är obalanserad. Markera :s förälder med. Gör en rekonstruering av trädet så här: Döp om,, till a,b,c baserat på deras inorder-ordning. Låt,,, vara en uppräkning i inorder av delträden till, och. (Inget av delträden får ha, eller som rot.) bts mot b, dess barn är nu a och c. och är barn till a och och är barn till c..

Eempel: insättning i ett AVL-träd 44 4.4 /c 7 78 /a 5 88 /b 48 6 54 Eempel: insättning i ett AVL-träd 44 b a c.5 7 6 5 78 48 54 88 Fra olika rotationer a= b= c= enkel rotation a= b= c= Om b = kallas det en enkel rotation. Rotera upp över.6 Fra olika rotationer a= b= c= enkel rotation a= b= c= Om b = kallas det en enkel rotation. Rotera upp över.7 4

Fra olika rotationer a= b= c= dubbel rotation a= b= c= Om b = kallas det en dubbel rotation. Rotera upp över och sedan över.8 Fra olika rotationer a= b= c= dubbel rotation a= b= c= Om b = kallas det en dubbel rotation. Rotera upp över och sedan över.9 Antag att vi har balans.... 5

... och sedan stoppar in något som sabbar den. Gör en enkel rotation. 6

Gör en enkel rotation. Gör en enkel rotation.4 Gör en enkel rotation.5 7

Gör en enkel rotation.6 Klart!.7 8

Ett ntt eempel....8... den här gången stoppar vi in något på ett annat ställe.9 Prova en enkel rotation igen.... 9

... hmm, vi har inte fått balans. Börja om från början... och titta på strukturen i.

Vi får lov att göra en dubbel rotation. Vi får lov att göra en dubbel rotation.4 Vi får lov att göra en dubbel rotation.5

Vi får lov att göra en dubbel rotation.6 Vi får lov att göra en dubbel rotation.7

Vi får lov att göra en dubbel rotation.8 Klart!.9 renodsrekonstruering = rotationer... Vissa författare använder vänster- och högerrotationer: Enkel vänsterrotation: vänstra delen av delträdet (a och j) sänks ner vi har roterat (upp) b över a a j k b l c m b a c j k l m.4 Dubbla rotationer... vå rotationer behövs när noderna som ska balanseras om är placerade i ett sicksackmönster. Rotera upp b över a Rotera upp b över c j a k b l c m a b j k l c m b a c j k l m.4

Borttagning i ett AVL-träd find och remove som i ett vanligt binärt sökträd Uppdatera balansinformationen på väg tillbaka upp till roten Om för obalanserat: Strukturera om... men... När vi återställer balansen på ett ställe kan det uppstå obalans på ett annat Måste upprepa balanseringen (eller kontroll av balansen) till dess vi når roten Högst O(logn) ombalanseringar.4 (, )-träd N approach: släpp på något av kraven AVL-träd: binärt träd, accepterar viss (liten) obalans... Kom ihåg: Fullt binärt träd: icke-tomt; graden är antingen eller för varje nod Perfekt binärt träd: fullt, alla löv har samma djup Kan vi bgga och underhålla ett perfekt träd (om vi struntar i binärt )? Då skulle vi alltid känna till söktiden i värsta fall eakt!.4 (,)-träd Förut: Ett pivotelement Om större letar vi till höger Om mindre letar vi till vänster Nu: illåt flera (nämligen ) pivotelement Antalet barn till en intern nod är antalet pivotelement + (dvs ) 5 8 5 8.44 Mer generellt (a, b)-träd Varje nod är antingen ett löv eller så har den c barn, där a c b Varje nod har mellan a och b pivotelement a (b + )/ (men roten behöver bara ha minst två barn (eller inga) även när a > gäller) find fungerar ungefär som förut insert måste kolla att noden inte blivit överfull (i så fall måste noden delas upp) remove kan leda till att man måste slå ihop noder eller föra över värden mellan noder Proposition. Höjden av ett (a,b)-träd som lagrar n dataelement är Ω(logn/logb) och O(logn/loga). Plattare träd, men mer jobb i noderna..45 4

Insättning i ett (a,b)-träd med a = och b = 5 Insert() 5 Insert(5) Insert(8) 5 5 Så länge det finns plats i barnet vi hittar, lägg till elementet i det barnet... Om fullt, dela upp och trck det utvalda pivotelementet uppåt...... detta kan hända upprepade gånger Insert(7) 7 5 5 8 5 5 7 8 5 5 8.46 Borttagning i (, )-träd re fall: Inga villkor brts genom borttagning Ett löv tas bort (blir tomt) För då över någon annan nckel till det lövet,... ok om vi har sskon med + element Delete(5) Överföring av och 5? 5 4 7? 7 5 5 5 8 5 5 4 5 4 5 5 8 4.47 Borttagning i (, )-träd Om ett löv tas bort (blir tomt) För då över någon annan nckel till det lövet, eller Slå ihop det med en granne 7 Delete(8) 5 5? 7 5 5 5 5 8 4 5 5 7 5 5 7 4.48 5

Borttagning i (, )-träd En intern nod blir tom Roten: ersätt med föregångare eller efterföljare i inorder Reparera sedan inkonsistenser med lämpliga ihopslagningar och överföringar... Delete() Ersätt......sl å ihop löv För f å element internt......sl å ihop noder? 7 5 7 5? 5 7 5 5 7 4 5? 4 5 4 5 4.49 4 B-träd B-träd Används för att upprätthålla ett inde över eternt data (t.e. innehållet på ett skivminne) Är ett (a,b)-träd där a = b/ Vi kan nu välja b så att en full nod precis tar upp ett block på skivminnet Genom att välja a = b/ kommer vi alltid att flla ett helt block på skivminnet när två block slås samman! B-träd (och varianter) används i många filsstem och databaser Windows: HPFS Mac: HFS, HFS+ Linu: ReiserFS, XFS, EtFS, JFS Databaser: ORACLE, DB, INGRES, PostgreSQL.5 6