Föreläsning 9 Datastrukturer (DAT037)

Relevanta dokument
Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning 4 Datastrukturer (DAT037)

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

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 10 Innehåll

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

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

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Föreläsning 7. Träd och binära sökträ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

Tentamen Datastrukturer (DAT036)

Algoritmer och datastrukturer 2012, fo rela sning 8

DAI2 (TIDAL) + I2 (TKIEK)

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

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

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

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

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

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 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

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.

Seminarium 13 Innehåll

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 3 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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Algoritmer och datastrukturer

Dugga Datastrukturer (DAT036)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

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

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

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

Träd Hierarkiska strukturer

Datastrukturer. föreläsning 9. Maps 1

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 13 Innehåll

Lösningar Datastrukturer TDA

Tentamen Datastrukturer (DAT036)

Föreläsning 7 Datastrukturer (DAT037)

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

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning Datastrukturer (DAT036)

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

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

13 Prioritetsköer, heapar

Tentamen Datastrukturer för D2 DAT 035

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: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 2 Datastrukturer (DAT037)

Trädstrukturer och grafer

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

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 14 Innehåll

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Föreläsning 2 Datastrukturer (DAT037)

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)

Föreläsning 11 Datastrukturer (DAT037)

Programkonstruktion och. Datastrukturer

Algoritmer och datastrukturer 2012, föreläsning 6

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

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

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Lösningsförslag till exempeltenta 1

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Föreläsning 1 Datastrukturer (DAT037)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning Datastrukturer (DAT037)

Datastrukturer och algoritmer

Tentamen Datastrukturer D DAT 036/INN960

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Informationsteknologi Tom Smedsaas 19 augusti 2016

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å

Tentamen i Algoritmer & Datastrukturer i Java

Transkript:

Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07

Innehåll 2 Obalanserade sökträd Balanserade sökträd AVL-träd Röd-Svarta träd B-träd

Sökträd

Binära sökträd 4 Binära träd med sökträdsegenskapen: Tomma binära träd är sökträd Ett icketomt binärt träd är ett sökträd om: Vänster och höger delträd är sökträd och alla element i vänstra delträdet < elementet i roten < alla element i högra delträdet Jämför heapsorteringsegenskapen som bara behöver kontrolleras lokalt

Binära sökträd Behöver kunna jämföra element, t ex med komparator Komparatorn antas implementera en strikt total ordning: Om x < y och y < z så är x < z Exakt en av följande gäller: x < y, x = y, x > y

Binära sökträd Sökträd kan användas för att implementera utökad mängd-/avbildnings-adt: Konstruerare: Tom mängd/avbildning member(k)/lookup(k) insert(k)/insert(k,v) delete(k) find-min()/find-max() delete-min()/delete-max() iterator(): Går igenom elementen i sorterad ordning Hashtabell implementerar inte effektivt de tre sista

Vilka träd är binära sökträd? A: 2 4 B: 7 C: 7 D: 7 E: 4 2 F: 7 7

7 Vilka träd är binära sökträd? A: C: E: 2 4 7 2 B: D: 4 F: 7 7 7 Svar: B, C och F

Obalanserade binära sökträd En möjlig implementation: public class BinarySearchTree <A extends Comparable<? super A>> { private class Node { A contents; Node left; // null om vänster barn saknas Node right; // null om höger barn saknas } Node(A contents) { thiscontents = contents; } private Node root; // null om trädet är tomt

Obalanserade binära sökträd Iterativ kod: public boolean member(a a) { Node here = root; while (here!= null) { int cmp = acompareto(herecontents); if (cmp < 0) { here = hereleft; } else if (cmp > 0) { here = hereright; } else return true; } } return false;

Obalanserade binära sökträd 0 Rekursiv kod (varning för stack overflow): public void insert(a a) { root = insert(a, root); } private Node insert(a a, Node n) { if (n == null) return new Node(a); } int cmp = acompareto(ncontents); if (cmp < 0) nleft = insert(a, nleft); else if (cmp > 0) nright = insert(a, nright); return n;

Obalanserade binära sökträd Hur tar man bort ett element? Förslag: Hitta nod som ska tas bort (om någon) Lätt om noden har noll eller ett barn Annars: Ta bort högra delträdets minsta elementet eller vänstra delträdets största element (dessa har max barn) Ersätt elementet som ska tas bort med innehållet i den borttagna noden

Obalanserade binära sökträd 2 Tidskomplexitet: member, insert, delete: O(höjd) deletemin: O(höjd) inorder-genomlöpning: Θ(storlek) Höjd: Värsta fallet: Θ(storlek) Värsta fallet uppstår t ex om man sätter in elementen, 2,, 4, Kan vi se till att värstafallshöjden är Θ(log storlek) (vilket gäller för kompletta träd, heapar)?

Balanserade sökträd

Balanserade sökträd 4 Sökträd som är balanserade, med höjden Θ(log storlek): AVL-träd (Adelson-Velsky & Landis) Röd-svarta träd (JDK: TreeMap) B + -träd

AVL-träd

AVL-träd Binärt sökträd Invariant (för varje nod): Vänster och höger delträds höjder skiljer sig maximalt med 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 B: 7 C: 7 D: 7 E: 4 2 F: 7 7

7 Vilka träd är AVL-träd? A: C: E: 4 2 7 2 B: D: 4 F: 7 7 7 Svar: A, B, C, F

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

member Som för obalanserade binära sökträd

insert 20 Skiss av en algoritm: Sätt in noden som vanligt Detta bryter ej sökträdsegenskapen, men kanske balanseringen Gå tillbaka mot roten, uppdatera höjder Vid första obalanserade noden: rotation Antingen enkel- eller dubbelrotation Det räcker med en rotation för att göra trädet balanserat

Trädrotationer 2 Grundläggande (enkel-) trädrotationer, höger- och vänster- Ändrar strukturen, bevarar ordningen D B B E A D A C C E

Enkelrotation, vänster-vänster- eller höger-höger-barn 22 Om vi satte in en ny nod i A och dess höjd ökade (med ), och första obalansen hittas i D: D B B D E h A h+ C h A h + C h E h Höjd innan insättning = h + 2 = ny höjd

Dubbelrotation, vänster-höger- eller höger-vänster-barn 2 Om C:s höjd ökade med ett och första obalansen hittas i F : (Motsvarande om E:s höjd ökade) F D B B F D G h + A h + A h + C h + E h G h + C h+ E h Höjd innan insättning = h + = ny höjd Två enkelrotationer

Dubbelrotation, specialfall 24 C B A A C B Höjd innan insättning = = ny höjd Två enkelrotationer

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

Vad blir resultatet av att sätta in i följande AVL-träd? 2 0 7 4 A: 4 2 0 7 B: 2 0 4 7 C: 2 0 4 7 D: 7 4 2 0 Svar: A 2

delete 2 Kan utgå från algoritmen för obalanserade binära sökträd Vandra mot roten (från noden som togs bort, vilket inte alltid där elementet fanns), uppdatera höjder och titta efter obalans på samma sätt som för insättning Vid obalans utför liknande rotationer som för insättning Alla rotationer gör vid borttagning inte att delträdets höjd förblir oförändrat Man får därför ibland fortsätta uppåt även efter en rotation

AVL-träd, komplexitet 27 Eftersom höjden är Θ(log n) så är tar alla operationer O(log n) Genomlöpning i ordning tar Θ(n)

AVL-träd 2 Animerat: https://wwwcsusfcaedu/~galles/ visualization/avltreehtml

2 Röd-svarta träd

Röd-svarta träd 0 JDK : TreeSet, TreeMap Höjd: Θ(log n) Samma tidskomplexitet för operationerna som för AVL-träd

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 https://wwwcsusfcaedu/ ~galles/visualization/ RedBlackhtml

B-träd 2

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 0 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 4 Några idéer: M-ära träd istället för binära: Kompletta träd grundare (log M n) M nycklar per nod Gör noder som ska sparas på disk så stora att de fyller ett diskblock (när de är fulla) Genom att kräva att antalet barn till interna noder är minst M/2 blir upprätthållandet av formen ganska enkel och den övre gränsen för djupet bra Används i filsystem och databaser