Datastrukturer. Föreläsning 5. Maps 1

Relevanta dokument
Träd Hierarkiska strukturer

Datastrukturer. föreläsning 10. Maps 1

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

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Innehåll

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

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

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

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Trä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

Datastrukturer. föreläsning 9. Maps 1

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

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 4 Datastrukturer (DAT037)

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

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

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 13 Innehåll

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 14 Innehåll

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

Algoritmer och datastrukturer 2012, föreläsning 6

13 Prioritetsköer, heapar

Datastrukturer. föreläsning 10. Maps 1

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

Föreläsning 9 Innehåll

Träd. Rot. Förgrening. Löv

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037)

Tentamen kl Uppgift 4. Uppgift 5

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

Föreläsning 3 Datastrukturer (DAT037)

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

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning Datastrukturer (DAT037)

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 med lösningsförslag Datastrukturer för D2 DAT 035

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

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

Lösningar Datastrukturer TDA

Trädstrukturer och grafer

Föreläsning 13. Träd

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

Tentamen Datastrukturer (DAT036)

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

Föreläsning 5 Datastrukturer (DAT037)

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Fredag 10 juni 2016 kl 8 12

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 13 Datastrukturer (DAT037)

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Föreläsning 13 Datastrukturer (DAT037)

Datastrukturer. föreläsning 6. Maps 1

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

Lösningsförslag till exempeltenta 1

Vad har vi pratat om i kursen?

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Programkonstruktion och. Datastrukturer

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

Tentamen TEN1 HI

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

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

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

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

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

Tentamen Datastrukturer (DAT036)

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

Programmering fortsättningskurs

Tentamen Datastrukturer D DAT 036/INN960

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

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

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

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer D DAT 036/INN960

Datastrukturer och algoritmer

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

Transkript:

Datastrukturer Föreläsning 5 Maps 1

Traversering av träd Maps 2

Preordningstraversering Traversera = genomlöpa alla noderna i ett träd Varje nod besöks innan sina delträd Preordning = djupet först Exempel: innehållsförteckning för dokument med kapitelstruktur 1 3 2 Make Money Fast! 1. Motivations 2. Methods References 4 1.1 Greed 1.2 Avidity 2.1 Stock Fraud ( preorder(v Algorithm ( visit(v for each child w of v ( w ) preorder 5 6 7 8 2.2 Ponzi Scheme 2.3 Bank Robbery 9 Maps 3

Utskrift av träd i preordning ( print(offset,v Algorithm for i = 0 to offset print a blank print data in v for each child w of v ( offset+3,w ) print Maps 4

Exempel på utskrift av träd print(0,root) ger Make Money Fast 1. Motivations 1.1 Greed 1.2 Avidity 2. Methods 2.1 Stock Fraud 2.2 Ponzi Scheme 2.3 Bank Robbery 3. References 2 1 Make Money Fast! 5 1. Motivations 2. Methods References 9 3 1.1 Greed 1.2 Avidity 4 6 7 2.1 Stock Fraud 2.2 Ponzi Scheme 8 2.3 Bank Robbery Maps 5

Postordningstraversering Varje nod besöks efter sina delträd Djupet-först! Exempel: beräkning av hur mycket plats en viss katalog och dess underkataloger tar i minnet 1 h1c.doc 3K 3 homeworks/ h1nc.doc 2K 9 DDR.java 10K cs16/ ( postorder(v Algorithm for each child w of v ( w ) postorder ( visit(v programs/ 2 4 5 6 7 Stocks.java 25K Robot.java 20K 8 todo.txt 1K Maps 6

Inordningstraversering av binärt träd Varje nod besöks efter sitt vänstra delträd och före sitt högra delträd Förutsätter alltså att trädet är binärt 2 6 ( inorder(v Algorithm () v.isinternal if (() v.left ) inorder ( visit(v () v.isinternal if (() v.right ) inorder 8 1 4 7 9 3 5 Maps 7

Inordertraversering av binära sökträd Om man gör en inordertraversering av ett binärt sökträd besöker man noderna i växande ordning 2 5 7 1 3 6 4 Maps 8

Utskrift av aritmetiska uttryck Inordertraversering Skriv ut en nod när den besöks Skriv ( innan vänster delträd besöks Skriv ) efter höger delträd besökts 2 - a 1 + 3 b ( printexpression(v Algorithm () v.isinternal if ( ) ) print (() printexpression(v.left (() print(v.element () v.isinternal if (() printexpression(v.right ( ( ) print (( b (a - 1)) + (3 ((2 Maps 9

Beräkning av aritmetiska uttryck Beräkna delträd i postordning 2-5 1 + 3 2 ( evalexpr(v Algorithm () v.isexternal if () v.element return else (() evalexpr(v.left x (() evalexpr(v.right y o operator stored at v if o = + return x + y if o = * return x*y if o = - return x-y if o = / return x/y Maps 10

Hur implementerar man träd? Hur implementerar man träd? Hur implementerar man binära träd? Hur genomsöker (traverserar) man ett träd? Hur genomsöker man ett binärt träd? Maps 11

Enkellänkade binära träd En nod innehåller (Pekare till) element Pekare till vänster barn Pekare till höger barn B A D C E Maps 12

Dubbellänkade binära träd En nod innehåller Pekare till element Pekare till vänster barn Pekare till höger barn Pekare till föräldern Notera att vi här använder vaktposter ( sentinels ). Man kan förstås implementera dubbellänkade träd utan vaktposter och enkellänkade träd med vaktposter om man vill. B D vaktpost Maps 13

Att lagra binära träd i fält exempel 2 Ett binärt träd 5 6 Samma träd lagrat i ett fält 9 7 2 5 6 9 7 Maps 14

Att lagra binära träd i fält - exempel 0 Ett binärt träd 1 2 Samma träd lagrat i ett fält 3 5 6 0 1 2 3 5 6 8 8 Maps 15

Att lagra binära träd i fält allmän princip Roten lagras i cell 0 Om en viss nod lagras i cell i så lagras vänster barn i cell 2i + 1 höger barn i cell 2i + 2 ( 1 + 2i (Obs. G&T lägger roten i 1 och barnen i 2i och Ett binärt träd är fullständigt om noderna lagras i cellerna 0, 1, 2,, n-1 Om det binära trädet kan växa obegränsat behöver vi dynamiskt fält. 08-11-11 12:42

Implementering av allmänna träd En nod i ett allmänt träd kan ha godtyckligt många barn, fler än 2. Implementeringsmetod 1. Låt varje nod ha en lista av (pekare till) sina barn! Implementeringsmetod 2. Transformera trädet till ett binärt träd och använd implementering av binära träd! Maps 17

Allmänna träd som binära träd A A B C D B E F G H E C H I J H F G H D I ett allmänt träd J transformerat till ett binärt träd Maps 18

Implementering av allmänna träd en Javaklass Alt 2. Transformera till binärt träd! Använd sedan t ex länkad stuktur för binära träd. Om vi döper om tillståndsvariablerna blir det lättare att se vad som händer: class TreeNode<E> { E elem; TreeNode<E> eldestchild; TreeNode<E> nextsibling; } Maps 19

Prioritetsköer Sell 100 IBM $122 Sell 300 IBM $120 Buy 500 IBM $119 Buy 400 IBM $118 Maps 20

Prioritetsköer Hur implementerar man en datastruktur om man ofta vill veta vilket element som har högst prioritet? Exempel: lägsta säljkurs eller högsta köpkurs för en aktie. Exempel: närmaste spårvagnshållplats i lab 3. Maps 21

Vad är en prioritetskö? En prioritetskö lagrar par <k,v> av nycklar (k) och värden (v) Det finns en ordningsrelation på nycklarna: k1 < k2 betyder k1 har högre prioritet än k2. Den viktigaste operationen minkey returnerar nyckeln med högst prioritet, eller motsvarande värde minelem Man vill göra dessa operationer effektiva. 08-11-11 12:42

En ADT för prioritetsköer De viktigaste operationerna är minkey() () minelement () removemin ( v insertitem(k, () isempty Maps 23

Prioritetsköer: två enkla implementeringar Osorterade listor (loggfiler): ( O(n minkey är ( O(1 insertitem är Sorterade listor: ( O(1 minkey är ( O(n insertitem är Maps 24

Finns det någon mer effektiv implementering av prioritetsköer? Hur gör vi så att alla operationerna blir effektiva? Även insättning och borttagning bör vara effektiva! Maps 25

Heapar Fullständiga binära träd Har heapegenskapen, dvs föräldrarnas nycklar är mindre än eller lika med barnens 5 2 6 9 7 8 12 11 10 08-11-11 12:42

Heapar och prioritetsköer Vi kan implementera prioritetsköer effektivt med hjälp av heapar Heapen implementeras med dynamiskt fält eftersom vi gör insättningar ( Sue,2) ( Pat,5) ( Mark,6) ( Anna,7) ( Jeff,9) Maps 27

En heap lagrad i ett fält exempel 2 träd En heap är ett fullständigt binärt 5 6 Heapen lagrad i ett fält 9 7 2 5 6 9 7 Maps 28

Fullständiga binära träd igen Låt h vara höjden på ett fullständigt binärt träd. Då är nivå i = 0,, h-1 fulla, dvs de innehåller 2 i noder Nivå h är fylld från vänster 2 5 6 9 7 Maps 29

Höjden på ett fullständigt binärt träd fullständigt binärt träd med ( n n element har höjden O(log Bevis: n 1 + 2 + 4 + + 2 h-1 + 1 = 2 h Alltså, n 2 h och h log n djup 0 1 h-2 h-1 noder 1 2 2 h-2 2 h-1 h Maps 30

Hur implementerar man prioritetsköoperationerna med hjälp av en heap? Maps 31

Insättning av nytt element - Sätt först in det nya elementet på första lediga plats på sista raden! - Återställ heapegenskapen! Se nästa bild. 9 5 5 9 7 1 7 2 2 6 6 ny nod 08-11-11 12:42

Bubbla uppåt En ny nod som satts in sist kan ha en nyckel som är mindre än förälderns! Heap-egenskapen gäller då inte längre. Återställ heap-egenskapen genom att bubbla uppåt : jämför den nya nodens nyckel k med förälderns nyckel, om k är mindre byter vi plats med föräldern, sedan jämför vi med förälderns förälder, etc. Bubblingen avbryts när vi kommer till en förälder vars nyckel är mindre än eller lika med k. Tidskomplexiteten är O(log n) eftersom heapens höjd är det 2 1 5 9 7 6 z 1 5 z 9 7 6 2 Maps 33

Borttagning av minsta elementet 2 5 6 Minsta elementet ligger i roten Ta bort det och ersätt med sista elementet Återställ heapegenskapen genom att bubbla ned 9 9 5 7 7 sista noden blir ny rot 6 08-11-11 12:42

Bubbla nedåt Den nya roten har antagligen inte minst nyckel längre Återställ därför heapegenskapen genom att bubbla nedåt En bubbling utförs genom att en förälder jämförs med båda barnen Högst prioriterat (dvs den som har minst nyckel) barn byter plats med föräldern 08-11-11 12:42