Gerandomiseerde algoritmes

Slides:



Advertisements
Verwante presentaties
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Advertisements

Datastructuren Quicksort
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
Tussenpresentatie Modelleren C Random Seeds Sanne Ernst Jarno van Roosmalen.
Eindpresentatie Modelleren C Random Seeds
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Fibonacci & Friends Met dank aan Gerard Tel.
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.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Leiderverkiezing Olympus College 14 april 2008 David N. Jansen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 5 Cees Witteveen.
1 Complexiteit Bij motion planning is er sprake van drie typen van complexiteit –Complexiteit van de obstakels (aantal, aantal hoekpunten, algebraische.
Motion planning with complete knowledge using a colored SOM Jules Vleugels, Joost N. Kok, & Mark Overmars Presentatie: Richard Jacobs.
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
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
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Sorteeralgoritmen. Sorteren: aanpak 1 Hoe ga je een rij getallen sorteren met PC? Sorteren door selectie (= selection sort): Zoek de kleinste waarde Sorteer.
Liesbeth Van Raemdonck
T U Delft Groep Parallelle en Gedistribueerde Systemen PGS College in345 Deel 2 Cees Witteveen Parallelle en Gedistribueerde Systemen Faculteit Informatie.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 2 Cees Witteveen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
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 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Gecijferdheid les 1.4 Grootst gemene deler Kleinst gemene veelvoud
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Recursie…. De Mandelbrot Fractal De werking… De verzameling natuurlijke getallen… 0 ∞-∞
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
Kansverdelingen Kansverdelingen Inleiding In deze presentatie gaan we kijken naar hoe kansen zijn verdeeld. We gaan in op verschillende.
Amorized Analysis en Union-Find Algoritmiek. 2 Vandaag Amortized analysis –Technieken voor tijdsanalyse van algoritmen Union-find datastructuur –Datastructuur.
Inhoud Breuken (optellen, aftrekken, vermenigvuldigen en delen).
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.
Kortste Paden Algoritmiek. 2 Vandaag Kortste Paden probleem All pairs / Single Source / Single Target versies DP algoritme voor All Pairs probleem (Floyd’s.
Netwerkstroming Algoritmiek. 2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede.
Heuristieken en benaderingsalgoritmen Algoritmiek.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Datastructuren voor grafen Algoritmiek. 2 Grafen Model van o.a.: –Wegennetwerk –Elektrische schakeling –Structuur van een programma –Computernetwerk –…
Kortste Paden Algoritmiek.
Doorzoeken van grafen Algoritmiek.
Netwerkstroming Algoritmiek.
All-Pairs Shortest paths
Datastructuren voor graafrepresentatie
Minimum Opspannende Bomen
Amorized Analysis en Union-Find
Benaderingsalgoritmen
Kiezen met Kaarten.
Zeeslag Bron: csunplugged.org / csunplugged.nl.
Slim tellen.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Kiezen met Kaarten.
Nim, een strategisch spelletje
Tellen met kaarten.
Slim tellen.
Tellen met kaarten.
Kiezen met Kaarten.
Meetkunde Verzamelingen Klas 8.
Transcript van de presentatie:

Gerandomiseerde algoritmes Dat was random… Algoritmiek

Gerandomiseerde algoritmes Gebruiken getallen uit toevalsgeneratoren De toevalsgetallen sturen twee dingen: hoe lang het algoritme zoekt in welk deel van de oplossingsruimte het algoritme zoekt Algoritmiek

Waarom randomiseren? Probleem snel(ler) oplossen Vaak zijn gerandom. algoritmes sneller dan niet-gerandom. algoritmes Een goede benadering van het optimum te vinden Het juiste antwoord te vinden Dit alles met een zekere kans natuurlijk Algoritmiek

Oppervlakteberekening (anti-aliasing of image-scaling) Hoe kan je de oppervlakte van het groene gebied berekenen? Vorig jaar had ik dit een kwart slag gedraaid. Toen leek ‘t een beetje op een konijntje. Algoritmiek

Oppervlakteberekening (anti-aliasing of image-scaling) 11/30 Kies n keer een willekeurig punt in het gebied van het vierkant. Tel hoe vaak (zeg m) keer zo’n punt in het groene gebied valt. Geschatte oppervlakte: m/n * oppervlakte vierkant. Maar ‘t is te gemeen om met hagel op een konijntje te schieten… Algoritmiek

Eigenschappen 11/30 Hoe meer punten, hoe kleiner de kans je ver van het juiste antwoord af zit. Implementatie makkelijk Wel nodig: snelle test of gegeven punt in ‘t gebied zit. Er zijn snellere en (vaak) betrouwbaardere methoden, maar … geen simpelere. Algoritmiek

Gerandomiseerde algoritmes Twee dingen zijn belangrijk bij randomisatie: Wat is de kans dat het algoritme een (in)correct antwoord geeft? Wat is de (verwachte) looptijd van het algoritme? Algoritmiek

Las Vegas algoritme Geeft altijd een correct ja/nee antwoord of oplossing Verwachte looptijd is eindig/beperkt Intuïtie: we gokken met hoeveel rekentijd we gebruiken, maar niet met het antwoord Algoritmiek

Monte Carlo algoritme Geeft niet altijd een correct antwoord Eenzijdige fout of tweezijdige fout Wel grote kans op goed antwoord Worst-case looptijd is eindig/beperkt Intuïtie: we gokken met het antwoord, maar niet met hoeveel looptijd wel nodig hebben Algoritmiek

Voorbeeld: meerderheid Algoritmiek

Meerderheid 1 Gegeven een array A met n elementen Tenminste de helft van alle elementen in A is hetzelfde element a, en alle andere elementen zijn verschillend Wat is a? 1 2 5 6 Algoritmiek

Meerderheid 1: deterministisch O(n) tijd: loop array door totdat twee gelijke elementen gevonden zijn Dit algoritme kost W(n) tijd als eerste n/2 elementen die je bekijkt allemaal verschillend zijn Randomisatie: O(1) verwachte tijd Algoritmiek

Meerderheid 1: Las Vegas do kies i≠j uniform at random uit {1,…,n} while A[i] ≠ A[j] return A[i] Er zijn juiste i,j maar wanneer vinden we die? Kans op succes in één ronde: ~1/4 (½n/n)*((½n-1)/n-1) Verwacht aantal rondes tot succes: 4 (Bernoulli) Verwachte looptijd: O(1) Met kans 0 stopt ie niet Algoritmiek

Las Vegas algoritme Geeft altijd een correct ja/nee antwoord of oplossing Verwachte looptijd is eindig/beperkt O(1) hier Intuïtie: we gokken met hoeveel rekentijd we gebruiken, maar niet met het antwoord Algoritmiek

Meerderheid 2 Gegeven een array A met n elementen Deze array is van één van twee types: tenminste de helft van alle elementen in A is hetzelfde, en alle andere elementen zijn verschillend alle elementen zijn verschillend 1 2 5 6 1 2 3 5 4 6 Algoritmiek

Meerderheid 2: deterministisch O(n) tijd: loop array door totdat twee gelijke elementen gevonden zijn of niet Dit algoritme kost W(n) tijd als eerste n/2 elementen die je bekijkt allemaal verschillend zijn Algoritmiek

Meerderheid 2: Monte Carlo kies i≠j uniform at random uit {1,…,n} if A[i] = A[j] return “type 1” else return “type 2” Als input “type 2”, uitvoer correct Als input “type 1”, uitvoer misschien fout Wat is de kans? Correct: kans ~1/4 Incorrect: kans ~3/4 Looptijd: O(1) Algoritmiek

Monte Carlo algoritme Geeft niet altijd een correct antwoord Eenzijdige fout of tweezijdige fout Hier: eenzijdige fout-kans van ≤ 3/4 Wel grote kans op goed antwoord Worst-case looptijd is eindig/beperkt Hier: O(1) Intuïtie: we gokken met het antwoord, maar niet met hoeveel looptijd wel nodig hebben Algoritmiek

Las Vegas Selecteren Algoritmiek

Selectie probleem Gegeven array A met n verschillende getallen Wat is het k-de kleinste element? Hoe snel deterministisch? Deterministisch: O(kn) of O(n log n) k keer grootste element vinden of eerst sorteren k=2 2 k=4 4 1 2 3 5 4 6 Algoritmiek

Selectie: algoritme Algoritme: SplitSelectie(A, k) Kies een element a uit A Splits A in A<a (getallen in A < a) en A>a (getallen in A > a) if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k - |A<a| - 1) Algoritmiek

Selectie: algoritme SplitSelectie(A, k) Kies een element a uit A Splits A in A<a en A>a if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k-|A<a|-1) Dit algoritme geeft altijd het juiste antwoord, ongeacht hoe we a kiezen Bij k = 1 idd het kleinste getal in A Looptijd: T(n) ≤ cn + T(…) Hangt af van a Algoritmiek

Selectie: algoritme Looptijd: T(n) ≤ cn + T(…) a is mediaan van A SplitSelectie(A, k) Kies een element a uit A Splits A in A<a en A>a if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k-|A<a|-1) Looptijd: T(n) ≤ cn + T(…) a is mediaan van A T(n) ≤ cn + T(n/2) Dan T(n) ≤ 2cn a deelt A op stukken van grootte ≥ 𝛜 n T(n) ≤ cn + T((1-𝛜)n) T(n) ≤ cn/𝛜 Algoritmiek

Selectie: algoritme Looptijd: T(n) ≤ cn + T(…) SplitSelectie(A, k) Kies een element a uit A Splits A in A<a en A>a if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k-|A<a|-1) Looptijd: T(n) ≤ cn + T(…) Hoe weten we welke a goed is? Kies a uniform at random! Algoritmiek

Selectie: algoritme Las Vegas! Geeft altijd correct antwoord SplitSelectie(A, k) Kies random element a uit A Splits A in A<a en A>a if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k-|A<a|-1) Las Vegas! Geeft altijd correct antwoord Looptijd: T(n) ≤ cn + T(…) ?? Doel/hoop: a ligt dicht genoeg bij mediaan in buurt Algoritmiek

Selectie: algoritme Kijk naar A<a en A>a SplitSelectie(A, k) Kies random element a uit A Splits A in A<a en A>a if |A<a| = k-1 then return a elseif |A<a| ≥ k then return SplitSelectie(A<a, k) else return SplitSelectie(A>a, k-|A<a|-1) Kijk naar A<a en A>a a is goed als |A<a| en |A>a| beide ≥ n/4, dus beide ≤ 3n/4 Wat is de kans dat a goed is? 1/2 Verwachting: 2 keer a kiezen voor goede keus Algoritmiek

Looptijd in fases Algoritme is in fase j als de grootte van A tussen (3/4)j n en (3/4)j+1 n is Hoeveel rekenstappen zetten we naar verwachting in fase j? Iedere recursieve aanroep: ≤ c (3/4)j n Naar verwachting ≤ 2 recursieve aanroepen in fase j Dus ≤ 2 c (3/4)j n Algoritmiek

Verwachte looptijd Verwachte looptijd is som van looptijden in fase j voor alle j Σj 2 c (3/4)j n ≤ 8 cn = O(n) Algoritmiek

Verdieping Er is ook een deterministische manier om selectie in O(n) tijd te doen (zie boek) Selectie lijkt op Quicksort. Wat te denken van Quicksort met random gekozen ‘pivot’? Verwachte looptijd: O(n log n) Idee vrijwel hetzelfde, zie boek Algoritmiek

Snijden met monte carlo Algoritmiek

Minimum Snede Gegeven graaf G=(V,E), een snede is een partitie (A,B) van V De grootte van de snede is het aantal kanten met 1 einde in A en andere in B Probleem: vind een snede van minimum grootte A B Grootte = 4 Algoritmiek

Hoe bereken ik een snede? Partitie (A,B) van V zdd aantal kanten met 1 einde in A en 1 einde van B zo klein mogelijk is O(n+a), want minimum snede heeft grootte gelijk aan minimum graad O(n3) d.m.v. Floyd-Warshall algoritme O(n2a) met slim gebruik Ford-Fulkerson algoritme NP-volledig A B Grootte = 4 Algoritmiek

Snede berekenen Stelling: Minimum Snede kan berekend worden in O(n2a) tijd Bewijs: Stel (A,B) is minimum snede Kies s een willekeurige knoop (zeg in A) en t een willekeurige knoop aan de andere kant (zeg B) Dan is de grootte van (A,B) gelijk aan de grootte van een minimum s,t-snede Probeer voor vaste s alle mogelijkheden voor t en bereken een minimum s,t-snede met Ford-Fulkerson in O(na) tijd (max stroming is hoogstens n, waarom?) Geef de kleinst gevonden snede terug Algoritmiek

Minimum snede: sneller? Kan dit sneller? Ja veel sneller Sneller dan maximum stroming vinden Gebruik geen maximum stromingsalgoritme Nog slimmer idee: randomisatie! Algoritmiek

Multigrafen We werken met multigrafen Meerdere kanten tussen zelfde paar knopen toegestaan Maar geen self-loop (kant tussen zelfde knoop) Contractie van kant e = (u,v): gooi kanten {u,v} weg en verenig u en v Algoritmiek

Contractie Contractie van kant e = (u,v): gooi kanten {u,v} weg en verenig u en v Superknoop w. Met S(w) geven we de verzameling knopen aan die door w opgegeten is In dit geval: S(w) = {u,v} x a x a w u v y b y b Algoritmiek

Contractie-algoritme Laat (A,B) een minimum snede zijn en e = (u,v) Idee: als u,v beide in A of beide in B, dan veranderd de grootte van de minimum snede niet na contractie van e u A B v Algoritmiek

Contractie-algoritme Laat (A,B) een minimum snede zijn en e = (u,v) Idee: als u,v beide in A of beide in B, dan veranderd de grootte van de minimum snede niet na contractie van e Dus contraheer een kant en hoop op goede afloop A B w Algoritmiek

Afloop contractie algoritme Lemma: Als G verbonden is en (A,B) een minimum snede is, dan is zowel deelgraaf A als deelgraaf B verbonden A B Algoritmiek

Afloop contractie algoritme Lemma: Als G verbonden is en (A,B) een minimum snede is, dan is zowel deelgraaf A als deelgraaf B verbonden Bewijs: anders kan ik een component van A naar B verplaatsen (of visa versa) A B Algoritmiek

Afloop contractie algoritme Lemma: Als G verbonden is, deelgraaf A is verbonden, en beide eindpunten van kant e liggen in A, dan zijn G en A na contractie van e ook verbonden Bewijs: ieder pad tussen twee knopen dat de kant e gebruikte, kan nu via de superknoop lopen Algoritmiek

Afloop contractie algoritme Lemma: Stel (A,B) is een minimum snede van een verbonden graaf. Dan bestaat er een serie kanten zdd dat het contraheren van deze serie kanten leidt tot een graaf met twee knopen x, y met S(x) = A en S(y) = B Bewijs: contraheer de kanten in deelgraaf A (die verbonden is) en contraheer daarna de kanten in deelgraaf B (die verbonden is) Algoritmiek

Afloop contractie-algoritme We contraheren kanten at random totdat er twee knopen x, y over zijn Antwoord dat we geven is het aantal kanten tussen deze twee knopen, ofwel de snede (S(x),S(y)) Stelling: De kans dat het algoritme een minimum snede oplevert is minstens 1/n2 Algoritmiek

Bewijs (1) Stelling: De kans dat het algoritme een minimum snede oplevert is minstens 1/n2 Bewijs: Stel minimum snede heeft k kanten en tot nu is er daar nog geen van gecontraheerd Dan heeft iedere knoop minstens graad k Voor een knoop v met graad minder dan k heeft de snede (S(v), S(V\{v})) grootte k Dus G heeft minstens kn/2 kanten Algoritmiek

Bewijs (2) G heeft minstens kn/2 kanten De kans dat we in huidige iteratie een kant van de minimum snede kiezen is hoogstens k/(kn/2) = 2/n De kans dat we nooit een fout maken is dus ≥ (1 - 2/n) (1 - 2/(n-1)) … (1 - 2/3) = ((n-2) / n) ((n-3)/(n-1)) ((n-4)/(n-2)) ... = 2 / (n (n-1)) Stelling: De kans dat het algoritme een minimum snede oplevert is minstens 1/n2 Algoritmiek

Verdieping (1) Contractie-algoritme: kans op goed antwoord is niet zo groot Door herhalen kun je de kans op een goed antwoord vergroten n2 keer herhalen: kans op fout antwoord ≤ 1/e Nu niet meer sneller dan Ford-Fulkerson n2 ln n keer herhalen: kans op fout antwoord ≤ 1/n Wel slechtere looptijd Algoritmiek

Verdieping (2): random Methode Random, die een willekeurig element geeft uit een verzameling Volgens bepaalde kansverdeling; meestal uniform Bijv: random getal uit [0,1), uniform verdeeld Of: random getal uit {1,2,3,4,5,6} elk met kans 1/6. Praktijk: Pseudo-random generatoren Rij x0, x1, … , met bijv.: xi = axi-1 + b mod n, geschikte a, b, n Zal periodiek zijn! a, b, n zodat periode zo lang mogelijk is. Echte random generatoren: bijv. met radio-actief verval. Algoritmiek