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

Relevanta dokument
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

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

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

Datastrukturer. föreläsning 10. Maps 1

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

Föreläsning Datastrukturer (DAT036)

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

Ä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.

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

Informationsteknologi Tom Smedsaas 19 augusti 2016

Träd Hierarkiska strukturer

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)

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 9 Innehåll

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

Föreläsning 10 Innehåll

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

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

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 4 Datastrukturer (DAT037)

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

Datastrukturer. föreläsning 9. Maps 1

Lösningar Datastrukturer TDA

Föreläsning 10 Datastrukturer (DAT037)

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

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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

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

Seminarium 13 Innehåll

Tentamen Datastrukturer D DAT 036/INN960

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

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

Datastrukturer. föreläsning 9. Maps 1

Datastrukturer i Haskell

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

Föreläsning 4 Datastrukturer (DAT037)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Tentamen Datastrukturer D DAT 036/INN960

Datastrukturer. Föreläsning 5. Maps 1

Trädstrukturer och grafer

Föreläsning 13 Innehåll

Magnus Nielsen, IDA, Linköpings universitet

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

Magnus Nielsen, IDA, Linköpings universitet

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

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen TEN1 HI

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å

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer (DAT036)

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.

DD1320 Tillämpad datalogi. Lösnings-skiss till tentamen

Algoritmer och datastrukturer

Tommy Färnqvist, IDA, Linköpings universitet. 1 Sortering Heap-sort Merge-sort Sammanfattning... 10

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Lösningsförslag till exempeltenta 1

Föreläsning 13. Träd

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Fredag 10 juni 2016 kl 8 12

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

Programmering II (ID1019) :00-11:00

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

13 Prioritetsköer, heapar

Magnus Nielsen, IDA, Linköpings universitet

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

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

Föreläsning Datastrukturer (DAT036)

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:15 19:15

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

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

Lösningsförslag till tentamen

Datastrukturer. Sammanfattning och Referenshäfte. Guldbrand, Eric Johansson, Algot

Träd - C&P kap. 10 speciellt binära sökträd sid. 452

Algoritmer och datastrukturer 2012, föreläsning 6

Föreläsning Datastrukturer (DAT036)

Träd. Ett träd kan se ut på detta sätt:

Transkript:

Föreläsning 6 Sökträd: AVL-träd, Multi-Wa -sökträd, B-träd DDC7/9: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer september omm Färnqvist, IDA, Linköpings universitet 6. Innehåll Introduktion find,insert och remove i ett binärt sökträd tar O(h) tid, där h är höjden av trädet. Håll sökträdet balanserat!! 6. Innehåll AVL-träd (, )-träd B-träd 5 6. 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)) 6.4 Maimal höjd av AVL-träd Proposition (. i kursboken). 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. 6.5

Eempel: ett AVL-träd 44 6.6 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. 6.7 Insättning i AVL-träd (enkla fall) 6.8 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. 6.9

Eempel: insättning i ett AVL-träd 44 4 6. /c 7 78 /a 5 88 /b 48 6 54 Eempel: insättning i ett AVL-träd 44 b a c 6. 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 6.

Fra olika rotationer a= b= c= dubbel rotation a= b= c= Om b = kallas det en dubbel rotation. Rotera upp över och sedan över 6.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 6.5 Antag att vi har balans... 6.6 4

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

Gör en enkel rotation 6.9 Gör en enkel rotation 6. Gör en enkel rotation 6. 6

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

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

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

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

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

Vi får lov att göra en dubbel rotation 6.4 Klart! 6.5 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 6.6 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 6.7

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 6.8 (, )-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! 6.9 (,)-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 6.4 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 (4. i kursboken). 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. 6.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 6.4 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 6.4 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 6.44 4

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 6.45 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/, dvs b = a 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 6.46 5