Datastrukturer. föreläsning 10. Maps 1

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

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 9. Maps 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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

Tentamen Datastrukturer D DAT 035/INN960

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

Datastrukturer. Föreläsning 5. Maps 1

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

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

Datastrukturer. föreläsning 6. Maps 1

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 9 Innehåll

Lösningar Datastrukturer TDA

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

Tentamen Datastrukturer för D2 DAT 035

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

Föreläsning 4 Datastrukturer (DAT037)

Träd Hierarkiska strukturer

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

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

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

Programkonstruktion och. Datastrukturer

Seminarium 13 Innehåll

Föreläsning 10 Innehåll

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer D DAT 036/INN960

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

Tentamen Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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)

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

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

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 4 Datastrukturer (DAT037)

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

DAI2 (TIDAL) + I2 (TKIEK)

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

Föreläsning 9 Innehåll

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

Informationsteknologi Tom Smedsaas 19 augusti 2016

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

Datastrukturer och algoritmer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

Föreläsning 13 Datastrukturer (DAT037)

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

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 13 Innehåll

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

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

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

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

Föreläsning 8 Datastrukturer (DAT037)

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Trädstrukturer och grafer

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

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

Tentamen Datastrukturer D DAT 035/INN960

Datastrukturer. föreläsning 8. Maps 1

Tentamen kl Uppgift 4. Uppgift 5

13 Prioritetsköer, heapar

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

Föreläsning Datastrukturer (DAT037)

Datastrukturer. föreläsning 3. Stacks 1

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

Fredag 10 juni 2016 kl 8 12

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Tentamen Datastrukturer, DAT037 (DAT036)

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

Föreläsning 3 Datastrukturer (DAT037)

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 14 Innehåll

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

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

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

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

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

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

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

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer (DAT036)

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

Exempeltenta GruDat 2002/2003

Transkript:

Datastrukturer föreläsning 10 Maps 1

Minsta uppspännande träd Maps 2

Minsta uppspännande träd Uppspännande träd till graf fritt delträd innehåller alla noderna Minsta uppspännande träd (MST) är det uppspännande träd som har minst totalvikt (summera bågarnas vikter) Tillämpningar Kommunikationsnätverk Transportnätverk DEN 4 DFW 1 8 9 ORD 6 STL 10 3 5 ATL PIT DCA 2 7 Maps 3

Kruskals algoritm för MST De snåla kommunalpolitikernas algoritm för att asfaltera vägar i kommunen! 1 ORD 10 PIT DEN 4 9 6 STL 3 7 DCA 8 5 2 DFW ATL Maps 4

Kruskals algoritm för MST De snåla kommunalpolitikernas algoritm för att asfaltera vägar i kommunen! 1. Asfaltera den kortaste vägen i kommunen 2. Asfaltera den näst kortaste vägen i kommunen, osv 3. Asfaltera dock aldrig någon väg mellan två noder som redan är förbundna med asfalterade vägar DEN 4 DFW 1 8 9 ORD STL 10 ATL PIT Maps 5 6 5 3 DCA 2 7

Hur implementerar man Kruskals algoritm? Gör en prioritetskö av alla bågar viktordning. O(m log m) Konstruera en skog F av fria träd. Från början innehåller varje träd bara en nod. Till slut innehåller F hela mst. Välj minsta bågen i prioritetskön. Om den går mellan olika komponenter i F, slå samman dessa komponenter via bågen. (Detta görs med en algoritm som kallas union-find.) O(m log n). 6

Binära sökträd < 6 2 > = 1 4 8 9 Maps 7

Implementeringsmetoder för binära träd - repetition Maps 8

Enkellänkade binära träd En nod innehåller Pekare till element (elementet självt om primitiv typ) Pekare till vänster barn Pekare till höger barn A B D C E Maps 9

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 10

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 11

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 (Obs. G&T lägger roten i 1 och barnen i 2i och 2i + 1) Ett binärt träd är fullständigt om dess n noder lagras i cellerna 0,, n-1. Om fullständiga binära träd lagras i fält har inga tomma mellanrum! Obs. Om våra träd växer kan vi behöva dynamiska (utvidgbara) fält! Maps 12

Varför binära sökträd? Binärsökning i sorterat fält: - snabb uppslagning (O(log n)) men - långsam insättning och borttagning (O(n)) Binärt sökträd: - snabb uppslagning, insättning och borttagning om trädet är balanserat (O(log n)) Maps 13

Vad är ett binärt sökträd? Definition Binära träd som lagrar nycklar (och evt element) och har sökträdsegenskapen: Låt v vara trädets rot och u och w vara vänster resp höger barn. Då gäller key(u) < key(v) < key(w) Vänster och höger delträd är också binära sökträd. Alltså gäller att alla nycklar i vänster delträd är mindre än rotens nyckel, och alla i höger delträd är större än rotens nyckel. (Vi förutsätter här att vi lagrar avbildningar, dvs inga dublettnycklar.) Maps 14

Sökning Algorithm findelement(k, o) if o = null return NO_SUCH_KEY if k = key(o) return element(o) else if k < key(o) return findelement(k, o.left) else if k > key(o) return findelement(k, o.right) Maps 15

findelem i Haskell BinTree a = Empty Node a (BinTree a) (BinTree a) findelem :: Ord k => k -> BinTree (k,v) -> Maybe v findelem k Empty = Nothing findelem k (Node (k,v) left right) k == k = Just v k < k = findelem k left k > k = findelem k right Maps 16

Insättning Operationen insertitem(k,v) sätter in ett nytt par (k,v) på rätt plats Exempel: sätt in ett nytt par med nyckel 5 2 2 < > 1 4 8 1 4 8 5 6 > 6 9 9 Maps 17

Borttagning: fall 0 och 1 barn Operationen removeelement(k) söker efter nyckeln k och om den finner den tar bort motsvarande nod v Fall 0: om v saknar barn är vi klara. Fall 1: om v har precis ett barn flyttar vi upp delträdet, se fig: ta bort nyckeln 4 2 1 4 8 2 > < v 1 5 8 5 6 6 9 9 Maps 18

Borttagning: fall 2 barn 1 Om noden v som ska tas bort har två barn: Leta upp noden w som kommer efter v i inordning (dvs har närmast större nyckel i sökträdet). w måste vara ett löv. (Det går förstås också bra med närmast mindre nyckel.) Ersätt v med w! Exempel: ta bort 3! 1 2 2 3 w 5 v 5 8 6 9 w 8 6 9 Maps 19

Tidskomplexitet värsta fallet Antag att det binära sökträdet har n noder och höjden h Utrymmet är O(n) findelement, insertitem och removeelement är O(h) Höjden h är O(n) i värsta fall O(log n) i bästa fall bästa fallet Maps 20

AVL-träd 1 2 5 2 0 4 1 8 9 3 2 1 11 1 7 Maps 21

AVL-träd AVL-träd är balanserade BST: för alla noder gäller det att höjdskillnaden mellan vänster och höger delträd 0 är högst 1 Sökning fungerar som i vanliga binära sökträd. Insättning och borttagning fungerar också som vanligt, men obalans kan uppstå, så vi måste eventuellt balansera om trädet. 1 2 Maps 22 5 1 8 0 6 3 9 2 1 0 11

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

Enkelrotation: princip nederst lokal obalans alltför djup nod balansen återställ d Maps 24

Enkelrotation: exempel 5 obalans 9 3 9 5 11 8 11 3 8 10 10 alltför djup nod Balansen återställd Maps 25

Dubbelrotation: princip nederst lokal obalans alltför djup nod balansen återställd Maps 26

Dubbelrotation: exempel 5 obalans 8 2 9 5 9 6 8 10 alltför djup nod 2 6 10 balansen återställd Maps 27

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. Maps 28

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)! Maps 29

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 90-10-regeln: 90% av sökningar är efter 10% av nycklarna Maps 30

Splayträd Insättning, sökning och borttagning som i vanligt binärt sökträd, följda av en splay, dvs man omstrukturerar trädet så att den sist besökta nyckeln placeras i roten. Den amorterade kostnaden är O(log n). Ingen ombalansering som i AVL-träd (eller som i (2,4)-träd eller ommålning som i rödsvarta träd, mer senare). Maps 31

Zig-zig Maps 32

Zig-zag (jfr dubbelrotation) Maps 33

Zig Maps 34

Exempel: sätt in 11 5 5 3 9 3 9 8 12 8 12 10 10 11 Maps 35

Exempel: sätt in 11 zig zag 3 5 9 8 12 3 5 9 8 11 10 11 10 12 Maps 36

Exempel: sätt in 11 zig zig 5 11 3 9 9 12 8 11 5 10 10 12 3 8 Maps 37

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

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

(2,4)-träd 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 exakt balanserat träd)! Sökträdsegenskapen gäller: 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 40

(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 41

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

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 43 v overflow

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

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 45

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. 9 4 15 2 6 12 21 7 Maps 46

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! 9 4 15 2 6 12 21 7 13 dubbel röd ny nod Maps 47

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

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!) 9 4 15 2 6 12 21 dubbel röd 7 8 ny nod Maps 49

Några effektiva implementeringar av lexika Sökning Insättning Borttagning Kommentar AVL-träd (2,4)-träd O(log n) O(log n) O(log n) -omstruktureringskostnader Skiplistor O(log n) i medeltal O(log n) i medeltal O(log n) i medeltal -slumpmässig algoritm Röd-svarta träd O(log n) O(log n) O(log n) -Ommålning men inte mycket omstrukturering! -TreeMap i Java Maps 50

Några effektiva implementeringar av lexika Sökning Insättning Borttagning Kommentar Splayträd O(log n) amorterad O(log n) amorterad O(log n) amorterad -effektivt för vanligaste nycklar B-träd O(log B n) I/O O(log B n) I/O O(log B n) I/O -för stora lexika/databaser Maps 51

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 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 52