Föreläsning Datastrukturer (DAT036)



Relevanta dokument
Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037)

Datastrukturer. föreläsning 10. Maps 1

Föreläsning Datastrukturer (DAT036)

Ä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. föreläsning 10. Maps 1

Föreläsning 4 Datastrukturer (DAT037)

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

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

Datastrukturer. föreläsning 9. Maps 1

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037)

Programkonstruktion och. Datastrukturer

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

Algoritmer och datastrukturer 2012, fo rela sning 8

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

Träd Hierarkiska strukturer

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 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Tentamen Datastrukturer (DAT036)

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

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/DAT037/DIT960)

Seminarium 13 Innehåll

Lösningar Datastrukturer TDA

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)

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

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

Tentamen Datastrukturer D DAT 035/INN960

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

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

Föreläsning 13 Innehåll

Föreläsning 13 Datastrukturer (DAT037)

Datastrukturer. Föreläsning 5. Maps 1

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

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

Föreläsning 9 Innehåll

Föreläsning 13 Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

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

Datastrukturer. föreläsning 9. Maps 1

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

Tentamen Datastrukturer D DAT 036/INN960

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

Föreläsning 3 Datastrukturer (DAT037)

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

Informationsteknologi Tom Smedsaas 19 augusti 2016

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer och algoritmer

Föreläsning Datastrukturer (DAT036)

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

Tentamen Datastrukturer för D2 DAT 035

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 10 Innehåll

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

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

Föreläsning 11 Datastrukturer (DAT037)

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

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

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

Föreläsning 6 Datastrukturer (DAT037)

Fredag 10 juni 2016 kl 8 12

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (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

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

Vad har vi pratat om i kursen?

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

Föreläsning Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 3 Datastrukturer (DAT037)

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

Trädstrukturer och grafer

Tentamen TEN1 HI

Tentamen Datastrukturer (DAT036)

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

Föreläsning 14 Innehåll

Tentamen Datastrukturer (DAT036)

Datastrukturer. föreläsning 6. Maps 1

13 Prioritetsköer, heapar

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

Föreläsning 13. Träd

Föreläsning 2 Datastrukturer (DAT037)

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 9. Sortering

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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.

Måndag 13 mars 2017 kl Rita en KMP-automat för CAMCORDERCAMERA samt ange next-vektorn.

Algoritmer och datastrukturer

Transkript:

Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-27

Idag Balanserade sökträd Splayträd Skipplistor

AVL-träd

AVL-träd Sökträd Invariant (för varje nod): Vänster och höger delträd har samma höjd, ±1 Höjd: Θ(log n) Operationer som ändrar trädets struktur använder (ibland) rotationer för att återställa invarianten

Vilka träd är AVL-träd? A: 4 2 1 3 6 5 B: 7 3 1 6 8 9 C: 8 3 1 7 9 D: 7 5 3 1 6 9 E: 4 2 1 3 5 6 F: 7 1 5 8

AVL-träd Implementation: Spara höjd i varje nod Alternativ: Spara höjdskillnad (-1, 0 eller 1) Ibland används föräldrapekare

member Precis som för obalanserade binära sökträd

insert Skiss av en algoritm: Sätt in noden som vanligt Gå tillbaka mot roten, uppdatera höjder Vid första obalanserade noden: rotation Antingen enkel- eller dubbelrotation (se tavlan eller boken) Det räcker med en rotation för att göra trädet balanserat

delete Kan utgå från algoritmen för obalanserade binära sökträd Kan behöva rotera flera gånger Alternativ: Lat borttagning

AVL-träd Animerat: http://wwwqmaticacom/ DataStructures/Trees/AVL/AVLTreehtml

Vad blir resultatet av att sätta in 5 i följande AVL-träd? 2 1 0 7 4 3 6 9 8 A: 4 2 1 0 3 7 6 5 9 8 B: 5 2 1 0 3 4 7 6 9 8 C: 2 1 0 6 4 3 5 8 7 9 D: 7 4 2 1 0 3 6 5 9 8

Röd-svarta träd

Röd-svarta träd JDK 7: TreeSet, TreeMap Höjd: Θ(log n)

Röd-svarta träd Invariant: Alla noder är svarta eller röda Roten är svart Röda noder har svarta barn Alla (enkla) vägar från roten till noder med max ett barn innehåller lika många svarta noder

Splayträd

Splayträd Inte nödvändigtvis balanserade Träden omformas dynamiskt, även vid member/lookup När man är långt ned i trädet passar man på att hämta upp djupa noder

Zig, zag En nod är i zig-position om den är ett vänsterbarn Zag: Högerbarn Zig-zag: Högerbarn till vänsterbarn Och så vidare

Splayträd Hämta upp (splaya) genom att rotera längs med sökvägen: Zig, zag (för barn till roten): Enkelrotationer Zig-zag, zag-zig: Dubbelrotationer Rotera upp noden, rotera upp noden igen Zig-zig, zag-zag: En annan sorts dubbelrotationer Rotera först upp föräldern, sedan noden

Vad blir resultatet av att sätta in 8 i följande splayträd? 2 1 0 6 4 3 5 9 7 A: 8 2 1 0 6 4 3 5 7 9 B: 2 1 0 6 4 3 5 8 7 9 C: 8 6 2 1 0 4 3 5 7 9 D: 8 2 1 0 7 6 4 3 5 9

Splayträd Borttagning (en variant): Tomt träd: Klar Leta upp noden, och splaya upp den till roten (eller splaya upp sista noden som besöktes och avbryt) Om högra delträdet tomt: Ta bort roten Annars: Splaya upp högra delträdets minsta element till högra delträdets rot, byt ut roten mot högra delträdets rot

Splayträd Tidskomplexitetsanalys: Lite komplicerad Splaya upp en nod: O(log n) amorterat find-min, delete-min: O(log n) amorterat member, insert, delete: O(log n) amorterat (om jämförelser tar konstant tid) Antagande: Enkeltrådad användning

B-träd

B-träd Vad händer om en avbildning inte får plats i minnet, och lagras på en hårddisk e d? Läsa från hårddisk: Kanske 10 6 gånger långsammare än CPU-instruktion Vår modell fungerar inte så bra Alternativ modell: Räkna diskoperationer, CPU-instruktioner gratis OK att göra något (rimligt) komplicerat om vi kan minska antalet diskoperationer

B-träd Några idéer: M-ära träd istället för binära: Kompletta träd grundare (log M n) M 1 nycklar per intern nod Gör noder som ska sparas på disk så stora att de fyller ett diskblock (när de är fulla)

B-träd Används i filsystem och databaser

Skipplistor

Skipplistor Sorterad länkad lista: långsam sökning Kanske kan lägga till fler länkar Om nod i2 k har länk till nod (i + 1)2 k : snabb sökning, långsam insättning Höjd (maximalt antal länkar från en nod): Θ(log n) member: O(log n) (om jämförelser tar konstant tid) insert: O(n)

Skipplistor Skipplistor: Samma idé, men slumpmässig struktur (samt vaktpost av maximal höjd i början) Insättning: Slumpmässig höjd på noden Stanna på höjd 1 med sannolikhet 1 p Stanna på höjd 2 med sannolikhet 1 p

Skipplistor Sannolikhet för höjd h: P (h) = (1 p)p h 1 Förväntad höjd: hp (h) = 1/(1 p) h=1 Rekommenderade val av p: 1/4, 1/2

Vad är det förväntade antalet noder med höjd h (exklusive vaktposten)? pn h 1 n(1 p)p h 1 np h 1 n n(1 p) h 1

Skipplistor Förväntad tidskomplexitet för insert, member, delete, för konstant p: O(log n) (om jämförelser tar konstant tid) I praktiken: Maxhöjd log 1/p N, där N är listans största tänkbara storlek

Sammanfattning Idag: Balanserade sökträd Splayträd Skipplistor Nästa gång: Mer om sortering