Datastrukturer. föreläsning 10. Maps 1

Relevanta dokument
Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 9. Maps 1

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

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

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

Träd Hierarkiska strukturer

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

Föreläsning 9 Innehåll

Föreläsning Datastrukturer (DAT036)

Datastrukturer och algoritmer

Algoritmer och datastrukturer 2012, fo rela sning 8

Programkonstruktion och. Datastrukturer

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

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

Seminarium 13 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

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

Tentamen Datastrukturer D DAT 035/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

Tentamen Datastrukturer D DAT 036/INN960

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

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av 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. föreläsning 6. Maps 1

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

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

Lösningar Datastrukturer TDA

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

Informationsteknologi Tom Smedsaas 19 augusti 2016

Datastrukturer. Föreläsning 5. Maps 1

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

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 14 Innehåll

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

Datastrukturer och algoritmer

Föreläsning 9 Innehåll

Enkellänkad lista header och sentinel

Föreläsning 4 Datastrukturer (DAT037)

Trädstrukturer och grafer

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

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

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

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

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

13 Prioritetsköer, heapar

Tentamen Datastrukturer, DAT037 (DAT036)

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen kl Uppgift 4. Uppgift 5

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Föreläsning Datastrukturer (DAT037)

Tentamen TEN1 HI

Föreläsning 13 Datastrukturer (DAT037)

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

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

Vad har vi pratat om i kursen?

Magnus Nielsen, IDA, Linköpings universitet

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

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 6 Datastrukturer (DAT037)

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

Hashtabeller. TDA416, lp3 2016

Lösningsförslag till exempeltenta 1

Fredag 10 juni 2016 kl 8 12

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

Fillagring och indexering

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

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

Inlämningsuppgift och handledning

Algoritmer och datastrukturer

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

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

Föreläsning 5: Grafer Del 1

Transkript:

Datastrukturer föreläsning 10 Maps 1

AVL-träd 1 2 5 2 0 4 1 8 3 2 1 11 1 7 Lecture 6 2

Insättning i AVL-träd Sätt först in det nya elementet på samma sätt som i ett vanligt BST! Det nya trädet kan bli obalanserat Balansera om trädet! Exempel: vi har satt in en ny nod med nyckel 7: 0 1 2 Lecture 6 3 5 1 8 1 ny nod obalans 6 4 3 2 0 7 0 lokal obalans 11 lokal obalans

Enkelrotation: princip nederst lokal obalans alltför djup nod Balansen återställd Lecture 6 4

Enkelrotation: exempel 5 obalans 3 5 11 8 11 3 8 10 10 alltför djup nod Balansen återställd Lecture 6 5

Dubbelrotation: princip nederst lokal obalans alltför djup nod Balansen återställd Lecture 6 6

Dubbelrotation: exempel 5 obalans 8 2 5 6 8 10 alltför djup nod 2 6 10 Balansen återställd Lecture 6 7

Trenodsomstrukturering Enkel och dubbelrotationer kallas med ett gemensamt namn trenodsomstruktueringar. Vi letar upp tre noder: den nedersta noden med lokal obalans samt dess barn och barnbarn så att barnet och barnbarnet tillhör delträd som har blivit alltför djupa. Dessa tre noder bestämmer fyra delträd. Vid enkelrotation gör man barnet till ny förälder med den gamla föräldern och barnbarnet som nya barn. Vid dubbelrotation gör man barnbarnet till ny förälder med gamla föräldern och barnet som nya barn. Lecture 6 8

Borttagning i AVL-träd Borttagning: som i binära sökträd Om obalans uppkommer omstrukturera med rotationer! Omstrukturering i delträd kan ge upphov till obalans högre upp vi kan behöva omstrukturera flera gånger Jfr: insättning räcker att omstrukturera en gång (kring nedersta obalanserade noden)! Lecture 6

Splayträd 6 2 1 4 8 Lecture 6 10

Splayträd Binärt sökträd Behöver ej vara balanserade som AVLträd Nycklar som man ofta letar efter skall ligga högt upp i trädet 0-10-regeln: 0% av sökningar är efter 10% av nycklarna Lecture 6 11

Splayträd Insättning, sökning och borttagning som i vanligt binärt sökträd, följt av en splay, dvs man omstrukturerar trädet så att den sist besökta nyckeln placeras i roten. Splayträden är inte balanserade som AVL-träd. Värstafallstiden är O(n). Den amorterade tidskomplexiteten per operation är trots detta O(log n). Lecture 6 12

Zig-zig Lecture 6 13

( dubbelrotation Zig-zag (jfr Lecture 6 14

Zig Lecture 6 15

Exempel: sätt in 11 5 5 3 3 8 12 8 12 10 10 11 Lecture 6 16

Exempel: sätt in 11 zig zag 3 5 8 12 3 5 8 11 10 11 10 12 Lecture 6 17

Exempel: sätt in 11 zig zig 5 11 3 12 8 11 5 10 10 12 3 8 Lecture 6 18

(2,4)-träd 2 5 7 10 14 Maps 1

Ett (2,4)-träd till 11 2 6 8 27 32 1 3 5 7 10 13 17 23 30 34 Maps 20

(2,4)-träd Varje inre nod har 2-4 barn. Varje nod lagrar 1-3 nycklar (+ värden) En inre nod som lagrar n nycklar har n+1 barn Alla löv ligger på samma djup (ett perfekt balanserat träd). Sökträdsegenskap: de n nycklarna i en nod separerar nycklarna i de n+1 delträden (se nästa bild, boken ger den allmänna egenskapen) Maps 21

(2,4)-träd har sökträdsegenskap 2, 8 är mindre än 10 12 ligger mellan 10 och 15 18 ligger mellan 15 och 24 27, 32 är större än 24 10 15 24 2 8 12 18 27 32 Maps 22

Sökning i (2,4)-träd Exempel: sök efter 30! 11 24 2 6 8 15 27 32 30 saknas Maps 23

Insättning Kan ge upphov till overflow. Vi måste då splittra en nod (se boken) Exempel: insättning av 30 orsakar overflow nedan: 10 15 24 2 8 12 18 v 27 32 35 10 15 24 Sätt in 30 2 8 12 18 27 30 32 35 Maps 24 v overflow

Röd-svarta träd v 6 3 8 4 z Maps 25

Rödsvarta träd: binära sökträd som representerar (2,4)-träd Ett röd-svart träd är ett binärt sökträd vars noder är färgade röda eller svarta Så här gör man om (2,4)-träd till rödsvarta träd: 4 3 5 2 6 7 4 5 3 6 3 eller 5 2 7 Maps 26

Röd-svarta träd Roten är svart Barnen till en röd nod är svarta Alla löv har samma svart-djup, dvs samma antal svarta förfäder (inklusive lövet självt). Detta motsvarar balanseringskravet på (2,4)-träd. 4 15 2 6 12 21 7 Maps 27

Insättning i röd-svarta träd 1. Använd först algoritmen för insättning i binära sökträd! 2. Färga den nya noden röd (undantag: den nya noden är rot)! 3. Vi kan då få en dubbel röd strukturera om eller måla om! 4 15 2 6 12 21 7 13 dubbel röd ny nod Maps 28

Ommålning Poängen med röd-svarta träd är att det ibland räcker att måla om trädet och detta är billigare än att omstrukturera det som i (2,4)- träd! (Jfr hur man handskas med overflow i (2,4)- träd.) måla röd 4 2 6 12 7 13 15 21 måla svart måla svart Maps 2

Omstrukturering Gör en enkelrotation (som i AVL-träd) av 6,7, 8! 7 blir svart med de röda barnen 6 och 8. (Jfr sambandet med (2,4)-träd. Vi behöver här bara se till att vi får en korrekt röd-svart representation av en 4-nod!) 4 15 2 6 12 21 dubbel röd 7 8 ny nod Maps 30

B-träd för sökning i externminne Om vår datasamling (mängd, lexikon) inte får plats i primärminnet måste vi lagra delar av den på externminne Tiden det tar för sökningar, insättningar och borttagningar beror huvudsakligen på antalet dataöverföringar från externminnet (disk) B-träd generaliserar (2,4)-träd, i stället för noder med mellan 2 och 4 barn har det noder med mellan d/2 och d barn. Storleken d kan vara ett block i externminnet. Maps 31

Mer om B-träd B-träd används ofta för filsystem och databaser Ett typiskt minnesblock kan vara 16 kb som ger ungefär d = 100. Söktid + rotationstid för ett element, ca 10 ms Förfiningar: B+ träd (nycklar i interna noder, element i löv) och B* träd (tätare packade interna noder) Man kan använda index (innehåller ett Maps 32 element från varje block)