Greedy algoritmes. Algoritmiek

Vergelijkbare documenten
Greedy algorithms. Algoritmiek

Greedy algorithms. Algoritmiek

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

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Tiende college algoritmiek. 14 april Gretige algoritmen

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Tiende college algoritmiek. 26 april Gretige algoritmen

Heuristieken en benaderingsalgoritmen. Algoritmiek

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Twaalfde college complexiteit. 11 mei Overzicht, MST

Minimum Spanning Tree

Tiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra

2WO12: Optimalisering in Netwerken

Minimum Opspannende Bomen. Algoritmiek

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

Benaderingsalgoritmen

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek

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

Dynamisch Programmeren III. Algoritmiek

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Oefententamen in2505-i Algoritmiek

Divide & Conquer: Verdeel en Heers. Algoritmiek

Doorzoeken van grafen. Algoritmiek

TW2020 Optimalisering

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Zevende college Algoritmiek. 6 april Verdeel en Heers

Vierde college complexiteit. 14 februari Beslissingsbomen

TW2020 Optimalisering

Divide & Conquer: Verdeel en Heers. Algoritmiek

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

Oefententamen in2505-i Algoritmiek

DomJudge-Practicum. Open Dag UU

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Tiende college algoritmiek. 3 mei Dynamisch programmeren Gretige Algoritmen Algoritme van Dijkstra

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

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

Twaalfde college algoritmiek. 23 mei Branch & Bound, Heapsort

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Datastructuren Uitwerking jan

Het minimale aantal sleutels op niveau h is derhalve

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

Zevende college algoritmiek. 24 maart Verdeel en Heers

Tentamen combinatorische optimalisatie Tijd:

Oplossing van opgave 6 en van de kerstbonusopgave.

1 Complexiteit. of benadering en snel

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur

Eerste Huiswerk Algoritmiek 18 februari 2015, uitwisselen, WerkCollege.

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

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

Examen Datastructuren en Algoritmen II

TW2020 Optimalisering

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

Elfde college algoritmiek. 10 mei Algoritme van Dijkstra, Gretige Algoritmen

Het Eindfeest. Algoritmiek Opgave 6, Voorjaar

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Amorized Analysis en Union-Find Algoritmiek

Algoritmiek 2015 / Algoritmiek 1

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound

Automaten. Informatica, UvA. Yde Venema

Examen Algoritmen en Datastructuren III

Geldwisselprobleem van Frobenius

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

Tentamen in2505-i Algoritmiek

Algoritmiek 2016 / Algoritmiek 1

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Elfde college algoritmiek. 29 april Algoritme van Dijkstra, Branch & Bound

Examen Datastructuren en Algoritmen II

Negende college algoritmiek. 15 april Dynamisch Programmeren

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord).

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Datastructuren en Algoritmen

opgaven formele structuren deterministische eindige automaten

Automaten en Berekenbaarheid 2016 Oplossingen #4

Stochastische Modellen in Operations Management (153088)

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

Tweede college algoritmiek. 12 februari Grafen en bomen

l e x e voor alle e E

opgaven formele structuren tellen Opgave 1. Zij A een oneindige verzameling en B een eindige. Dat wil zeggen (zie pagina 6 van het dictaat): 2 a 2.

Achtste college algoritmiek. 8 april Dynamisch Programmeren

TW2020 Optimalisering

Programmeermethoden NA. Week 6: Lijsten

Examen Datastructuren en Algoritmen II

Tentamen in2505-i Algoritmiek

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

Examen Datastructuren en Algoritmen II

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

Netwerkstroming. Algoritmiek

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

Elke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.

(On)Doenlijke problemen

Overzicht. 1. Definities. 2. Basisalgoritme. 3. Label setting methoden. 4. Label correcting methoden. 5. Ondergrenzen. 6.

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

extra oefening algoritmiek - antwoorden

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

ALGORITMIEK: antwoorden werkcollege 5

Transcriptie:

Greedy algoritmes Algoritmiek

Algoritmische technieken Trucs, methoden, paradigma s voor het ontwerpen van algoritmen Dynamisch Programmeren Divide & Conquer Greedy 2

Greedy algoritme Bouwt de oplossing incrementeel op Kiest best uitziende / meest veelbelovende / grootste winst gevende stap om deeloplossing uit te breiden Telkens dus maar 1 keuze Heeft nooit twijfel over eerdere beslissingen Neemt veel risico! Wat als je keuze fout is? 3

Voorbeeld: A2B Gegeven getallen 2 A < B Je mag A met 1 verhogen (I) Je mag A verdubbelen (D) Vind het kortste rijtje I s en D s om A in B te veranderen DP gezien in eerdere college 4

Sneller met greedy Analyseer het optimale rijtje: wat is de laatste keuze? I of D? Als B oneven is, dan is laatste een I Als 2A > B, dan is laatste een I Anders, B is even en B 2A, dan is laatste een D Moeten we wel bewijzen! 5

Sneller met greedy Lemma: Als B is even en B 2A, dan eindigt een kortste rijtje op D Stel een kortste rijtje eindigt niet op D Geval 1: alleen maar I in het rijtje: I B-A Dan is I B/2-A D korter Geval 2: wel een D: DI r r is even, vanwege de D. Dan is I r/2 D korter Kortste rijtje eindigt op D 6

Sneller met greedy Als B oneven is, dan is laatste een I Als B < 2A, dan is laatste een I Anders, B is even en B 2A, dan is laatste een D 7

Greedy strategie A2Bgreedy(A,B) Initialiseer stack S while B!= A do if B oneven of B < 2A then S.push(I); B -= 1; else S.push(D); B /= 2; while not S.empty() do write(s.pop()); O(n) tijd O(grootte uitvoer) tijd! 8

Idee van greedy Slimme keuze van het volgende element in je oplossing Laat zien dat dit optimaliteit niet verstoord! Greedy choice property Eis bewijs! Ga direct de kant op van je optimale keuze Twijfel niet! 9

DP vs greedy Dynamisch programma Deelprobleem met zelfde structuur als originele probleem Bekijk alle keuzes Bewijs optimaliteit van deelproblemen en oplossingen Greedy algoritme Deelprobleem met zelfde structuur als originele probleem Bekijk één keuze Bewijs optimaliteit van keuze Vaak sneller 10

Hoe bewijs je optimaliteit? Bewijs van greedy choice property 1. Voor het optimum uitblijven Voorbeeld: pannenkoekenfeest! 2. Uitwisselen met het optimum Voorbeeld: A2B Voorbeeld: inleveropdrachten 11

Pannenkoekenfeest! 12

Pannenkoekenfeest! n opdrachten voor kinderfeestjes Opdracht i heeft begintijd s(i), eindtijd e(i) Vaste prijs van 100 euro per feestje Welke opdrachten neem je aan voor grootste mogelijke verdienste? Zoveel mogelijk opdrachten aannemen 13

14

15

Wat is je topkeuze? 16

First2Finish strategie Kies het feestje dat als eerste eindigt while er is een feestje Kies feestje dat als eerste eindigt Verwijder alle feestjes met een conflicterende tijd O(n log n) tijd 17

First2Finish strategie Kies het feestje dat als eerste eindigt! Waarom optimaal? We doen het telkens beter dan het optimum Vergelijk optimum O en greedy oplossing G Elementen O 1 O k en G 1... G k Geordend op (oplopende) eindtijd Lemma: e(g i ) e(o i ) voor iedere i m 18

Bewijs lemma O 1 O k en G 1... G m geordend op eindtijd Lemma: e(g i ) e(o i ) voor iedere i m Bewijs: Gebruik inductie! O i-1 O i Basis: i = 1: correct per definitie G i-1 keuze Stap: Er geldt e(g j ) e(o j ) voor iedere j<i O i kan na O i-1 en G i-1, want e(g i-1 ) e(o i-1 ) Greedy keuze eindigt niet later dan O i 19

Bewijs O 1 O k en G 1... G m geordend op eindtijd Lemma: e(g i ) e(o i ) voor iedere i m Stel dat G < O, d.w.z. m < k Dan geldt e(g m ) e(o m ) Omdat O 1... O k geordend is op eindtijd, kan O m+1 nog achter G m aan Tegenspraak, dus G = O G m O m O m+1 20

Uitbreidingen Verschillende opbrengst per feestje Online algoritmes Je weet niet alle feestjes van tevoren, opdrachten worden langzaam bekend Online scheduling: groot vakgebied 21

Inleveropdrachten n inleveropdrachten Opdracht i heeft deadline d i, vereist w i uur werk Als je opdracht i op tijd s(i) begint, dan is het klaar op tijd s(i) + w i Dat is L i = max {0, s(i) + w i d i } te laat Minimaliseer max { L i }: niet te laat zijn! 22

Voorbeeld Opdracht 1 2 3 Deadline 2 2 4 Werk 1 2 2 Optimaal 1 2 3 4 5 1 2 3 Max 1 uur te laat 3 2 1 Max 3 uur te laat 23

Wat is je topkeuze? Opdracht 1 2 3 Deadline 2 2 4 Werk 1 2 2 Optimaal 1 2 3 4 5 1 2 3 Max 1 uur te laat 3 2 1 Max 3 uur te laat 24

Vroegste deadline Doe opdracht met vroegste deadline eerst! while we een opdracht kunnen uitvoeren do voer opdracht uit met vroegste deadline Looptijd: O(n log n) 25

Uitwisselargument Pas optimum aan zodat het doet wat greedy zou doen Bewijs dat dit zonder verlies van optimaliteit kan Bij A2B zagen we dit al B is even en B 2A, dan is laatste een D Lieten zien dat we optimum konden aanpassen 26

Vroegste deadline Doe opdracht met vroegste deadline eerst! while we een opdracht kunnen uitvoeren do voer opdracht uit met vroegste deadline Looptijd: O(n log n) 27

Vroegste deadline Schema is een functie s die zegt, begin opdracht i op tijd s(i) Bewering: alle schema s die vroegste deadline eerst gebruiken zijn even laat Bewijs: Merk op: er wordt altijd gewerkt We zijn alleen geïnteresseerd in de onderlinge volgorde van opdrachten met dezelfde deadline 28

Vroegste deadline Bewering: alle schema s die vroegste deadline eerst gebruiken zijn even laat Bewijs: Merk op: er wordt altijd gewerkt We kijken alleen naar onderlinge volgorde van opdrachten met dezelfde deadline De laatheid wordt bepaald door de eindtijd van laatste opdracht, maar die is altijd hetzelfde, onafhankelijk van die volgorde 29

Vroegste deadline Bewering: alle schema s die vroegste deadline eerst gebruiken zijn even laat Het volstaat dus te bewijzen dat er een optimale oplossing bestaat die het principe vroegste deadline eerst gebruikt Dan is greedy net zo goed met gebruik van de bewering 30

Opdracht uitwisselen Schema is een functie s die zegt, begin opdracht i op tijd s(i) De foutenlast is aantal opdrachten i,j waarvoor s(i) < s(j) maar niet d(i) d(j) `vroegste deadline eerst schema heeft last 0 O 1 2 3 D 2 2 4 1 2 3 Last = 0 W 1 2 2 3 2 1 Last = 2 31

Opdracht uitwisselen De foutenlast is aantal opdrachten i,j waarvoor s(i) < s(j) maar niet d(i) d(j) `vroegste deadline eerst schema heeft last 0 Schema met last 0 volgt principe `vroegste deadline eerst Maar heeft optimum foutenlast 0? 3 2 1 32

Opdracht uitwisselen De foutenlast is aantal opdrachten i,j waarvoor s(i) < s(j) maar niet d(i) d(j) Kies O als een optimale oplossing met kleinste foutenlast Als foutenlast 0 is, dan is greedy optimaal Stel dus dat foutenlast groter dan 0 is 3 2 1 33

Opdracht uitwisselen O heeft foutenlast groter dan 0 Observeer: er zijn opeenvolgende opdrachten a,b gepland die fout zijn (dwz niet d(a) d(b)) Ga van links naar rechts tot je de fout vindt Observeer 2: als we a en b omwisselen, dan neemt de foutenlast af a en b staan nu goed; rest is onveranderd 34 309 a b 45 34

Opdracht uitwisselen O heeft foutenlast groter dan 0 Observeer: er zijn opeenvolgende opdrachten a,b gepland die fout zijn (dwz niet d(a) d(b)) Ga van links naar rechts tot je de fout vindt Observeer 2: als we a en b omwisselen, dan neemt de foutenlast af a en b staan nu goed; rest is onveranderd 34 309 b a 45 35

Opdracht uitwisselen Opeenvolgende a,b zijn fout: niet d(a) d(b) Bewering: als we a en b omwisselen, dan zijn we niet later dan we al waren b is niet later dan voorheen J 34 34 309 3 2 a 1 b 45 309 b a 45 36

Opdracht uitwisselen Opeenvolgende a,b zijn fout: niet d(a) d(b) Bewering: als we a en b omwisselen, dan zijn we niet later dan we al waren a eindigt nu op tijd wanneer b eerst eindigde d(b) < d(a), dus dat is minder erg J 34 34 309 3 2 a 1 b 45 309 b a 45 37

Opdracht uitwisselen Opeenvolgende a,b zijn fout: niet d(a) d(b) Bewering: als we a en b omwisselen, dan zijn [oude eindtijd b] d a < we niet later dan we al waren a eindigt nu op tijd wanneer b eerst eindigde d(b) < d(a), dus dat is minder erg J [nieuwe laatheid a] = [nieuwe eindtijd a] d a = [oude eindtijd b] d b = [oude laatheid b] 34 34 309 3 2 a 1 b 45 309 b a 45 38

Opdracht uitwisselen O is opt. oplossing met kleinste foutenlast > 0 Opeenvolgende a,b zijn fout: niet d(a) d(b) Bewering: als we a en b omwisselen, dan zijn we niet later dan we al waren Observeer 2: én de foutenlast neemt strict af We vinden een opl. met kleinere foutenlast Optimum heeft geen foutenlast, dus greedy is optimaal 39

Vroegste deadline Doe opdracht met vroegste deadline eerst! Door een uitwisselargument konden we aantonen dat er een optimale oplossing is die ook vroegste deadline eerst gebruikt 40

Huffman codes Stel we hebben een tekst die we willen coderen als bitstring Sommige letters komen veel vaker voor dan andere Besparen in lengte door: Slim codes (in {0,1}*) toewijzen aan letters Niet elke letter hoeft een code die even lang is 41 Algoritmiek

Voorbeeld abcaaaacabaabaaabaaaac a komt vaak voor, b en c weinig dus: a wordt 0 b wordt 10 c wordt 11 01011000011010001000010000011 42 Algoritmiek

Voorbeeld abcaaaacabaabaaabaaaac a komt vaak voor, b en c weinig dus: a wordt 0 b wordt 10 c wordt 11 01011000011010001000010000011 Waarom niet als code a: 0 b: 00 c:01? 43 Algoritmiek

Huffman code Beeld elke letter a af op een bitstring m(a) Geen enkel symbool heeft een code die een prefix (beginstuk) is van de code van een ander symbool (prefix vrij) 44 Algoritmiek

Prefix-vrije codes te representeren als boom 0 1 0 1 0 1 c d 0 1 b c: 00 d: 01 a: 100 e: 101 b: 11 a e 45 Algoritmiek

Kosten Elk symbool a heeft frequentie f(a) Voor prefix-vrij mapping m: kosten zijn f(a)* m(a) (.. geeft lengte van string) Totale kosten: som van alle a in alphabet van f(a)* m(a) Minimaliseer de totale kosten 46 Algoritmiek

Broerbladen Als we 1 of 2 symbolen hebben: triviaal Als we minstens 3 symbolen hebben: er zijn twee broer-bladen : We kunnen zien welke symbolen we het liefst als broerbladen zien nl.: de twee symbolen met de laagste frequentie 0 1?? 47 Algoritmiek

Lemma Stel a en b zijn de twee symbolen met de laagste frequentie. Er is een boom waar a en b bladen zijn die dezelfde ouder hebben (broerbladen zijn). Bewijs: Kijk naar een blad met grootste diepte. Die heeft een broer (anders kan je de ouder weglaten, en betere Huffman-code krijgen). Verwissel a en b met symbolen in die bladeren: de kosten kunnen gelijk blijven of dalen. 48 Algoritmiek

Simplificatie-stap Stel a en b zijn symbolen met de laagste frequentie. Verander alfabet: Laat a en b weg Neem nieuw symbool, zeg c, met frequentie f(a) +f(b) Bewering: de minimale kosten van een Huffman-boom voor het nieuwe alfabet is gelijk aan de minimale kosten van een Huffman-boom voor het oude alfabet 49 Algoritmiek

Bewijs simplificatiestap Bewering: de minimale kosten van een Huffmanboom voor het nieuwe alfabet + f(a)+f(b) is gelijk aan de minimale kosten van een Huffman-boom voor het oude alfabet => Neem een boom voor het nieuwe alfabet. Waar c stond, neem nu een deelboompje als volgt c 0 1 Kosten stijgen precies met f(a)+f(b) a b 50 Algoritmiek

Bewijs vervolg Bewering: de minimale kosten van een Huffman-boom voor het nieuwe alfabet + f(a) +f(b) is gelijk aan de minimale kosten van een Huffman-boom voor het oude alfabet <= We weten: er is een boom waar a en b broederbladen zijn. Vervang het gedeelte van a en b en hun ouder door een knoop voor c 51 0 1 a b Algoritmiek c Kosten dalen precies met f(a)+f(b)

Algoritme Herhaal tot we 1 symbool over hebben: Zoek de twee symbolen met laagste frequentie, zeg a i en a j. Kies een nieuw symbool a r Haal a i en a j uit alphabet, voeg a r toe met f(a r ) = f(a i )+f(a j ) Zet het triple (i,j,r) op een stack S Maak een boom met 1 knoop van het resulterende symbool Herhaal tot S leeg is: (i,j,r) = Pop(S); Vervang het symbool a r in de boom door een knoop met kinderen a i en a j 52 Algoritmiek

Voorbeeld op bord Letter a b c d e f Freq % 45 13 12 16 9 5 53 Algoritmiek

Huffman Algoritme is correct: gebruikt greedy / simplificatie Hoeveel tijd: met bijv. een heap kan dit in O(n log n) tijd als we n symbolen hebben in het alfabet 54 Algoritmiek

Conclusies Greedy geeft soms handige snelle algoritmen Bewijs nodig voor optimaliteit Greedy choice property Greedy levert soms geen optimale oplossing, maar wel vaak een heuristiek Soms zelfs met bewijsbare kwaliteit 55 Algoritmiek

Ingredienten voor greedy algoritme Werkt voor optimaliseringsprobleem. Een doelfunctie (objective function) geeft elke oplossing een waarde; we zoeken een oplossing met beste (kleinste/grootste) waarde De oplossingsverzameling wordt incrementeel opgebouwd Functie solution test of de oplossingsverzameling een oplossing is Functie feasible (doenbaar / mogelijk) test of een element aan de oplossingsverzameling toegevoegd kan worden Vaak gebruikt om ondoenbare elementen al te verwijderen Een functie select selecteert het meest veelbelovende element. 56 Algoritmiek