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

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 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer och algoritmer

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

Föreläsning Datastrukturer (DAT036)

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

Träd Hierarkiska strukturer

Informationsteknologi Tom Smedsaas 19 augusti 2016

Datastrukturer. föreläsning 9. Maps 1

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

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, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

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

Föreläsning 9 Innehåll

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

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

Föreläsning 4 Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

Algoritmer och datastrukturer 2012, fo rela sning 8

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

Seminarium 13 Innehåll

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, 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 7. Träd och binära sökträd

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

Föreläsning 10 Datastrukturer (DAT037)

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

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

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

Föreläsning 13 Innehåll

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Datastrukturer i Haskell

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

Trädstrukturer och grafer

Fredag 10 juni 2016 kl 8 12

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen TEN1 HI

Tommy Färnqvist, IDA, Linköpings universitet

DAI2 (TIDAL) + I2 (TKIEK)

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning Datastrukturer (DAT036)

Magnus Nielsen, IDA, Linköpings universitet

Algoritmer och datastrukturer

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

Föreläsning 5 Datastrukturer (DAT037)

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

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

Föreläsning Datastrukturer (DAT036)

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Föreläsning 14 Innehåll

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

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

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.

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Föreläsning 13. Träd

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

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

13 Prioritetsköer, heapar

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

Algoritmer och datastrukturer 2012, föreläsning 6

Tentamen Datastrukturer, DAT037 (DAT036)

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

Ekvivalensrelationer

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

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å

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

Innehåll. Binära sökträd. Binärt sökträd. AVL-träd. Exempel på ett AVL-träd. ÿdelar av kapitel 15 i boken + OH-bilderna

Tentamen Datastrukturer (DAT036)

Tentamen kl Uppgift 4. Uppgift 5

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

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Lösningsförslag till tentamen

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

Programmering II (ID1019) :00-11:00

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

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

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

Tildatenta Lösningsskiss

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

Transkript:

Föreläsning 5 TDDC91,TDDE22,725G97: DALG Föreläsning i Datastrukturer och algoritmer 18 september 2018 Institutionen för datavetenskap Linköpings universitet 5.1

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!! 5.2

Sökträd är coolt! Sökträd får till och med vara med på TV! CSI Criminal Minds Missing (CAN) 5.3

Riktigt coolt! 5.4

Självbalanserande BST/höjdbalanserat BST AVL = Adelson-Velskii och Landis, 1962 Idén: Håll reda på balansinformation i varje nod AVL-egenskapen För varje intern nod v i T skiljer sig höjden av barnen till v med högst 1... eller alternativt... För varje intern nod v i T gäller att balans(v ) { 1, 0, 1}, där balans(v ) = height(leftchild(v )) height(rightchild(v )) 5.5

Maximal höjd av Proposition Höjden av ett som lagrar n poster är O(log n). Vilket får som följd att... Proposition Vi kan göra find, insert och remove i ett i tid O(log n) medan vi bevarar AVL-egenskapen. 5.6

Borttagning i ett 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(log n) ombalanseringar 5.7

Rotationer Balansering måste göras både vid insert och remove Fyra möjliga rotationer: "Höger"eller "vänster Enkel- eller dubbelrotation 5.8

Exempel: ett 44 3 17 1 78 2 0 0 1 32 50 88 0 48 0 62 5.9

Insättning i ett Den nya 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 explicit 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. 5.10

Insättning i (enkla fall) 5.11

Insättningsalgoritm Starta från den nya noden och leta uppåt tills man hittar en nod x s.a. dess grandparent z är obalanserad. Markera x:s förälder med y. Gör en rekonstruering av trädet så här: Döp om x, y, z till a, b, c baserat på deras inorder-ordning. Låt, T1, T2, T3 vara en uppräkning i inorder av delträden till x, y och z. (Inget av delträden får ha x, y eller z som rot.) z byts mot b, dess barn är nu a och c. och T1 är barn till a och T2 och T3 är barn till c. 5.12

Exempel insättning i ett 44 4 z/c 17 1 78 3 y/a 0 32 0 0 2 T3 88 50 48 x/b 1 62 T1 54 5.13

Exempel: insättning i ett 44 b 3 17 a T1 c T2 T3 1 62 2 0 1 1 32 78 50 0 48 0 0 54 88 5.14

Fyra olika rotationer b=y a=z enkel rotation b=y a=z c=x c=x T3 T1 T3 T1 T2 T2 Om b = y kallas det en enkel rotation. Rotera upp y över z 5.15

Fyra olika rotationer b=y c=z enkel rotation a=x b=y c=z a=x T2 T3 T1 T2 T3 T1 Om b = y kallas det en enkel rotation. Rotera upp y över z 5.16

Fyra olika rotationer b=x a=z dubbel rotation c=y a=z c=y b=x T2 T2 T3 T1 T3 T1 Om b = x kallas det en dubbel rotation. Rotera upp x över y och sedan över z 5.17

Fyra olika rotationer b=x c=z dubbel rotation a=y a=y c=z b=x T3 T1 T1 T2 T3 T2 Om b = x kallas det en dubbel rotation. Rotera upp x över y och sedan över z 5.18

Ett annat sätt att beskriva det på y x T2 T1 Antag att vi har balans... 5.19

Ett annat sätt att beskriva det på y x T2 T1... och sedan stoppar in något som sabbar den 5.20

Ett annat sätt att beskriva det på y x T2 T1 Gör en enkel rotation 5.21

Ett annat sätt att beskriva det på y x T2 T1 Gör en enkel rotation 5.22

Ett annat sätt att beskriva det på y x T2 T1 Gör en enkel rotation 5.23

Ett annat sätt att beskriva det på x y T1 2 Gör en enkel rotation 5.24

Ett annat sätt att beskriva det på x y Gör en enkel rotation T1 T20 5.25

Ett annat sätt att beskriva det på x y Klart! T1 T20 5.26

Ett annat sätt att beskriva det på z y Ett nytt exempel... 5.27

Ett annat sätt att beskriva det på z y... den här gången stoppar vi in något på ett annat ställe 5.28

Ett annat sätt att beskriva det på z y Prova en enkel rotation igen... 5.29

Ett annat sätt att beskriva det på y z... hmm, vi har inte fått balans 5.30

Ett annat sätt att beskriva det på z y Börja om från början... och titta på strukturen i y 5.31

Ett annat sätt att beskriva det på z y T3 x T1 T2 Vi får lov att göra en dubbel rotation 5.32

Ett annat sätt att beskriva det på z y T3 x T1 T2 Vi får lov att göra en dubbel rotation 5.33

Ett annat sätt att beskriva det på z y T3 x T1 T2 Vi får lov att göra en dubbel rotation 5.34

Ett annat sätt att beskriva det på z y T3 x T1 T2 Vi får lov att göra en dubbel rotation 5.35

Ett annat sätt att beskriva det på z y T3 x T1 T2 Vi får lov att göra en dubbel rotation 5.36

Ett annat sätt att beskriva det på x y z T1 T2 Vi får lov att göra en dubbel rotation T3 5.37

Ett annat sätt att beskriva det på x y z Klart! T1 T2 T3 5.38

Trenodsrekonstruering = 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 b b j a c k l m j c k l m 5.39

Dubbla rotationer... Två 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 c a k b a a b j c b m j k l m j c k l m l 5.40

Borttagning i ett 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(log n) ombalanseringar 5.41

Ny approach: släpp på något av kraven : binärt träd, accepterar viss (liten) obalans... Kom ihåg: Fullt binärt träd: icke-tomt; graden är antingen 0 eller 2 för varje nod Perfekt binärt träd: fullt, alla löv har samma djup Kan vi bygga 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 exakt! 5.42

Förut: Ett pivotelement 5 Om större letar vi till höger Om mindre letar vi till vänster Nu: Tillåt flera (nämligen 1 2) pivotelement Antalet barn till en intern nod är antalet pivotelement + 1 (dvs 2 3) 2 8 5 2 10 8 12 5.43

Insättning i ett (a, b)-träd med a = 2 och b = 3 5 Så länge det finns plats i barnet vi hittar, lägg till elementet i det barnet... Insert(10) 5 10 Om fullt, dela upp och tryck det utvalda pivotelementet uppåt...... detta kan hända upprepade gånger Insert(15) 10 5 10 Insert(18) 15 5 10 Insert(17) 15 18 5 15 17 18 10 17 5 15 18 5.44

Borttagning i Tre fall: Inga villkor bryts genom borttagning Ett löv tas bort (blir tomt) För då över någon annan nyckel till det lövet,... ok om vi har syskon med 2+ element 20? 10 17 5 15 Överföring av 30 och 35 30 Delete(25) 18 25 30 10 17? 35 40 20 35 40 30 35 40 5 15 35 18 30 40 5.45

Borttagning i Om ett löv tas bort (blir tomt) För då över någon annan nyckel till det lövet, eller Slå ihop det med en granne 10 17 20 Delete(18) 10 17 5 15 5 35 18 30 15? 20 10 10 40 5 15 17 5 35 15 17 30 40 5.46

Borttagning i 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... Ersätt......slå ihop löv Delete(20)? 20 10 5 10 35 17 För få element internt......slå ihop noder 30 40 5 17?? 35 17 30 40 5 10 35 30 17 35 40 5 10 30 40 5.47

Nästa gång Prioritetsköer och heapar... 5.48