430 likes | 606 Views
Recreatieve algoritmiek. Gerard Tel, Thomas van Dijk. UKP BAPC NWERC.eu World Finals. 3 personen 5 uur 8+ opgaven. Algoritmische puzzels Snel programmeren. Details kunnen belangrijk zijn. String + String tijd lineair in de lengtes van de strings. (java.lang.String)
E N D
Recreatieve algoritmiek Gerard Tel, Thomas van Dijk
UKP BAPC NWERC.eu World Finals
3 personen 5 uur 8+ opgaven Algoritmische puzzels Snel programmeren
Details kunnen belangrijk zijn • String + String tijd lineair in de lengtes van de strings. • (java.lang.String) • String total = “”;for( String s : myStrings ) total = total + s; • Kost kwadratische tijd! • Gebruik toepasselijke streams/buffers, bijv StringBuilder.
Geheugenbeheer Heap(new) Allocaties zijn duur Veel ruimte Vrij te referencen Garbage collection Stack Allocaties zijn goedkoop Beperkte ruimte Beperkte scope
Comments • Goede comments zijn moeilijk. • Veel is niet per se goed. • Gaat om leesbaarheid / begrijpbaarheid. • “Als de code en de comments elkaar tegenspreken, zijn ze waarschijnlijk allebei fout.”
Datastructuren: • Zoekbomen • Prio queue • Binary search Linear programming Max flow / matching Tries Spanning trees Korste paden Dynamisch programmeren Lin. time order statistics Divide & conquer NP-volledigheid Greedy Amortizedanalyse Approximatie Randomisering
Discodrukte • Persoon i komt op tijd si en gaat op tijd fi. • Hoeveel mensen waren er maximaal tegelijk binnen?
Discodrukte • Persoonikomtbinnen op tijdsi en gaat op tijdfi. • Hoeveelmensenwarenermaximaaltegelijkbinnen? Sorteers en f Tegelijkdoorlopenals in een ‘merge’ Lopend maximum bijhouden
Taarten snijden • Er komen n vrienden op bezoek. • Er zijn k taarten, met omvang ri. Verder identiek. • Iedereen krijgt 1 stuk uit 1 taart. • Iedereen krijgt evenveel taart. • Grootst mogelijke stuk taart?
Taarten snijden Elegante greedy oplossing met prio queue. • Grootstmogelijkestuktaart? Haalbaarheid van eenbepaaldegroottetriviaaltecontroleren. Binary search! (Alert: specs vermeldtprecisie)
Verhuizen • Dozen moeten naar verdieping N • m personen • Staan op verdieping ai, al dan niet met doos • Er staan nog k dozen op de begane grond • De trap is smal: • Mensen kunnen elkaar niet passeren • Kan wel op de trap een doos doorgeven • Hoe lang duurt het voordat alle dozen boven zijn?
Verhuizen het gaat om de dozen! Antwoord makkelijk te bepalen met simulatie, maar
Maanspullen • Ruimteschip naar de maan • Objecten verzamelen • Opbrengst • Gewicht • Tijd nodig om in te laden • Ruimteschip kan max gewicht W vervoeren • Er is maar beperkte tijd T voor inladen • Welke objecten neem je mee voor opt opbrengst?
Maanspullen • Ruimteschipnaar de maan • Objectenverzamelen • Opbrengst • Gewicht • Tijdnodigom in te laden • Ruimteschipkan max gewichtW vervoeren • Er is maar beperktetijdT voorinladen • Welkeobjectenneem je meevoor opt opbrengst? Knapsack!
Vrij korte paden • Tour operator Amsterdam-Brussel. • Klant mag route kiezen; gewogen graaf. • Maar geen grote omweg: alleen kortste pad of 1 langer. • Hoeveel mogelijke routes?
Vrij korte paden • (…) kortste pad of 1 langer. Dijkstra aanpassen? • Hoeveel mogelijke routes? Wellicht dynamisch programmeren: kan ‘meestal’ uitgebreid worden om te tellen.
Vrij korte paden Dijkstraaanpassen? Dynamischprogrammeren over die graaf. Volgorde? Misschien elegant, maar … teveel details. GewoneDijkstraomlengtekortste pad tebepalen. Recursiefaantalpadentellen:Aantalpaden van lengtekdat in knoopvuitkomt,met de extra stap al wel/nietgenomen. Memoisatie.
Schaduwen • Lichtbron op punt p. • Lijnstukken van punt ai naar bi. • Beschouw de schaduw op de lijn y=0. • Hoeveel aaneengesloten stukken schaduw? • Of: totale lengte van schaduw
Schaduwen • Lichtbron op punt p. • Lijnstukken van punt ai naar bi. • Beschouw de schaduw op de lijn y=0. • Hoeveel aaneengesloten stukken schaduw? • Of: totale lengte van schaduw
Schaduwen • Lichtbron op punt p. • Lijnstukken van punt ai naar bi. • Beschouw de schaduw op de lijn y=0. • Hoeveel aaneengesloten stukken schaduw? • Of: totale lengte van schaduw 0 1 0 1 2
Penguin bashing • Een Yeti slaat met een knuppel een pinguïn • Slaat pinguïn onder te kiezen hoek (-90 ... 90 graden) • Gegeven mechanica: zwaartekracht, wrijving, etc. • Bommen: pinguïn wordt verder gelanceerd. • Valkuilen: pinguïn verloren. • Welke integer hoek brengt de penguïn het verst?
Penguin bashing • Een Yeti slaat met eenknuppeleenpinguïn • Slaatpinguïnondertekiezenhoek (-90 ... 90 graden) • Gegevenmechanica: zwaartekracht, wrijving, etc. • Bommen: pinguïnwordtverdergelanceerd. • Valkuilen: pinguïnverloren. • Welke integer hoekbrengt de penguïn het verst? 182 is weinig. Voorgegevenhoek: gewoondoorrekenen.
Penguin bashing vs taart snijden • Bij het taartsnijden is de JA/NEE beslissing monotoon(als stuk s niet kan, dan groter stuk ook niet) • Binary search! • Bij penguin bashing onvoorspelbaar • Brute force
Rookverbod • Ruimtes in een restaurant, verbonden met deuropeningen. • Aangegeven ruimtes: Ingang en Keuken. • Partitioneer het restaurant met rooksluizen in aaneengesloten “rokers-” en “niet-rokersgebieden”. • De Ingang is rokersgebied. • De Keuken is niet-rokersgebied. • Hoeveel rooksluizen zijn er minimaal nodig?
Rookverbod • Ruimtes in een restaurant, verbonden met deuren. Eengraaf, uiteraard. • De Ingang is rokersgebied. • De Keuken is niet-rokersgebied. • Hoeveelrooksluizenzijnerminimaalnodig? ScheidIngang en Keuken met zo min mogelijkkanten. Datprobleemheet Min Cut = Max Flow!
Priem kamernummers • Alle kamernummers zijn 4-cijferige priemgetallen. • Kamernummer p moet veranderd worden in q, ook priem. • Kamernummer kan alleen per cijfer veranderd worden. • Alle tussenstappen moeten ook priem zijn. • Kan dit? Minst aantal stappen?
Priem kamernummers • 4-cijferige priemgetallen. Zijnernietveel van. KNOPEN (Zeker <10k. Hm. 10k/ln(10k), ~1000) Mag van de eennaar de anderals 1 cijferverschil. KANTEN • Minstaantalstappen? Korste pad in ongewogengraaf: BFS.
Chip routing • Gigantisch grid N x N • k “input” en “output” punten op de rand. • Verbind input i met output i over de grid. • Paden mogen elkaar niet kruisen. • Is dat mogelijk in de gegeven instantie?
Chip routing • Verbind input i met output i over de grid. • Paden mogen elkaar niet kruisen. Klinkt als (node capacity) flow • Gigantisch grid N x N Maar niet letterlijk op de grid… … simplificatie?
Chip routing • Is dat mogelijk in de gegeven instantie? Hoeft niet constructief! Greedy:beschouw de randals corresponderende in/outputnaast elkaar: weghalenals geen: instantie onmogelijk
Mixtape • Verzameling van k nummers voor een mixtape (k~20). • Sommige nummers passen beter na elkaar dan anderen. • Kwaliteit van nummer i na j is cij. • Beste volgorde?
Mixtape • Verzameling van k nummers voor een mixtape (k~20). 20 is erg weinig. • Beste volgorde? Brute force geeft 20! mogelijkheden, ~ 2.4x1018. Toch erg veel.
Mixtape • Kwaliteit van nummer i na j is cij. • Beste volgorde? Klinkt een beetje als Traveling Salesman Problem (“TSP”). Volgorde-problemen kunnen soms in O*( 2n ) tijd met dynamisch programmeren. “Beste score voor deelverzameling S van de nummers, eindigend op nummer i” 220 ~ 1 miljoen
Pinguïnvergadering • n ijsschotsen. • pi pinguïns op schots i. • Gegeven is van welke schots je naar welke andere kan springen. • Landen op een schots doet schade:kan maar si keer, dan is de schots weg. • Kunnen de pinguïns verzamelen op 1 schots?
Pinguïnvergadering • Gegeven is van welke schots je naar een andere kan springen. • (…) verzamelen op 1 schots? Iets met een graaf / paden. • Landen op een schots doet schade:kan maar si keer, dan is de schots weg. Node capacity flow Gok vergaderschots