Datastructuren; (Zoek)bomen



Vergelijkbare documenten
Datastructuren en Algoritmen voor CKI

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

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

Datastructuren en algoritmen voor CKI

Elementary Data Structures 3

Java Programma structuur

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

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Datastructuren en algoritmen voor CKI

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

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

Algoritmiek. 15 februari Grafen en bomen

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

Opgaven Zoekbomen Datastructuren, 20 juni 2018, Werkgroep.

Vierde college complexiteit. 14 februari Beslissingsbomen

Tweede college algoritmiek. 12 februari Grafen en bomen

Datastructuren en algoritmen voor CKI

CS 202 Fundamental Structures of Computer Science II Bilkent University Computer Engineering Department

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

Datastructuren en Algoritmen

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

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

Datastructuren: stapels, rijen en binaire bomen

2 Recurrente betrekkingen

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

MEER OVER BINAIRE ZOEK BOMEN EN VARIANTEN

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

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

Doorzoeken van grafen. Algoritmiek

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

Zevende college Algoritmiek. 6 april Verdeel en Heers

Amorized Analysis en Union-Find Algoritmiek

Zevende college algoritmiek. 24 maart Verdeel en Heers

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

Hoofdstuk 6. Geordende binaire bomen

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

Schriftelijk tentamen Datastructuren Ma 8 aug uur Met voorbeeld uitwerking

DATASTRUCTUREN VOOR GESORTEERDE DATA

MEER OVER BINAIRE ZOEK BOMEN EN VARIANTEN

Examen Datastructuren en Algoritmen II

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

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

public boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber

8C080 deel BioModeling en bioinformatica

Schriftelijk tentamen Datastructuren Woe 5 jan uur Met uitwerkingen

DATASTRUCTUREN VOOR GESORTEERDE DATA

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

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4

Minimum Opspannende Bomen. Algoritmiek

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college

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

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie 9 mei 2008

Datastructuren Uitwerking jan

8C080 deel BioModeling en bioinformatica

Tentamen Programmeren in C (EE1400)

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

ALGORITMIEK: antwoorden werkcollege 5

Zelftest Inleiding Programmeren

Datastructuren: stapels, rijen en binaire bomen

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Datastructuren Programmeeropdracht 2: Expressies. 1 Expressies. Deadlines. Woensdag 12 oktober 23:59, resp. woensdag 2 november 23:59.

definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten

Basic operations Implementation options

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Tentamen Programmeren in C (EE1400)

Examen Datastructuren en Algoritmen II

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5

Kortste Paden. Algoritmiek

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

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.

Datastructuren en algoritmen voor CKI

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Examen Datastructuren en Algoritmen II

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

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

Automaten. Informatica, UvA. Yde Venema

Het minimale aantal sleutels op niveau h is derhalve

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

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

Examen Datastructuren en Algoritmen II

Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding

Uitwerking tentamen Analyse van Algoritmen, 29 januari

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

Dynamisch Programmeren III. Algoritmiek

Stacks and queues. Hoofdstuk 6

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

De symmetrische min-max heap

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

Examen Datastructuren en Algoritmen II

Inleiding Programmeren 2

Inleiding Programmeren 2

Kortste Paden. Algoritmiek

Transcriptie:

Datastructuren; (Zoek)bomen Bomen, zoekbomen, gebalanceerde zoekbomen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 1 / 50

Bomen Traversal van bomen Datastructuur van bomen Binaire zoekbomen Operaties op binaire zoekbomen Gebalanceerde zoekbomen José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 2 / 50

Bomen Boom is hiërarchische datastructuur Toegang tot tree bij root knoop Elke knoop is of blad (externe knoop) of interne knoop Interne knoop heeft één of meer kindknopen en heet parent Geordende boom heeft eerste kind, tweede kind, derde kind, etc. José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 3 / 50

Boom-Terminologie Een boom bestaat uit verzameling knopen en verzameling randen Een boom heeft eigenschap dat er één pad is tussen twee knopen Een pad is verbonden rij van randen Een rooted tree bevat speciale knoop: de wortel Elke knoop c, behalve de wortel, heeft precies één parent knoop p, dat is de eerste knoop die je tegen komt op het pad van c naar wortel c is kind van p Een knoop kan willekeurig aantal kinderen hebben José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 4 / 50

Definities Een blad heeft geen kinderen Siblings zijn knopen met dezelfde parent Voorouders van knoop d zijn knopen vanaf d naar wortel Als a een voorouder van d, dan is d nakomeling van a De lengte van pad is aantal randen in pad De diepte van knoop n is lengte van pad van n naar wortel (De diepte van wortel is nul) De hoogte van knoop is lengte van pad van n naar diepste nakomeling (De hoogte van blad is nul) De hoogte van boom is de hoogte van de wortel José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 5 / 50

Boom-Terminologie wortel (T) = A interne knopen (T) = {A,B,C,F} bladeren (T) = {E,I,J,K,G,H,D} voorouders (F) = {A,B} diepte (K) = #voorouders(k) = 3 hoogte (T) = max{diepte(k) k T} nakomelingen; subboom;... José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 6 / 50

Toepassing van bomen is structuur van directory In meeste besturingssystemen files hierarchisch opgeslagen in directories Structuur zichtbaar gemaakt met boom José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 7 / 50

Linux commando tree % tree. -- homeworks -- h1nc.doc -- hc1.doc -- programs -- DDR.java -- Robot.java -- Stocks.java -- todo.txt 2 directories, 6 files José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 8 / 50

Boom ADT Boom ADT: data zijn objecten positions in boom zijn de knopen met parent-child relatie generieke methoden: integer size() boolean isempty() objectiterator elements() positioniterator positions() accessor operaties: position root() position parent(p) positioniterator children(p) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 9 / 50

Boom ADT (vervolg): query methoden: boolean isinternal(p) boolean isexternal(p) boolean isroot(p) update methode: swapelements(p, q) object replace(p, o) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 10 / 50

Boom traversal Een van belangrijkste operaties op boom is traversal: door alle knopen van de boom heen lopen en elke knoop bezoeken voor lijsten is traversal het doorlopen van de lijst van eerste tot laatste knoop voor bomen zijn er veel manieren om erdoor heen te lopen José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 11 / 50

Preorder traversal: elke parent systematisch bezocht vóór kindknopen Algorithm preorder(p) visit(p) for each child q of p preorder(q) preorder(root()): O(n) (n aantal knopen) Toepassing: afdrukken document of directory structuur José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 12 / 50

Postorder traversal: elke parent systematisch bezocht na kindknopen Algorithm postorder(p) for each child q of p postorder(q) visit(p) postorder(root()): O(n) (n aantal knopen) Toepassing: berekenen disk usage file system José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 13 / 50

Binaire Bomen Een boom is ordered als de kinderen van iedere knoop geordend zijn Een binaire boom is geordende boom met elke knoop hoogstens 2 kinderen Een binaire boom is proper als elke interne knoop precies 2 kinderen heeft José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 14 / 50

Toepassing: Expression tree (2 (a 1) + (3 b)) interne knopen zijn operatoren en bladeren zijn operanden als knoop extern, dan is zijn waarde een variabele of constante als knoop intern, dan is zijn waarde gedefinieerd door operatie op kinderen haakjes niet nodig, boomstructuur geeft volgorde operaties aan José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 15 / 50

Toepassing van Binaire Bomen: Beslisboom interne knopen: vragen bladeren: beslissingen José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 16 / 50

Binaire boom ADT Binaire boom ADT: Boom ADT + position leftchild(p) position rightchild(p) position sibling(p) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 17 / 50

Inorder traversal van Binaire Bomen Inorder traversal van binaire boom: Algorithm InOrder(p) if isinternal(p) inorder(leftchild(p)) visit(p) if isinternal(p) inorder(rightchild(p)) inorder(root()): O(n) (n aantal knopen) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 18 / 50

Inorder traversal: infix expressie Afdrukken van aritmetische expressies Algorithm printexpression(p) if isinternal(p) print("(") printexpression(leftchild(p)) print(p.element()) if isinternal(p) printexpression(rightchild(p)) print(")") Infix expressie ((2 (a 1)) + (3 b)) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 19 / 50

Postorder traversal: postfix expressie Postfix expressie (RPN) 2 5 1 3 2 + José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 20 / 50

Recursieve traversal algoritmen Algorithm traverse(t) if (T is not empty) { // preorder visit traverse(left subtree of T) // inorder visit traverse(right subtree of T) // postorder visit } José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 21 / 50

Samenvatting traversal algoritmen Preorder, inorder en postorder traversals van expression tree: prefix, infix of postfix expressies, resp. + / \ P r e o r d e r : + 3 7 ˆ 4 2 / \ ˆ I n o r d e r : 3 7 + 4 ˆ 2 ( I n f i x ) / \ / \ 3 7 4 2 P o s t o r d e r : 3 7 4 2 ˆ + (RPN) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 22 / 50

Linked datastructuur voor binaire bomen: José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 23 / 50

Implementatie in Java p u b l i c c l a s s B i n a r y T r e e { TreeNode r o o t ; i n t s i z e ; p u b l i c B i n a r y T r e e ( ) { }... } c l a s s TreeNode { Object element ; TreeNode parent, l e f t, r i g h t ; } p u b l i c TreeNode ( Object o ) { element = o ; } José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 24 / 50

Datastructuur voor willekeurige bomen: José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 25 / 50

Big-Oh s: Operatie size, isempty positions, elements replace root, parent, children leftchild, rightchild isinternal, isexternal, isroot Tijd O(1) O(n) O(1) O(1) O(1) O(1) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 26 / 50

Dictionary ADT Dictionary is een geordende of niet-geordende verzameling van paren (key, value), waarbij keys gebruikt worden om value te benaderen (woord, definitie) (studentid, studentgegevens) (vluchtnummer, vluchtinformatie) Gegevens toegankelijk via key: Object f i n d E l e m e n t ( key k ) // a l s n i e t gevonden NO SUCH KEY void i n s e r t I t e m ( key k, Object o ) Object removeelement ( key k ) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 27 / 50

Binaire zoekboom Binaire zoekboom is binaire boom met volgende eigenschappen: bladeren zijn leeg; iedere interne knoop bevat paar (k, e) binary-search-tree-property voor elke interne knoop geldt dat ieder knoop in linker subboom heeft kleinere key ieder knoop in rechter subboom heeft grotere key Merk op: inorder traversal van binaire zoekboom bezoekt elementen in oplopende volgorde! José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 28 / 50

Binaire zoekboom Belangrijkste voordeel van binary search trees: veel operaties efficiënt zoeken findelement(k, p) insert insertelement(k) creëert nieuwe knoop op plaats van nietgevonden zoekopdracht Operatie removeelement(k) is ingewikkeld: 1 kan delen van boom los maken 2 weer vast maken zo dat binary search tree eigenschap behouden 3 mag boom niet onnodig diep maken José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 29 / 50

Zoeken naar sleutel Sleutel k zoeken, loop vanaf root naar beneden Volgende knoop wordt bepaald door uitkomst van vergelijking van k met sleutel van huidige knoop Als blad bereikt, sleutel niet gevonden Voorbeeld: findelement(4) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 30 / 50

Recursief binair zoeken Algorithm findelement(k, p) if isexternal(p) return NO SUCH ELEMENT if k < p.element() return findelement(k, leftchild(p)) else if k = p.element() return p else return findelement(k, rightchild(p)) findelement(k,root()): O(h) (h hoogte van T) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 31 / 50

Niet-recursief binair zoeken Algorithm findelement(k, p) while! isexternal(p) en k!= p.element() do if k < p.element() then p = leftchild(p) else p = rightchild(p) return p José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 32 / 50

binary-search-tree-property garandeert dat: 1 minimum sleutel in meest linkse knoop 2 maximum sleutel in meest rechtse knoop Algorithm minimumtree(p) while leftchild(p)!= null then p = leftchild(p) return p José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 33 / 50

Successor van knoop (inorder) Successor van knoop p is knoop met kleinste sleutel > sleutel van p 1 Als knoop p een niet-lege rechter subboom heeft, dan is successor(p) minimum van rechtersubboom 2 Als knoop p een lege rechter subboom heeft, dan als omhoog is naar rechts, dan successor(p) is parent als omhoog is naar links, dan successor(p) vinden we door omhoog te bewegen tot naar rechts, dan successor(p) is laatste knoop bereikt José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 34 / 50

Insertion (at bottom) Om operatie insertelement(k, p) uit te voeren, zoeken we sleutel k Neem aan dat k niet in boom, en stel w is blad bereikt met zoeken Insert k op knoop w en breid w uit tot interne knoop Voorbeeld: insert 5 insertelement(5,root()): O(h) (h hoogte van T) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 35 / 50

Deletion van knoop uit binaire zoekboom Deletion van knoop Geval 0: knoop heeft geen kinderen Geval 1: knoop heeft één kind Geval 2: knoop heeft twee kinderen José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 36 / 50

Geval 0: Deletion van knoop zonder kinderen removeelement(k): zoeken van sleutel k knoop v met key(v) = k gevonden Als knoop v twee bladeren heeft, verwijder v uit boom Voorbeeld: remove 4 José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 37 / 50

Geval 1: Deletion van knoop v met één kind removeelement(k): zoeken van sleutel k knoop v met key(v) = k gevonden Als knoop v één blad w heeft, verwijder v en w uit boom (v vervangen door sibling van w) Voorbeeld: remove 4 José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 38 / 50

Geval 2: Deletion van knoop v met twee kinderen Stel gevonden knoop v alleen interne knopen als kinderen w volgende knoop in inorder traversal (knoop w is meest linkse interne knoop in rechter subboom van v) Kopieer key(w) naar knoop v Verwijder w en diens linkerkind z (moet blad zijn) Voorbeeld: remove 3 José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 39 / 50

Performance binaire zoekboom Performance met hoogte boom h Operatie Tijd findelement O(h) insertelement O(h) removeelement O(h) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 40 / 50

Performance findelement, insertelement, removeelement Worst case met O(n) operaties: Best case met O(log n) operaties: José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 41 / 50

Balanced trees Definitie van hoogte van knoop Hoogte van knoop is lengte van langste pad naar externe knoop Definitie van completely balanced tree In completely balanced tree hebben linker en rechter subboom van elke knoop dezelfde hoogte Definitie van balanced tree Een boom is balanced als voor elke interne knoop hoogtes van twee subbomen hoogstens 1 verschillen Dit noemt men ook Height-balance eigenschap José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 42 / 50

AVL-bomen (Adel son-vel skii & Landis, 1962) Hoogte van knoop is lengte van langste pad naar externe knoop Height-balance eigenschap voor elke interne knoop geldt dat hoogtes van twee subbomen hoogstens 1 verschillen Een AVL-boom is binaire zoekboom met Height-balance eigenschap Dat heeft volgende consequentie: De hoogte van AVL-boom met n elementen is O(log n) José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 43 / 50

Height-balance eigenschap AVL-bomen Height-balance eigenschap van AVL-boom: linker en rechter subbomen verschillen hoogstens 1 in hoogte José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 44 / 50

Height-balance eigenschap AVL-bomen Linker subboom heeft hoogte 1 groter dan elke rechter subboom AVL-boom Subboom met wortel 8 heeft hoogte 4 en subboom met wortel 18 heeft hoogte 2 geen AVL-boom José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 45 / 50

Stelling De hoogte van AVL-boom met n elementen is O(log n) Bewijs Staat in het boek. Gebeurt met volledige inductie. Bewijs wordt niet gevraagd op tentamen. José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 46 / 50

Balance factor van knoop De balance factor van knoop is hoogte van rechter subboom minus hoogte van linker subboom Een knoop is gebalanceerd als zijn balance factor gelijk aan 1, 0 of 1 is Een knoop met andere balance factor is ongebalanceerd José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 47 / 50

Balance factor BF BF = (height right subtree - height left subtree) Dus, BF = -1, 0 or +1 voor AVL boom Balance factor van aantal voorbeeld AVL-bomen 0 1 +1 / \ / \ / \ 0 0 1 0 1 1 / / / \ 0 0 +1 0 \ 0 José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 48 / 50

Balance factor BF Balance factor van nietavl-boom +1 / \ 1 2 / / 0 +1 \ 0 José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 49 / 50

Na insertion kan balans verstoord zijn Balans herstellen met Boomrotaties Dat doen we volgende week José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 50 / 50