Datastructuren Zoekbomen

Slides:



Advertisements
Verwante presentaties
BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
Advertisements

28 juni 2009 Paëllanamiddag 1 Paëllanamiddag 28 juni 2009 Voorbereiding vrijdagavond (Loopt automatisch - 7 seconden)
Werkwoorden d t dt.
NEDERLANDS WOORD BEELD IN & IN Klik met de muis
WAAROM? Onderzoek naar het meest geschikte traject voor de verlenging tot in Sint-Niklaas van het bestaande fietspad naast de Stekense Vaart en de Molenbeek.
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
 Deel 1: Introductie / presentatie  DVD  Presentatie enquête  Ervaringen gemeente  Pauze  Deel 2 Discussie in kleinere groepen  Discussies in lokalen.
Hoofdstuk 8: Recursie.
Ronde (Sport & Spel) Quiz Night !
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen.
Start.
Kb.1 Ik leer op een goede manier optellen en aftrekken
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
Leiden University. The university to discover. ICLON, Interfacultair Centrum voor Lerarenopleiding, Onderwijsontwikkeling en Nascholing Denkgereedschap.
Nooit meer onnodig groen? Luuk Misdom, IT&T
BZ voor de Klas 3 juni 2010.
Passie - Verrijzenis Arcabas
Datastructuren Onderwerp 10
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
Fibonacci & Friends Met dank aan Gerard Tel.
Zoekbomen: rotaties AVL-bomen Rood-zwart-bomen
1 Datastructuren Heapsort College 4. 2 Vandaag  Kort: ADT vs Datastructuur  Heaps en Heapsort  Tijd over: ondergrenzen voor sorteren; nog sneller sorteren.
1 Datastructuren Zoekbomen II Invoegen en weglaten.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Gebalanceerde bomen Zoekbomen: weglaten in rood-zwart-bomen.
De grafiek van een lineair verband is ALTIJD een rechte lijn.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
1 introductie 3'46” …………… normaal hart hond 1'41” ……..
Oefeningen F-toetsen ANOVA.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
In dit vakje zie je hoeveel je moet betalen. Uit de volgende drie vakjes kan je dan kiezen. Er is er telkens maar eentje juist. Ken je het juiste antwoord,
1 Datastructuren Quicksort en andere sorteermethoden College 3.
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
1 Optuigen van datastructuren 2 Dynamische order statistics (2)
Optuigen van datastructuren
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Geometrie en topologie Rob Kromwijk, 26 juli 2012.
Afrika: Topo nakijken en leren.
User management voor ondernemingen en organisaties
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
ribWBK11t Toegepaste wiskunde Lesweek 02
Statistiekbegrippen en hoe je ze berekent!!
Optuigen van datastructuren Datastructuren Onderwerp 11.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen van.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
Fractale en Wavelet Beeldcompressie
De financiële functie: Integrale bedrijfsanalyse©
Centrummaten en Boxplot
Even voorstellen : Groep 3b
Toets 1 Examen Reinder Reen.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
12 sept 2013 Bodegraven 1. 2  vooraf lezen: 1Kor.7:12 t/m 24  indeling 1Korinthe 7  1 t/m 9: over het huwelijk  10 t/m 16: over echtscheiding  16.
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
1 Optuigen van datastructuren Zoeken op meerdere sleutels Dynamische order statistics (1)
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Doorzoeken van grafen Algoritmiek. Algoritmiek: Divide & Conquer2 Vandaag Methoden om door grafen te wandelen –Depth First Search –Breadth First Search.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Doorzoeken van grafen Algoritmiek.
Minimum Opspannende Bomen
Transcript van de presentatie:

Datastructuren Zoekbomen Deel 1 Bomen Doorlopen Eenvoudiger operaties

Dit onderwerp Bomen: terminologie Bomen: datastructuur voor bomen Zoekbomen: hoe zoek ik in bomen Volgende keer: hoe voeg ik knopen toe en haal ik knopen weg uit zoekbomen (efficient)

Gewortelde boom (rooted tree) Knopen van boom: node Wortel (root) Terminologie I Gewortelde boom (rooted tree) Knopen van boom: node Wortel (root) Voorouder (ancestor) Knoop op pad van x (inclusief) naar wortel Afstammeling (descendant) Proper ancestor; proper descendant Voorouder of afstammeling maar niet x zelf Ouder (parent) Kind (child)

Terminologie II Sibling: knopen met dezelfde ouder (broers) Blad (leaf) Interne knoop (internal node) a b c d e Vb van siblings f g

Terminologie III: graad De graad van een knoop is het aantal kinderen NB: Anders dan in grafen!! Vb. hiernaast Knoop is blad, desd als graad 0 2 1

Terminologie IV: hoogte en diepte Diepte (depth): lengte van pad van x naar de wortel Hoogte (height): maximum lengte van pad van knoop naar een blad onder de knoop 1 1 2 2 dieptes 3 3 3 2 1 hoogtes

Terminologie V: Geordende boom Gewortelde boom met voor elke knoop een volgorde van zijn kinderen vastgelegd

Terminologie VI: Deelboom geworteld bij x De deelboom geworteld bij x (subtree rooted at x) x

Een boom is een binaire boom, als Binaire bomen Een boom is een binaire boom, als De boom leeg is (0 knopen heeft), OF Een wortel en een linkerdeelboom en rechter-deelboom heeft Die linker- en rechter-deelboom zijn weer binair Ze mogen dus ook leeg zijn Verschillende binaire bomen!

Twee manieren om binaire bomen te tekenen

Datastructuren voor gewortelde bomen Nu bespreken we: Datastructuur voor binaire bomen Datastructuren voor gewortelde bomen met willekeurige graad We zagen al eerder een andere: heap Heeft speciale eigenschappen die maken dat we ‘m makkelijk in een array kunnen stoppen (Max- of Min-)Heap-eigenschap

Gewortelde bomen root[T] p Elke knoop x heeft drie pointers: Naar de ouder Notatie: p[x], of p.x of parent.x of … Naar de linkerdeelboom (eventueel leeg) left-child Naar de rechterdeelboom (eventueel leeg) right-child Implementatie van leeg (hangt af van programmeertaal en wat je handig vindt): NIL En we hebben een verwijzing naar de wortel van de boom root[T] of wortel.T of root.T of … root[T] p left right

Datastructuur voor bomen met willekeurig aantal kinderen Elke knoop heeft: Pointer voor de wortel Gelinkte lijst per kind (boek: enkelvoudig gelinkt. Soms nuttig om dubbelgelinkte lijst te maken) Pointer naar eerste kind Namen: p (parent, ouder) left-child right-sibling (rechterbroer / rechterzus)

Dynamische verzamelingen: Zoekbomen Zoekboom: Datastructuur voor Dynamische verzamelingen (bijv. Dictionaries) Operaties die we kunnen doen op verzameling elementen: Search (zoek element op key-waarde, en geef opgeslagen extra informatie) Minimum (wat is de kleinste key-waarde) Maximum (…) Predecessor (Voorganger: gegeven x, wat is de grootste y<x die opgeslagen is) Successor (gegeven x, wat is de kleinste y>x die opgeslagen is) Delete (laat een key (met de extra informatie erbij) weg) Insert (voeg een key (en extra informatie) toe)

Verschillende implementaties Als we “Predecessor” en “Successor” niet belangrijk vinden, is een Hash-tabel een heel goede, en heel veel gebruikte datastructuur Vandaag bekijken we de binaire zoekboom Wordt ook veel gebruikt

Binaire zoekboom Wortel bevat een key (met pointer naar bijbehorend object met extra gegevens …) Linker deelboom bevat alleen kleinere (£) keys Rechter deelboom bevat alleen grotere (³) keys Soms sta je toe dat een key vaker voorkomt, soms niet 47 65 42 55 23 67 45 49 60 99 12 31

Binaire zoekboom Je kan ook de NIL’s tekenen 47 65 42 55 23 67 49 60 99 12 31

Binairy search-tree property Als x een knoop is in een binaire zoekboom, en y is een knoop in de linkerdeelboom van x, dan is key[y] £ key[x]. Als x een knoop is in een binaire zoekboom, en y is een knoop in de rechterdeelboom van x, dan is key[x] £ key[y]. 10 20 5

Doorlopen van binaire boom Drie manieren om een binaire boom te doorlopen: Inorder Som eerst de linkerboom op (recursief) Dan de wortel Dan de rechterboom (recursief) Preorder Som eerst de wortel op Dan de linkerboom (recursief) Postorder Som eerst de linkerboom (recursief) En tot slot de wortel op

Inorder-Tree-Walk(x) if (x != NIL) then Inorder-Tree-Walk( left(x)) Print (key(x)) Inorder-Tree-Walk( right(x))

Preorder-Tree-Walk(x) if (x != NIL) then Print (key(x)) Preorder-Tree-Walk( left(x)) Preorder-Tree-Walk( right(x))

Postorder-Tree-Walk(x) if (x != NIL) then Postorder-Tree-Walk( left(x)) Postorder-Tree-Walk( right(x)) Print (key(x))

Eigenschappen Inorder-Tree-Walk Somt van een binaire zoekboom de knopen op in niet-dalende volgorde Gebruikt Q(n) tijd op als we n knopen hebben Stel dat we k knopen in de linkerboom hebben Dan n-k-1 in de rechterboom T(n) = T(k) + T(n-k-1) + d voor constante d Geeft: T(n) = (c+d)n+c met c=T(0) (inductie)

Expressies en notatie * * + / 1 2 3 4 5 Gebruikelijke notatie voor expressies: (1+2)*(3*(4/5)) Infix-notatie * * + / 1 2 3 4 5

Expressies en notatie II Infix: (1+2)*(3*(4/5)) Reverse Polish Notation Postfix-notatie: 1 2 + 3 4 5 / * * Geen haakjes nodig Uitgevonden door Poolse wiskundige Lukasiewicz Stack om e.e.a. uit te rekenen * * + / 1 2 3 4 5

Zoeken in binaire boom Als de key in de wortel zit: klaar Anders: kijk of je in de linker- of rechter-deelboom moet zijn en ga in die boom in recursie Tree-Search(x,k) {Zoek naar key k in een boom met wortel x} if (x == NIL or k == key(x)) then return x if ( k < key(x)) then return Tree-Search(left(x),k) else return Tree-Search(right(x),k)

Zoeken in binaire boom Tree-Search(x,k) {Zoek naar key k in een boom met wortel x} if (x == NIL or k == key(x)) then return x if ( k < key(x)) then return Tree-Search(left(x),k) else return Tree-Search(right(x),k) 47 65 42 55 23 67 49 60 99 12 31

Niet-recursieve (uitgerolde) versie 47 Iterative-Tree-Search(x,k) while ( x != NIL and k != key(x)) do if ( k < key(x)) then x = left(x) else x = right(x) return x; 65 42 55 23 67 49 60 99 12 31 Doet hetzelfde, maar zonder recursie Meestal efficienter (in constante in O)

Tijd van Tree-Search Zowel recursieve als iteratieve versie gebruiken O(h) tijd, met h de hoogte van de boom Later: manieren om h = O(log n) te krijgen

Zoeken van Minimum Het minimum is altijd de “meest linkse” knoop Sorry, geen grapjes over politiek hier Tree-Minimum(x) {Zoek het minimum in de boom met wortel x} while (left(x) != NIL) do x = left(x); return x;

Tijd: O(h) – h hoogte van de boom Zoeken van Minimum 47 Tree-Minimum(x) {Zoek het minimum in de boom met wortel x} while (left(x) != NIL) do x = left(x); return x; 65 42 55 23 67 49 60 99 12 31 Tijd: O(h) – h hoogte van de boom

Maximum is meest rechtse knoop Tijd: O(h) met h hoogte van de boom Zoeken van Maximum 47 Tree-Maximum(x) {Zoek het minimum in de boom met wortel x} while (right(x) != NIL) do x = right(x); return x; 65 42 55 23 67 49 60 99 12 31 Maximum is meest rechtse knoop Tijd: O(h) met h hoogte van de boom

Opvolger Opvolger van key x: Twee gevallen: Kleinste van alle andere keys die groter is dan x Twee gevallen: De opvolger zit “onder” x De opvolger zit niet onder x

Opvolger Opvolger van key x: Twee gevallen: Kleinste van alle andere keys die groter is dan x Twee gevallen: De opvolger zit “onder” x Als de rechterdeelboom van x niet leeg is! De opvolger zit niet onder x Als de rechterdeelboom van x wel leeg is…

Opvolgers en voorgangers I Opvolger van knoop x: Als de rechter-deelboom van x niet leeg is, dan is de opvolger van x het minimum van die rechter-deelboom Als die wel leeg is dan zit die opvolger NIET onder x … Tree-Successor(x) if (right(x) != NIL) then return Tree-Minimum(right(x)) y = parent(x); ???

Opvolger die niet onder x zit Stel x heeft lege rechter-deelboom Ga omhoog de boom in, zolang je in rechterdeelbomen zit Dus je gaat “links-omhoog” Daarna ga je nog 1 keer een stap omhoog Tree-Successor(x) if (right(x) != NIL) then return Tree-Minimum(right(x)) y = parent(x); while (y != NIL and x == right(y)) do x = y; y = parent(y); return y;

Tree-successor Tree-Successor(x) if (right(x) != NIL) then return Tree-Minimum(right(x)) y = parent(x); while (y != NIL and x == right(y)) do x = y; y = parent(y); return y; 40 15 65 8 55 17 67 7 10 29 49 60 99 Zoek bijv opvolger 29

Voorgangers Vinden van voorganger (Tree-predecessor) gaat net zo (“gespiegeld”)

Conclusies Alle operaties: Search, Minimum, Maximum, Successor, Predecessor kunnen in O(h) met h de hoogte van de boom Er bestaan zoekbomen met hoogte O(lg n), bijvoorbeeld neem een complete (of bijna complete) binaire boom

Samenvatting Terminologie Zoekbomen Operaties op zoekbomen Volgende keren: hoe voeg je knopen toe, en laat je knopen weg uit zoekbomen? En hoe zorg je dat een zoekboom lage diepte blijft houden?