Divide & Conquer: Verdeel en Heers. Algoritmiek

Vergelijkbare documenten
Divide & Conquer: Verdeel en Heers. Algoritmiek

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Zevende college Algoritmiek. 6 april Verdeel en Heers

Zevende college algoritmiek. 24 maart Verdeel en Heers

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Eerste Huiswerk Algoritmiek 18 februari 2015, uitwisselen, WerkCollege.

Opgaven Recursie: Analyse en Master Theorem Datastructuren, 6 juni 2018, Werkgroep.

Twaalfde college complexiteit. 11 mei Overzicht, MST

Achtste college algoritmiek. 8 april Dynamisch Programmeren

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

Greedy algoritmes. Algoritmiek

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

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

Negende college algoritmiek. 15 april Dynamisch Programmeren

Eerste deeltoets Algoritmiek 4 maart 2015, , Educ-β.

Progra-MEER - Algoritmiek Leuven 20 maart 2018

Algoritmiek 2017 / Algoritmiek 1

Derde college complexiteit. 7 februari Zoeken

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force

Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid.

Minimum Spanning Tree

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

Vierde college complexiteit. 14 februari Beslissingsbomen

Datastructuren en Algoritmen

Combinatoriek groep 1

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

Tiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS

Datastructuren en algoritmen voor CKI

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Groepen, ringen en velden

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

5 Afronden en afkappen

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 3 juni 2008, uur

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 5 juni 2007, uur

Oefententamen in2505-i Algoritmiek

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden:

Kortste Paden. Algoritmiek

Grafen en netwerken I Datastructuren en doorzoeken. Algoritmiek

Eerste Toets Concurrency 20 december 2018, , Educ-β.

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Combinatoriek groep 1 & 2: Recursie

Tiende college algoritmiek. 26 april Gretige algoritmen

Combinatoriek groep 2

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Noordhoff Uitgevers bv

Negende college algoritmiek. 6/7 april Dynamisch Programmeren

Wouter Geraedts Processen & Processoren

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

DEC SDR DSP project 2017 (2)

Opgaven Analyse van Algoritmen 10 mei 2019, Datastructuren, Werkgroep.

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

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Sommige praktische IP problemen kunnen worden geformuleerd als optimalisering op een netwerk.

Derde college algoritmiek. 22 februari Complexiteit Toestand-actie-ruimte

Hoe een TomTom een sudoku oplost

Dynamisch Programmeren III. Algoritmiek

Lineaire vergelijkingen II: Pivotering

Algoritmiek 2015 / Algoritmiek 1

Inleiding Programmeren 2

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Opgaven Heaps Datastructuren, 8 juni 2018, Werkgroep.

Eerste college algoritmiek. 5 februari Introductie

Oplossing van opgave 6 en van de kerstbonusopgave.

ProefToelatingstoets Wiskunde B

2 Recurrente betrekkingen

Tiende college algoritmiek. 14 april Gretige algoritmen

Noordhoff Uitgevers bv

Achtste college complexiteit. 2 april Polynoomevaluatie Matrixvermenigvuldiging Euler- en Hamiltonkringen

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte

Inleiding Programmeren 2

Opgaven Stacks, Lijsten, Queues Datastructuren, Werkgroep, 2 juni 2017.

Algoritmes en Priemgetallen. Hoe maak je een sleutelpaar voor RSA?

ALGORITMIEK: answers exercise class 7

Opgaven Lineair Sorteren Datastructuren, 15 mei 2019, Werkgroep.

ALGORITMIEK: antwoorden werkcollege 5

Zesde college algoritmiek. 18 maart Backtracking. Verdeel en Heers

Snelle algoritmen voor Min en Max filters

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

Heuristieken en benaderingsalgoritmen. Algoritmiek

Netwerkstroming. Algoritmiek

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Algoritmiek. 2 februari Introductie

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

Zesde college algoritmiek. 23 maart Backtracking. Verdeel en Heers

College 13: Patterns (2)

Tweede Toets Concurrency 2 februari 2017, , Educ-β.

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

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

Zesde college algoritmiek. 9/10 maart Backtracking. Verdeel en Heers

Programmeermethoden NA. Week 6: Lijsten

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Benaderingsalgoritmen

Examen Datastructuren en Algoritmen II

10 Meer over functies

Programmeermethoden NA

Algoritmiek 2016 / Algoritmiek 1

Kwantummechanica Donderdag, 13 oktober 2016 OPGAVEN SET HOOFDSTUK 4. Bestudeer Appendix A, bladzijden van het dictaat.

Transcriptie:

Divide & Conquer: Verdeel en Heers Algoritmiek

Algoritmische technieken Trucs; methoden; paradigma s voor het ontwerp van algoritmen Gezien: Dynamisch Programmeren Hierna: Greedy Vandaag: Divide & Conquer 2

Divide & Conquer Los probleem op in 3 stappen: 1. Divide: splits in deelproblemen 2. Conquer: los deelproblemen recursief op 3. Combine: voeg deeloplossingen samen tot oplossing hele probleem (Vgl. dynamisch programmeren: topkeuze verschillende deelproblemen) 3

Divide et impera 4

MergeSort Sorteert deel van array X inclusief ondergrens a, exclusief bovengrens b MergeSort[int[] X, int a, int b] MergeSort[X, a, (a+b)/2] MergeSort[X, (a+b)/2, b] Merge[X, a, (a+b)/2, b] NB: soms laat ik basisgeval weg 5

MergeSort Combineren Opl. geheel Opl. deelproblemen Basisgeval 6

MergeSort 1. Divide: hak lijst doormidden 2. Conquer: sorteer helften 3. Combine: voeg gesorteerde lijsten samen tot 1 gesorteerde lijst 7

Maximum Maximum[int[] X, int a, int b] if(a + 1 == b) return X[a]; L = Maximum[X, a, (a+b)/2] R = Maximum[X, (a+b)/2, b] return max[l, R] 8

Optellen Divide and Conquer Sum[int[] X, a, b] if(a + 1 == b) return X[a] s1 := Sum[X, a, (a+b)/2] s2 := Sum[X, (a+b)/2, b] return s1 + s2 Iteratief Sum[int[] X, a, b] accum := 0 for(i:=a; i<b; i++) accum += X[i] return accum Verschillen? 9

Optellen Divide and Conquer Sum[int[] X, a, b] if(a + 1 == b) return X[a] s1 := Sum[X, a, (a+b)/2] s2 := Sum[X, (a+b)/2, b] return s1 + s2 Iteratief Sum[int[] X, a, b] accum := 0 for(i:=a; i<b; i++) accum += X[i] return accum Minder afrondfouten Parallelisme (concurrency) Minder overhead 10

Nog een voorbeeld Voorwaarts verschil: 1x kopen, 1x verkopen Week 1 2 3 4 5 6 Prijs 9 2 7 5 1 3 11

Voorwaarts Verschil Splits het array in twee stukken: links en rechts Drie gevallen: Inkoop en verkoop zitten allebei links Inkoop en verkoop zitten allebei rechts Inkoop zit links en verkoop zit rechts 12

Voorwaarts Verschil Voorwaarts Verschil is maximum van: V.V. links V.V. rechts Max rechts Min links Week 1 2 3 4 5 6 Prijs 9 2 7 5 1 3 v.v = 5 min = 2 v.v = 2 max = 5 13

Drie gevallen Inkoop en verkoop zitten allebei links Recursief op linkerkant Inkoop en verkoop zitten allebei rechts Recursief op rechterkant Inkoop zit links en verkoop zit rechts 14

Drie gevallen Inkoop en verkoop zitten allebei links Recursief op linkerkant Inkoop en verkoop zitten allebei rechts Recursief op rechterkant Inkoop zit links en verkoop zit rechts Koop links zo goedkoop mogelijk (minimum) Verkoop rechts zo duur mogelijk (maximum) 15

Voorwaarts Verschil Methode die als return-waarde een drietal getallen oplevert: (min, max, maxverschil) Method MaxVerschil[int[] X, a, b] (minl, maxl, vl) = MaxVerschil[a,(a+b)/2]; (minr, maxr, vr) =MaxVerschil[(a+b)/2, b]; antw = max { vl, vr, maxr-minl }; Return (min{minl,minr}, max{minr,maxr}, antw) 16

Voorwaarts Verschil 1. Divide: hak lijst doormidden 2. Conquer: bereken v.v. helften 3. Combine: max van vv s, max right min left 17

Vermenigvuldigen Twee getallen van nn cijfers Motivatie: cryptografie, numerieke wiskunde 1234 2753 x 2702 6170 8638 2468 x 3397202 Soms getal te groot voor 32/64-bits Basisschool-methode: Θ nn 2 18

Vermenigvuldigen Twee getallen AA, BB van nn cijfers Splits: AA = AA 1 10 nn/2 + AA 2 BB = BB 1 10 nn/2 + BB 2 Deelproblemen? 19

Vermenigvuldigen Multiply[A, B] M := 10^(n/2) A1 := A / M ; A2 := A % M B1 := B / M ; B2 := B % M X1 := Multiply(A1, B1) X2 := Multiply(A1, B2) X3 := Multiply(A2, B1) X4 := Multiply(A2, B2) RETURN X1*M*M + X2*M + X3*M + X4 20

Hoeveelheid werk Stel een recurrente betrekking op TT nn = 4TT nn/2 + OO(nn) Vier vermenigvuldigingen van half zo lange getallen 21

Kan het sneller? AA 1 BB 1 MM 2 + MM AA 1 BB 2 + AA 2 BB 1 + AA 2 BB 2 AA 1 + AA 2 BB 1 + BB 2 = AA 1 BB 2 + AA 2 BB 1 + AA 1 BB 1 + AA 2 BB 2 22

Kan het sneller? AA 1 BB 1 MM 2 + MM AA 1 BB 2 + AA 2 BB 1 + AA 2 BB 2 AA 1 + AA 2 BB 1 + BB 2 = AA 1 BB 2 + AA 2 BB 1 + AA 1 BB 1 + AA 2 BB 2 Ruil 2 verm. voor 1 verm. + 3 optel. 23

Vermenigvuldigen Multiply[A, B] M := 10^(n/2) A1 := A / M ; A2 := A % M B1 := B / M ; B2 := B % M X1 := Multiply(A1, B1) X2 := Multiply(A2, B2) X3 := Multiply(A1+A2, B1+B2) RETURN X1*M*M + M*(X3-X1-X2) + X2 24

Hoeveelheid werk Nieuwe recurrente betrekking TT nn = 33TT nn/2 + OO(nn) Hoeveel sneller is dit? analyse 25

Master Theorem Zegt iets over: TT nn = aaaa nn/bb + ff(nn) MergeSort: Verm. 1: Verm. 2: Optel: TT nn = 2TT nn/2 + OO(nn) TT nn = 4TT nn/2 + OO nn TT nn = 3TT nn/2 + OO nn TT nn = 2TT nn/2 + OO(1) 26

Snel vermenigvuldigen TT nn = 33TT nn/2 + OO(nn) 2 getallen vermenigvuldigen in OO(nn 1.585 ) (Dit heet: Karatsuba-vermenigvuldiging) Het kan nog sneller, in OO(nn log nn log log nn), dit is moeilijk. Boek hf. 30. 27

Snel Vermenigvuldigen 1. Divide: splits de getallen in 2 helften 2. Conquer: bereken (3/4) producten 3. Combine: optelsom 28

Subtitutie MT kan niet alles aan Subtitutie: formuleer vermoeden, bewijs het Op basis ervaring, experiment of vermoeden Soort inductiebewijs Maak impliciete constante expliciet Je krijgt ondergrens op cc 29

Consumentengids Best uit de test & beste koop 30

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 Best uit de Test gewoon de beste. Wat is Beste Koop? 31

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 Best uit de Test gewoon de beste. Wat is Beste Koop? 32

Dominatie Een product domineert een ander product als zowel: De prijs lager is En de kwaliteit hoger Wil: lijst van niet-gedomineerde producten (Pareto-front) 33

Dominatie Dominatie[product[] X, int a, int b] Sorteer X op kwaliteit Dominatie[X, a, (a+b)/2] Dominatie[X, (a+b)/2, b]? 34

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 78 76 74 72 1199 1229 709 1553 71 65 47 31 801 632 459 599 35

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 78 76 74 72 1199 1229 709 1553 71 65 47 31 801 632 459 599 36

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 78 76 74 72 1199 1229 709 1553 71 65 47 31 801 632 459 599 Rechts domineert nooit links Waneer domineert links rechts? 37

Consumentengids Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 78 76 74 72 1199 1229 709 1553 71 65 47 31 801 632 459 599 Rechts domineert nooit links Waneer domineert links rechts? 38

Dominatie Dominatie[product[] X, int a, int b] Sorteer X op kwaliteit Dominatie[X, a, (a+b)/2] Dominatie[X, (a+b)/2, b] p* := minimale prijs [a,(a+b)/2) filter uit [(a+b)/2, b) als p>p* 39

Looptijd TT nn = 2TT nn/2 + OO nn log nn 40

Looptijd TT nn = 2TT nn/2 + OO nn log nn TT nn = OO(nn log 2 nn) Dom! Je sorteert te vaak Let bij D&C op: Geen overbodig werk: sorteren, array kopiëren Bereken in recursie hulpwaarden (v.v; opgave WC) 41

Dominatie Het kan véél simpeler Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 mmmmmm =632 42

Dominatie Het kan véél simpeler Kwaliteit 78 76 74 72 71 65 47 31 Prijs 1199 1229 709 1553 801 632 459 599 mmmmmm =459 Lineair als lijst voorgesorteerd 43

Dominatie Divide & Conquer-algoritme is bouwsteen: Werkcollege: uitbreiding naar 3D Divide & Conquer is vaak één van de mogelijkheden: Mergesort v.s. Heapsort Dominatie 44

Conclusie Divide & Conquer: techniek om algoritmen te ontwerpen Splits probleem, los deelproblemen op, combineer Analyse: Master Theorem, Substitutie 45