Datastructuren en algoritmen voor CKI

Vergelijkbare documenten
Datastructuren en algoritmen voor CKI

Datastructuren en algoritmen voor CKI

Datastructuren; (Zoek)bomen

Datastructuren Uitwerking jan

Opgaven Zoekbomen Datastructuren, 20 juni 2018, Werkgroep.

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Datastructuren en Algoritmen

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Datastructuren Uitwerking jan

Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen

5.4.2 a. Neen: dit lukt alléén met 1, 3, 7 enzovoort. b. Ja: dit lukt met elk aantal knopen! Bijvoorbeeld de volgende boom: 1

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

Examen Datastructuren en Algoritmen II

Bomen. 8.8 ongerichte bomen 9.4 gerichte bomen ch 10. binaire bomen. deel 1. Negende college

Datastructuren en algoritmen voor CKI

Java Programma structuur

Minimum Opspannende Bomen. Algoritmiek

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

Bomen. 8.8 ongerichte bomen 9.4 gerichte bomen ch 10. binaire bomen. deel 2. Tiende college

Vierde college complexiteit. 14 februari Beslissingsbomen

Minimum Spanning Tree

Bomen. 8.8 ongerichte bomen 9.4 gerichte bomen ch 10. binaire bomen

Datastructuren en algoritmen voor CKI

Amorized Analysis en Union-Find Algoritmiek

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

Elementary Data Structures 3

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Examen Datastructuren en Algoritmen II

2 Recurrente betrekkingen

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Examen Datastructuren en Algoritmen II

Algoritmiek. 15 februari Grafen en bomen

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II

Tweede college algoritmiek. 12 februari Grafen en bomen

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

TW2020 Optimalisering

Examen Datastructuren en Algoritmen II

Zevende college Algoritmiek. 6 april Verdeel en Heers

Hoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie

Computationale Intelligentie Dirk Thierens

Zevende college algoritmiek. 24 maart Verdeel en Heers

Examen Datastructuren en Algoritmen II

Indexen.

Twaalfde college algoritmiek. 23 mei Branch & Bound, Heapsort

Uitwerking tentamen Analyse van Algoritmen, 29 januari

TW2020 Optimalisering

Tweede Toets Datastructuren 29 juni 2016, , Educ-Γ.

Tweede Toets Datastructuren 26 juni 2019, , Educ-β.

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Kortste Paden. Algoritmiek

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Kortste Paden. Algoritmiek

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Datastructuren en Algoritmen voor CKI

Eerste Toets Datastructuren 22 mei 2019, , Educ-β en Megaron.

8C080 deel BioModeling en bioinformatica

Zevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort)

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Twaalfde college complexiteit. 11 mei Overzicht, MST

Hoofdstuk 2. Iteratie, Recursie en Inductie. 2.1 Fibonacci getallen

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Magidoku s en verborgen symmetrieën

Automaten en Berekenbaarheid 2016 Oplossingen #4

TECHNISCHE UNrVERSITElT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies

4EE11 Project Programmeren voor W. College 3, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Derde college complexiteit. 7 februari Zoeken

DATASTRUCTUREN VOOR GESORTEERDE DATA

Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen.

Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Schriftelijk tentamen Datastructuren Woe 5 jan uur Met uitwerkingen

Examen Algoritmen en Datastructuren III

8C080 deel BioModeling en bioinformatica

Hoofdstuk 6. Geordende binaire bomen

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

2WO12: Optimalisering in Netwerken

Benaderingsalgoritmen

Examen Datastructuren en Algoritmen II

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3

5 Afronden en afkappen

Doorzoeken van grafen. Algoritmiek

Opgave 2 ( = 12 ptn.)

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

Progra-MEER - Algoritmiek Leuven 20 maart 2018

De volgende opgave gaat over de B-bomen van het college, waar sleutels zowel in de bladeren als ook in de interne knopen opgeslagen worden.

Tentamen Kunstmatige Intelligentie (INFOB2KI)

DATASTRUCTUREN VOOR GESORTEERDE DATA

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur

Recapitulatie: Ongeïnformeerd zoeken. Zoekalgoritmen ( ) College 2: Ongeïnformeerd zoeken. Dynamische breadth-first search

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen

Transcriptie:

Datastructuren en algoritmen voor CKI Jeroen Bransen 1 14 oktober 2015 1 met dank aan Hans Bodlaender en Gerard Tel

Willekeurig gebouwde zoekbomen

Willekeurig gebouwde zoekbomen Hoogte van zoekboom met n elementen kan n 1 zijn Hoogte is minstens log n Bij invoegen en verwijderen weinig garanties over hoogte Maken van boom door n (verschillende) elementen in willekeurige volgorde in te voegen: verwachte hoogte O(log n)

Willekeurig gebouwde zoekbomen Het eerste element dat wordt ingevoegd wordt de wortel Alle elementen kleiner dan dat element komen in linker subboom terecht Alle elementen groter komen in rechter subboom terecht

Willekeurig gebouwde zoekbomen Het eerste element dat wordt ingevoegd wordt de wortel Alle elementen kleiner dan dat element komen in linker subboom terecht Alle elementen groter komen in rechter subboom terecht R i geeft de rank van i, dat is de positie van i als elementen gesorteerd zouden zijn Linker subboom heeft grootte R i 1 Rechter subboom grootte n R i

Willekeurig gebouwde zoekboom Linker en rechter subboom onafhankelijk Hoogte van boom met n elementen en i als wortel: hoogte(n) = 1 + max(hoogte(r i 1), hoogte(n R i )) Hoe groot worden R i 1 en n R i?

Willekeurig gebouwde zoekboom Kans is 1/2 dat 1/4n R i 3/4n In dat geval hoogte(n) = 1 + hoogte(3/4n)

Willekeurig gebouwde zoekboom Kans is 1/2 dat 1/4n R i 3/4n In dat geval hoogte(n) = 1 + hoogte(3/4n) We verwachten elke 2 stappen dat iets met kans 1/2 voorkomt Verwachte hoogte is dus hoogte(n) = 2 + hoogte(3/4n)

Willekeurig gebouwde zoekboom Hoe vaak kunnen we n met 3/4 vermenigvuldigen totdat we bij 0 zijn? log 4/3 n keer Verwacht is dus hoogte(n) = 2 log 4/3 n = O(log n)

Willekeurig gebouwde zoekboom Analyse lijkt op die van QuickSort Analyse in boek ingewikkelder (en preciezer) Conclusie is hetzelfde Willekeurige boom is gebalanceerd (O(log n)) Maar op volgorde invoegen zeker niet!

Gebalanceerde zoekbomen

Gebalanceerde zoekbomen Binaire zoekboom met zoekboomeigenschappen Bij verwijderen/toevoegen extra stappen om boom te balanceren h = O(log n) Vrijwel alle operaties dus in O(log n)

Gebalanceerde zoekbomen Rood-zwart boom (Red-Black Tree) AVL-boom 2-3-boom Splayboom..

Rood-zwart bomen

Eigenschappen van rood-zwart bomen Binaire zoekboom Elke knoop is rood of zwart De wortel is zwart Elk blad (nil) is zwart Als een knoop rood is zijn de kinderen zwart Voor elke knoop x: alle paden van x naar een blad onder x bevatten evenveel zwarte knopen

Voorbeeld 17 14 41 13 nil 28 47 nil nil 26 30 nil nil nil nil nil nil

Voorbeeld 17 14 41 13 28 47 26 30

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x)

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen Bewijs met inductie op grootte boom

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen Bewijs met inductie op grootte boom Basisgeval: x is blad, dan 2 bh(x) 1 = 2 0 1 = 1 1 = 0

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen Bewijs met inductie op grootte boom Basisgeval: x is blad, dan 2 bh(x) 1 = 2 0 1 = 1 1 = 0 Inductiestap: beide kinderen hebben bh(x) of bh(x) 1, dus subboom x heeft minstens (2 bh(x) 1 1) + (2 bh(x) 1 1) + 1 = 2 bh(x) 1 knopen

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen Bewijs met inductie op grootte boom Basisgeval: x is blad, dan 2 bh(x) 1 = 2 0 1 = 1 1 = 0 Inductiestap: beide kinderen hebben bh(x) of bh(x) 1, dus subboom x heeft minstens (2 bh(x) 1 1) + (2 bh(x) 1 1) + 1 = 2 bh(x) 1 knopen Op pad van wortel naar blad minstens h/2 zwarte knopen, dus n 2 h/2 1

Hoogte rood-zwart boom Zij bh(x) (black-height) het aantal zwarte knopen op pad onder x (exclusief x) Subboom met als wortel x heeft minstens 2 bh(x) 1 knopen Bewijs met inductie op grootte boom Basisgeval: x is blad, dan 2 bh(x) 1 = 2 0 1 = 1 1 = 0 Inductiestap: beide kinderen hebben bh(x) of bh(x) 1, dus subboom x heeft minstens (2 bh(x) 1 1) + (2 bh(x) 1 1) + 1 = 2 bh(x) 1 knopen Op pad van wortel naar blad minstens h/2 zwarte knopen, dus n 2 h/2 1 Conclusie: h 2 log(n + 1) = O(log n)

Voorbeeld 1

Voorbeeld 1 2

Voorbeeld 2 1 3

Voorbeeld 2 1 3 4

Voorbeeld 2 1 4 3 5

Voorbeeld 2 1 4 3 5 6

Voorbeeld 2 1 4 3 6 5 7

Voorbeeld 4 2 6 1 3 5 7 8

Rotaties

Rotaties Aantal knopen in linker en rechter kind moeten ongeveer gelijk zijn Zo niet: boom in onbalans Oplossing: herbalanceren door middel van rotaties Rotatie is het verschuiven van ouder en kindknoop ten opzichte van elkaar Zoekboom-eigenschappen blijven behouden Hoogte van linker en rechter kind verandert met 1

Rotaties y left-rotate(t, x) x α x β γ right-rotate(t, y) α β y γ

Left-rotate left-rotate(t, x) 1 y = x.right 2 x.right = y.left 3 if y.left nil 4 y.left.p = x 5 y.p = x.p 6 if x.p == T.nil 7 T.root = y 8 elseif x == x.p.left 9 x.p.left = y 10 else x.p.right = y 11 y.left = x 12 x.p = y

Toevoegen

Toevoegen Vergelijkbaar met tree-insert Nieuwe knoop is rood Na invoegen knopen herkleuren en rotaties om rood-zwart-eigenschappen te herstellen O(log n)

Voorbeeld 17 14 41 13 28 47 26 30

Voorbeeld 17 14 41 13 28 47 26 30 27

Voorbeeld 17 14 41 13 28 47 26 30 27

Voorbeeld 17 14 28 13 26 41 27 30 47

Voorbeeld 28 17 41 14 26 30 47 13 27

Toevoegen rb-insert(t, z) 1 y = T.nil; x = T.root 2 while x T.nil 3 y = x 4 if z.key < x.key 5 x = x.left 6 else x = x.right 7 z.p = y 8 if y == T.nil 9 T.root = z 10 elseif z.key < y.key 11 y.left = z 12 else y.right = z 13 z.left = z.right = T.nil 14 z.color = red 15 rb-insert-fixup(t, z)

Rood-zwart eigenschappen herstellen Iteratief proces, maximaal O(log n) stappen z is de knoop onder behandeling (beginnend bij nieuwe knoop) z is altijd rood Als z.p wortel is, dan is z.p zwart De boom verbreekt maximaal 1 rood-zwart eigenschap tegelijk: z en z.p zijn beiden rood, of z is de wortel (en z is rood)

Geval 1: z s oom y is ook rood 11 2 14 1 7 15 5 8 y 4 z

Geval 2: z is een rechter kind 11 2 14 y 1 7 z 15 5 8 4

Geval 3: z is een linker kind 11 7 14 y 2 z 8 15 1 5 4

Rood-zwart eigenschappen hersteld 7 2 z 11 1 5 8 14 4 15

Rood-zwart eigenschappen herstellen rb-insert-fixup(t, z) 1 while z.p.color == red 2 if z.p == z.p.p.left 3 y = z.p.p.right 4 if y.color == red 5 z.p.color = black / Geval 1 6 y.color = black / Geval 1 7 z.p.p.color = red / Geval 1 8 z = z.p.p / Geval 1 9 else if z == z.p.right 10 z = z.p / Geval 2 11 left-rotate(t, z) / Geval 2 12 z.p.color = black / Geval 3 13 z.p.p.color = red / Geval 3 14 right-rotate(t, z.p.p) / Geval 3 15 else / Symmetrisch geval