1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.

Slides:



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

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Een getal met een komma noemen we een decimaalgetal.
Aflezen van analoge en digitale meetinstrumenten
Downloaden: Ad-aware. Downloaden bestaat uit 3 delen: •1. Zoeken naar de plek waar je het bestand kan vinden op het internet •2. Het nemen van een kopie.
Datastructuren Quicksort
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.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
(11,25;10) (10,15) (10,16) Totaal 7 lijnen getekend.
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.
Datastructuren Zoekbomen
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.
Visibility-based Probabilistic Roadmaps for Motion Planning Tim Schlechter 13 februari 2003.
1 KANSBEREKENING Datastructuren. 2 Kansberekening  Een paar voorbeelden van kansberekeningsvragen.
H51 12 resolutie H51 PHOTOSHOP 1 audiovisueel centrum meise.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Bewegen Hoofdstuk 3 Beweging Ing. J. van de Worp.
Bewegen Hoofdstuk 3 Beweging Ing. J. van de Worp.
1 Datastructuren Quicksort en andere sorteermethoden College 3.
1 Optuigen van datastructuren 2 Dynamische order statistics (2)
Optuigen van datastructuren
Datastructuren Sorteren: bubble, merge, quick
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Datastructuren Sorteren, zoeken en tijdsanalyse
Werken aan Intergenerationele Samenwerking en Expertise.
De vierkantjes ! Dit is een puzzel om uw hersens eens goed te laten werken. De vraag is bij elk figuur hoeveel vierkanten u ziet.
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
Goedemorgen.
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.
Voorrangsregels bij rekenen (1)
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
2 januari 2009Nieuwjaarsreceptie "Meule wal straete" 1 Nieuwjaarsreceptie 2 januari 2009 Eerste bijeenkomst van de bewoners van de “Meule wal straete”
Hoofdstuk 9 havo KWADRATEN EN LETTERS
Bewerkingen met breuken Les 37.
Fractale en Wavelet Beeldcompressie
Fractale en Wavelet Beeldcompressie
De financiële functie: Integrale bedrijfsanalyse©
Les 3: Verkeer TOETS.
Centrummaten en Boxplot
De vierkantjes ! Dit is een puzzel om uw hersens eens goed te laten werken. De vraag is bij elk figuur hoeveel vierkanten u ziet.
POL (MO)-methode  Dit is de kapstok waar je de rest van de zin aan op kunt hangen.  Vervolgens kijk je of er eventueel een meewerkend voorwerp in.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
ZijActief Koningslust
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
1 Datastructuren Quicksort College 3. 2 Vorige keren  O-notaties  Sorteren: insertion sort, bubble sort  Kosten (n 2 ) tijd in het slechtste geval.
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen (vorige keer) Hashtabellen –Oplossen van botsingen met “ketens” (chaining) Vorige.
1 Optuigen van datastructuren Zoeken op meerdere sleutels Dynamische order statistics (1)
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Minimum Opspannende Bomen
Python – For loop + strings
Transcript van de presentatie:

1 Datastructuren Skiplists

2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen  Makkelijkste versie: “verwachtte tijd even snel als gebalanceerde bomen”  Hier: een “informele” inleiding  Hoe werken ze?  Een enkel bewijsje over de tijdgrens

3 Operaties:  Zoek-Element  Minimum  Maximum  Volgende  Vorige  Insert  Delete  Kunnen allemaal goed gedaan worden met skiplists  Maar ook dynamische order statistics (en andere queries)

4 Eerst maar eens: “een gewone dubbelgelinkte lijst” Alles in O(n) in het slechtste geval…

5 Toevoegen van “snelweg”

6 Zoeken met de snelweg  “Loop eerst over de snelweg, totdat je te ver zou gaan, en ga dan door de gewone lijst”

7 Hoeveel stappen maximaal?  Aantal stappen in laag 1: maximaal tot eind  Aantal stappen in laag 2: maximaal stuk tussen twee afritten  Slechtste geval zit tussen:  Maximum van geval 1 en geval 2  Twee keer ‘t maximum van geval 1 en geval 2  Als je nu de afritten op afstand n 1/2 zet dan krijg je ‘t best mogelijke (op factor 2 na)

8 Meer dan twee lagen  Algoritme om x te zoeken:  Begin links in de bovenste laag  Herhaal tot gevonden of helemaal rechts- onderaan:  Zitten we in x? Ja: klaar  Is de volgende in mijn laag < x? Ja: ga een stap verder in deze laag Nee: ga naar dezelfde key in de laag eronder (dit geval nemen we ook als er geen volgende in mijn laag is)  Checks op einde nog nodig

10 Implementatie: stootblokken aan eind  Twee rijen objecten: een “kleiner” dan alles, en een “groter” dan alles  Kan handig zijn in implementatie  Variaties mogelijk

11 R R R R L L L L Neem aan dat L een key bevat kleiner dan elke key en R een key bevat groter dan elke key

12 Zoeken  Search(SkipList S, key x)  y = eersteElementBovensteLaag(S);  While true do  If key(y)==x then return y  If key(next(y))  x then y = next(y)  Else if (y zit in onderste laag) then return false  Else y = down(y)  Variatie: als je element gevonden hebt, ga dan omlaag totdat je op de onderste laag zit: alleen daar sateliet-data (of neem pointer overal naar “echte” object)

13 Hoe grote stappen per laag?  Als je k lagen hebt, en elke laag r stappen doet voordat je naar de volgende laag gaat:  Maximaal iets van kr stappen  Totaal kan je zo ongeveer r k knopen hebben op de onderste laag  n  r k  Als je k = log n neemt en r=2 heb je een “verstopte gebalanceerde binaire boom”: ‘t kost ook O(log n) tijd

14 Probabilistische aanpak  Vgl. Quicksort / Randomized Quicksort  Door gebruik te maken van kansen krijg je een datastructuur met algoritmen die  In het slechtste geval veel tijd gebruiken  Maar een goede verwachte gemiddelde tijd hebben  Hier:  In O-notatie net zo goed als rood-zwart-bomen (maar alleen verwacht en niet langer slechtste geval)  Maar veel eenvoudiger

15 Weglaten  Deletions zijn heel makkelijk:  Zoek het element  Laat het element weg in alle lagen waar hij voorkomt  Zet alle pointers goed: Op elke laag worden zijn linker en rechterbuur aan elkaar gelinkt  Tijd: O(zoeken van element + aantal lagen waar element in voorkomt)

16 Hoe in te voegen?  Invoegen:  In elk geval invoegen in de onderste laag Tijd: zoeken + O(aantal lagen waar ie in voorkomt)  Maar: in hoeveel lagen gaan we eigenlijk het element invoegen???

17 Kansen  Stop met bepaalde kans (bijvoorbeeld ½) de knoop in de laag erboven  Herhaal totdat “munt”  Gooi een munt op.  Is ‘t kop, stop dan de knoop in nog een laagje meer  “Gemiddeld” heb je O(log n) lagen  “Gemiddeld” zitten er steeds twee knopen tussen elke afrit

18 Subroutine  Voorganger op laag erboven predecessorUp(x)  y = previous(x);  While (up(y)==NIL and y!= L) do  y = previous(x);  Return up(y)

19 Invoegen  Vind plek op onderste laag om x in te voegen  Voeg x in op onderste laag (pointers tussen x en voorganger en opvolger  While (randomBit() == true) do  Maak een object z met key(z) gelijk aan key(x)  y = predecessorUp(x);  If (y != L) then Voeg z in tussen y en next(y) Down(z) = x Up(x)=z  Else Ongeveer net zo (implementatiedetails) Kans 1/2

20 Voorbeeld  Op bord

21 Opmerkingen  Slechtste geval van algoritme: oneindig!   Gemiddeld: prima  Je kan ook bewijzen dat de kans dat “alles” in O(log n) gaat heel groot is (naar 1 gaat voor n naar oneindig)  “Variatie”: in plaats van kans ½ misschien 1/3 of …  Constantes kunnen verschillen…

22 Een paar bewijzen  Aanname: kans steeds ½ van een laag meer  Lemma:  Voor elke key x in de datastructuur: het verwachte aantal lagen dat x bevat is 2  Bewijs  …  Gevolg: de verwachte hoeveel geheugen voor een skiplist is O(n)

23 Tijd van predecessorUp  Lemma  De verwachte tijd van predecessorUp is O(1)  Elke knoop heeft met kans ½ :  up(x)!= NIL

24 Grote kans op O(log n) lagen Stelling  De kans dat er meer dan c log n lagen zijn is hooguit 1/n c-1.  Voor 1 element x is de kans dat x in meer dan c log n lagen zit  (1/2) c log n = ((1/2) log n ) c = (1/n) c = 1/ n c  Want je moet c log n keer beslissen om een laag meer te nemen  Kans dat er minstens 1 element met c log n lagen < n * kans voor 1 element dat hij c log n lagen heeft = n * 1/n c = 1/n c-1

25 Verwachte aantal lagen is O(log n)  Afschatting:  Som over alle c (van 1 tot oneindig) van  c log n * kans dat het aantal lagen ligt tussen (c-1)log n en c log n   som over alle c (van 1 tot oneindig) van  log n * kans dat aantal lagen hooguit c log n is  som over alle c (van 1 tot oneindig) van  log n * 1/n c-1  = log n (1 + 1/n + 1/n 2 + … ) = O(log n)

26 Tijd van operaties  Verwachte tijd van zoeken, invoegen, weglaten was O(aantal lagen)  Dus is O(log n)

27 Andere operaties kunnen ook  Bijvoorbeeld Dynamische Order Statistics  Houd bij elke knoop x bij het aantal elementen dat zit  In de onderste laag  Tussen x en de opvolger van x in deze laag

28 Query: rang  Totaal = 0;  y = eerste element bovenste laag;  While (y != x) do  If key(next(y))  x then Totaal += aantal(y) Y = next(y) If key(y) == x then –Totaal ++ (voor x zelf) –Return x  Else y = down(y);  Hier neem ik even aan dat we zeker weten dat x een bestaande key is  Hoeveel elementen zijn er  x

29 L0L0 R0R0 R0R0 R0R0 R0R0 L0L0 L0L0 L0L

30 Bijhouden van totaal  Weglaten:  “Omhooglopen” (eerst met up, en daarna met variant op predecessorUp) en steeds 1 aftrekken van totoaal  O(hoogte) tijd: verwacht O(log n)  Invoegen:  Zoek element en tel overal op zoekpad 1 op…  Als element op hogere lagen wordt ingevoegd: Bereken zijn getal: loop op laag eronder tot je de volgende knoop met up(x)!= NIL tegenkomt en tel hun getallen op Verminder zijn voorganger met dat getal

31 Skip lists  Worden soms gebruikt in plaats van binaire bomen  Wat makkelijker  Operaties als minimum, maximum, successor, predecessor: snel  Successor: O(?)  In eerste instantie O(log n), maar de tweede successor O(1)  Gemiddeld: O(1)