Progra-MEER - Algoritmiek Leuven 20 maart 2018

Vergelijkbare documenten
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

Inleiding Programmeren 2

Inleiding Programmeren 2

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

Divide & Conquer: Verdeel en Heers. Algoritmiek

Divide & Conquer: Verdeel en Heers. Algoritmiek

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

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

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

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

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

Modeluitwerking Tentamen Computationele Intelligentie Universiteit Leiden Informatica Vrijdag 11 Januari 2013

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

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

Examen Datastructuren en Algoritmen II

Datastructuren en algoritmen voor CKI

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

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

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

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

Kortste Paden. Algoritmiek

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

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Tiende college algoritmiek. 26 april Gretige algoritmen

Derde college complexiteit. 7 februari Zoeken

Twaalfde college complexiteit. 11 mei Overzicht, MST

Eerste Huiswerk Algoritmiek 18 februari 2015, uitwisselen, WerkCollege.

Greedy algoritmes. Algoritmiek

Om te kijken of x, y, z samen een driehoek specificeren hoeven we alleen nog maar de driehoeksongelijkheid te controleren: x, y, z moeten voldoen

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

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

Vierde college complexiteit. 14 februari Beslissingsbomen

Examen Algoritmen en Datastructuren III

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

Heuristieken en benaderingsalgoritmen. Algoritmiek

Algoritmiek. 2 februari Introductie

Zomercursus Wiskunde. Module 1 Algebraïsch rekenen (versie 22 augustus 2011)

Elke gelijkenis met bestaande gebeurtenissen en/of personen berust op louter toeval.

Datastructuren en Algoritmen

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

(On)Doenlijke problemen

2 Recurrente betrekkingen

Zomercursus Wiskunde. Katholieke Universiteit Leuven Groep Wetenschap & Technologie. September 2008

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Kortste Paden. Algoritmiek

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

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

Worteltrekken modulo een priemgetal: van klok tot cutting edge. Roland van der Veen

Statistiek voor A.I. College 6. Donderdag 27 September

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

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

8C080 deel BioModeling en bioinformatica

Benaderingsalgoritmen

1.1 Rekenen met letters [1]

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

Derde college algoritmiek. 18 februari Toestand-actie-ruimte

ALGORITMIEK: antwoorden werkcollege 5

Examencursus. wiskunde A. Rekenregels voor vereenvoudigen. Voorbereidende opgaven VWO kan niet korter

Examen Datastructuren en Algoritmen II

Algoritmen aan het werk

Negende college algoritmiek. 15 april Dynamisch Programmeren

Tiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra

Derde college algoritmiek. 23 februari Toestand-actie-ruimte

Oefententamen in2505-i Algoritmiek

Opgaven Eigenschappen van Getallen Security, 2018, Werkgroep.

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

9. Strategieën en oplossingsmethoden

Kansrekening en Statistiek

Derde college algoritmiek. 16/17 februari Toestand-actie-ruimte

RSA. F.A. Grootjen. 8 maart 2002

Vijfde college algoritmiek. 2/3 maart Exhaustive search

Indexen.

1 Complexiteit. of benadering en snel

extra sommen Statistiek en Kans

Examen Datastructuren en Algoritmen II

Amorized Analysis en Union-Find Algoritmiek

String Matching. Algoritmiek

Dynamisch Programmeren III. Algoritmiek

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Minimum Spanning Tree

Een combinatorische oplossing voor vraag 10 van de LIMO 2010

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

algoritmiek - antwoorden

Stoomcursus. wiskunde A. Rekenregels voor vereenvoudigen. Voorbereidende opgaven VWO ( ) = = ( ) ( ) ( ) = ( ) ( ) = ( ) = = ( )

Optimaliseren in Netwerken

Examen Datastructuren en Algoritmen II

Hoofdstuk 8: Algoritmen en Complexiteit

5 Afronden en afkappen

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Automaten en Berekenbaarheid

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

Transcriptie:

Progra-MEER - Leuven 20 maart 2018 Bart Demoen KU Leuven Veerle Fack UGent Frank Neven/Wim Lamotte UHasselt schooljaar 2017-2018

Vandaag... 2/33 waar staan we i.v.m. 24 april? werkblad met twee thema s en af en toe wat Python uitleiding tussendoor: groepsfoto

De werkbladen 3/33 zie werkbladen

3 munten I 4/33 KKK MMK MMM KKM MKM KMM MKK KMK

3 munten II 5/33 def munten(): done, nog = [], [( k, k, k )] while nog!= []: x = nog.pop() done.append(x) n = buren(x) for y in n: if y not in done: nog.append(y) return(( m, m, m ) in done) def buren(x): (a,b,c) = x return([(a,om(b),om(c)), (om(a),b,om(c)), (om(a),om(b),c)]) def om(a): if a == k : return( m ) return( k )

De boer, de wolf, de geit en de kool I 6/33 een graaf met als knopen: wie zit op de linkeroever verbind twee knopen als die overgang mogelijk is zoek pad van bwgk naar de lege knoop

De boer, de wolf, de geit en de kool I 6/33 een graaf met als knopen: wie zit op de linkeroever verbind twee knopen als die overgang mogelijk is zoek pad van bwgk naar de lege knoop

De boer, de wolf, de geit en de kool II 7/33 def bwgk(): b,w,g,k = "boer","wolf","geit","kool" done = [] nog = [[b,w,g,k]] while nog!= []: x = nog.pop() done.append(x) n = buren(nog) for y in n: if y not in done: nog.append(y) return([] in done)

Gemeenschappelijk aan munten en BWGK 8/33 modelleer als grafenprobleem los daarin op bereikbaarheid één programma - lichte varianten merk op: je hoeft de graaf niet helemaal op te stellen voor hoe vraag: het pad bijhouden / kortste pad zoeken...

De gevaarlijke oversteek van de 4 wandelaars I 9/33 modelleer als grafenprobleem een situatie een knoop de tijd van 1 situatie naar de andere is het gewicht van de boog gewicht van de bogen is nu niet constant zoek een pad niet langer dan 17 systematische aanpak? voor kortste pad?

De gevaarlijke oversteek van de 4 wandelaars II 10/33

De gevaarlijke oversteek van de 4 wandelaars III 11/33

De gevaarlijke oversteek van de 4 wandelaars IV 12/33 a en b met z naar overkant: 2 a met z: 1 c en d en z: 10 b en z: 2 a en b: 2

Systematiek in zoeken kortste pad? 13/33 probeer op het werkblad...

intentioneel leeg... 14/33

Verdeel en heers 15/33 de kracht van opdelen en combineren deelproblemen - deeloplossingen onverwachte toepasssingen soms verkeerde verwachtingen algemene idee: deel probleem in twee (of meer) los elk deelprobleem op combineer resultaten met kleine kost

Verdeel en heers 15/33 de kracht van opdelen en combineren deelproblemen - deeloplossingen onverwachte toepasssingen soms verkeerde verwachtingen algemene idee: deel probleem in twee (of meer) los elk deelprobleem op combineer resultaten met kleine kost

Verdeel en heers 16/33 deel probleem in twee (of meer) los elk deelprobleem op combineer resultaten met kleine kost totale kost(n) = 2 totale kost(n/2) + kleine combinatie kost(n) kleine combinatie kost(n) = constant: totale kost(n) = O(log(N)) N: totale kost(n) = O(Nlog(N)) ook mogelijk: totale kost(n) = totale kost(n/2) + kleine combinatie kost(n)

Verdeel en heers 16/33 deel probleem in twee (of meer) los elk deelprobleem op combineer resultaten met kleine kost totale kost(n) = 2 totale kost(n/2) + kleine combinatie kost(n) kleine combinatie kost(n) = constant: totale kost(n) = O(log(N)) N: totale kost(n) = O(Nlog(N)) ook mogelijk: totale kost(n) = totale kost(n/2) + kleine combinatie kost(n)

Verdeel en heers: machten berekenen I 17/33 5 13... met 12 vermenigvuldigingen of minder... de gelijkheden: of a 2n = a n a n a 2n+1 = a a 2n indien n even is: a n = a n/2 a n/2 indien n oneven is: a n = a a n 1 aantal vermenigvuldigingen daalt van n 1 naar log(n)

Verdeel en heers: machten berekenen I 17/33 5 13... met 12 vermenigvuldigingen of minder... de gelijkheden: of a 2n = a n a n a 2n+1 = a a 2n indien n even is: a n = a n/2 a n/2 indien n oneven is: a n = a a n 1 aantal vermenigvuldigingen daalt van n 1 naar log(n)

Verdeel en heers: machten berekenen II 18/33 indien n even is: a n = a n/2 a n/2 indien n oneven is: a n = a a n 1 in Python: nog een basisgeval erbij! def macht(a,n): if n == 1: return(a) if n % 2 == 0: # even n x = macht(a,n//2) return(x*x) else: # oneven n return(a*macht(a,n-1))

Verdeel en heers: machten berekenen III 19/33 nog niet optimaal, maar wel al heel efficiënt optimaliteit vereist dat je een NP-compleet probleem oplost :-( zie https://en.wikipedia.org/wiki/addition_chain

Verdeel en heers: vermenigvuldigen I 20/33 Een voorbeeld: (10a + b) (10c + d) = 100a b + 10(a d + b c) + b d 4 vermenigvuldigingen als de getallen 2 lang zijn voor getallen van n lang, n 2 vermenigvuldigingen plus wat optellingen (kosten weinig) 100 en 10 zijn shifts (kosten weinig) de kost zit in de vermenigvuldigingen kan het met essentieel minder dan n 2 vermenigvuldigingen? Andrey Kolmogorov beweerde van niet zijn student Anatoly Karatsuba verbaasde de wereld

Verdeel en heers: vermenigvuldigen I 20/33 Een voorbeeld: (10a + b) (10c + d) = 100a b + 10(a d + b c) + b d 4 vermenigvuldigingen als de getallen 2 lang zijn voor getallen van n lang, n 2 vermenigvuldigingen plus wat optellingen (kosten weinig) 100 en 10 zijn shifts (kosten weinig) de kost zit in de vermenigvuldigingen kan het met essentieel minder dan n 2 vermenigvuldigingen? Andrey Kolmogorov beweerde van niet zijn student Anatoly Karatsuba verbaasde de wereld

Verdeel en heers: vermenigvuldigen I 20/33 Een voorbeeld: (10a + b) (10c + d) = 100a b + 10(a d + b c) + b d 4 vermenigvuldigingen als de getallen 2 lang zijn voor getallen van n lang, n 2 vermenigvuldigingen plus wat optellingen (kosten weinig) 100 en 10 zijn shifts (kosten weinig) de kost zit in de vermenigvuldigingen kan het met essentieel minder dan n 2 vermenigvuldigingen? Andrey Kolmogorov beweerde van niet zijn student Anatoly Karatsuba verbaasde de wereld

Verdeel en heers: vermenigvuldigen II 21/33 (10a + b) (10c + d) = 100a c + 10(a d + b c) + b d = 100A + 10B + C A = a*c C = b*d B = (a+b)*(c+d) - A - C 3 vermenigvuldigingen ipv 4! iets meer optellingen niet meer n 2 maar n log 2(3) of ongeveer n 1.585 voor getallen van 1000 cijfers, van 1.000.000 naar 60.000

Verdeel en heers: vermenigvuldigen II 21/33 (10a + b) (10c + d) = 100a c + 10(a d + b c) + b d = 100A + 10B + C A = a*c C = b*d B = (a+b)*(c+d) - A - C 3 vermenigvuldigingen ipv 4! iets meer optellingen niet meer n 2 maar n log 2(3) of ongeveer n 1.585 voor getallen van 1000 cijfers, van 1.000.000 naar 60.000

Verdeel en heers: kortste afstand tussen welke twee punten? I 22/33 N punten in het vlak naief algo voor elke paar punten, bereken (euclidische) afstand onthoud de kortste er zijn N (N 1)/2 paren, dus een O(N 2 ) algoritme kan het beter?

Verdeel en heers: kortste afstand tussen welke twee punten? II 23/33 A B verdeel de punten in twee verzamelingen A en B - ongeveer even groot (je wil daarvoor eerst sorteren volgens de x-coordinaat) los (recursief) het probleem op voor A en B neem daarvan het paar met de kortste afstand: lijm nu alles aan elkaar...

Verdeel en heers: kortste afstand tussen welke twee punten? III 24/33 A B enkel nodig om punten binnen de zone te beschouwen: telkens eentje in A en eentje in B binnen die zone liggen bewijsbaar weinig punten resulteert in O(Nlog(N)) ipv O(N 2 )

Verdeel en heers: kortste afstand tussen welke twee punten? III 24/33 A B enkel nodig om punten binnen de zone te beschouwen: telkens eentje in A en eentje in B binnen die zone liggen bewijsbaar weinig punten resulteert in O(Nlog(N)) ipv O(N 2 )

Verdeel en heers: kortste afstand tussen welke twee punten? III 24/33 A B enkel nodig om punten binnen de zone te beschouwen: telkens eentje in A en eentje in B binnen die zone liggen bewijsbaar weinig punten resulteert in O(Nlog(N)) ipv O(N 2 )

Verdeel en heers: zoeken in een geordende rij 25/33 bepaal of een getal in een rij getallen zit als de rij geordend is de rij heeft lengte N dat kunnen jullie? lineair zoeken: O(N) binair zoeken: O(log(N))

Verdeel en heers: zoeken in een geordende rij 25/33 bepaal of een getal in een rij getallen zit als de rij geordend is de rij heeft lengte N dat kunnen jullie? lineair zoeken: O(N) binair zoeken: O(log(N))

Verdeel en heers: een rij van lengte N ordenen van klein naar groot I 26/33 merge-sort def mergesort(l): hulp = l.copy() msort(hulp,l,0,len(l)) def msort(l,hulp,begin,einde): if begin - einde < 2: return midden = (einde - begin)//2 msort(hulp,l,begin,midden) msort(hulp,l,midden+1,einde) merge(l,begin,midden,einde,hulp) altijd Nlog(N)

Verdeel en heers: een rij van lengte N ordenen van klein naar groot I 26/33 merge-sort def mergesort(l): hulp = l.copy() msort(hulp,l,0,len(l)) def msort(l,hulp,begin,einde): if begin - einde < 2: return midden = (einde - begin)//2 msort(hulp,l,begin,midden) msort(hulp,l,midden+1,einde) merge(l,begin,midden,einde,hulp) altijd Nlog(N)

Verdeel en heers: een rij ordenen van lengte N van klein naar groot II 27/33 quick-sort def qsort(l): if len(l) < 2: return split(l,l[0],kleiner,groter) qsort(kleiner) # onvolledig! qsort(groter) # onvolledig! soms O(N 2 ), maar gemiddeld ook Nlog(N)

Verdeel en heers: een rij ordenen van lengte N van klein naar groot II 27/33 quick-sort def qsort(l): if len(l) < 2: return split(l,l[0],kleiner,groter) qsort(kleiner) # onvolledig! qsort(groter) # onvolledig! soms O(N 2 ), maar gemiddeld ook Nlog(N)

Welke is beter? 28/33 quicksort: in-place (uitdaging!) niet stabiel soms slechte O(N 2 ) mergesort: kan niet in-place stabiel altijd O(Nlog(N))

Belangrijk: hoeveel data wordt verplaatst? 29/33 bij sorteren van grote items, beter hun indexen sorteren dan hun waarden [gc, ga, gb] niet aanpassen vertrek van rij indexen [1, 2, 3] gesorteerde rij is bv [2, 3, 1]

Uitleiding I: wat hebben jullie geleerd? hopelijk... 30/33 programmeren = algoritme ontwerpen + coderen coderen is het minste maar bevredigt meest J agis, et puis je réfléchis 1 werkt niet principe van gulzigheid en vb n waar het (niet) werkt dynamisch programmeren een vergelijking vat alle essentie een efficiënte implementatie gebruikt memoing veel problemen modelleren als een probleem van grafen wat verdeel-en-heers voorbeelden bewijzen van correctheid en eindigheid iets over efficiëntie en complexiteit en niet elk probleem heeft een algoritmische oplossing 1 Achilles Van Acker

Uitleiding II: wat nu nog? 31/33 24 april: afsluitende sessie Progra-MEER doe een bijdrage: timing volgt per email poster werkbundel aanwezigheid/interactie schrijf in en breng geïnteresseerden mee vul ook de afsluitende vragenlijst van Google in (zie onze website)

24 april: gevangenis van Hasselt 32/33 samen met jullie collegas die in Gent/Hasselt iets meededen 10.30: onthaal met koffie en koeken Welkomstwoord Kennismaking met de Microbit Moodle platform voor computationeel denken Dodona platform voor Python Dwenguino programmeren 13u00: Walking lunch & Postersessie Robots komen in vrede: een overzicht van artificiële intelligentie Internet of Things: iedereen programmeur Meer Big Data minder storende reclame 15.30: koffie en limburgse taart

Mijn vraag aan jullie... 33/33 Suggesties voor de toekomst?