Datastructuren college 10
|
|
|
- Nathan van Dijk
- 9 jaren geleden
- Aantal bezoeken:
Transcriptie
1 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen hier verwerpen we een kandidaat permutatie zodra we keer hetzelfde element tegenkomen. je verwerpt dan in een klap alle voortzettingen scheelt veel werk backtracking: depth-first zoeken algemeen backtrack algoritme niet alle kandidaten hoeven even lang te zijn. rr r br b r b r r br b r We hoeven de boom niet echt te bouwen: doorloop boom depth-first: eerst kinderen, daarna broers en zussen kinderen van links naar rechts bijhouden van huidige pad + te onderzoek voortzettingen is voldoende begin met lege deeloplossing voegtoe ( i ) if (klaar) meld_succes; else for ( alle_voortzettingen ) voeg_toe_aan_deeloplossing; if ( past ) voegtoe (i+); haal_uit_deeloplossing; kan ook met extra functie het eigenlijke backtracken kan ook impliciet zijn 4
2 alternatief backtrack algoritme kortste pad van muis naar kaas begin met lege deeloplossing voegtoe ( i ) if (klaar) meld_succes; else for ( alle_voortzettingen ) deze staat nu if ( past ) binnen de conditie voeg_toe_aan_deeloplossing; voegtoe (i+); haal_uit_deeloplossing; 5 we willen niet alle oplossingen, maar de lengte van het kortste pad muis van niks, weet pas of er kaas is als hij er op staat zoek oplossingen met backtracken ommuur doolhof om testen op binnen doolhof blijven te voorkomen kortste pad kan geen cycle bevatten! plaats muizen op het pad om cycles te voorkomen 6 kortste pad representatie kortste pad algoritme normaal: pad = <V 0, V, V k-, V k- > met V 0 is beginpunt (muis) V k- is eindpunt (kaas) Voor alle i: V i en V i- grenzen aan elkaar we zoeken het kortste van die paden kortste pad ieder veld hoogstens keer voor hier bouwen we het pad in de doolhof vinden van buren is eenvoudig voorkomen van cycles door merken van velden geen extra geheugen nodig backtrack-functie levert afstand tot kaas op 7 maak met behulp van backtracking alle mogelijke paden (begin bij muis, geen cycles) functieresultaat is afstand tot de kaas int afstand ( veld ) if ( op eindpunt ) return 0; else if ( veld is vrij ) // de test! bezet veld; // voorkomt cycles in pad bepaal minimum afstand vanaf alle buren; maak veld vrij; // backtrack stap return minimum + ; else return oneindig; 8
3 kortste pad: C++ representatie enum Veld Vrij, Muis, Kaas, Muur ; const int Lengte = 8, Breedte = 7; const int Oneindig = Lengte * Breedte; Veld doolhof [ Breedte ] [ Lengte ] = Muur, Muur, Muur, Muur, Muur, Muur, Muur, Muur, Vrij, Vrij, Vrij, Muur, Vrij, Muur, Muur, Vrij, Muur, Vrij, Muur, Vrij, Muur, Muur, Vrij, Vrij, Vrij, Vrij, Vrij, Muur, Muur, Vrij, Vrij, Vrij, Muur, Vrij, Muur, Muur, Kaas, Muur, Vrij, Vrij, Vrij, Muur, Muur, Vrij, Muur, Vrij, Vrij, Vrij, Muur, Muur, Muur, Muur, Muur, Muur, Muur, Muur ; 9 kortste pad algoritme in C++ int kortstepad ( int x, int y ); // voor mutual recursion int stuurmuizenvanaf ( int x, int y ) int min_weg = kortstepad ( x+, y ); min_weg = min (min_weg, kortstepad ( x, y+ )); min_weg = min (min_weg, kortstepad ( x-, y )); return min (min_weg, kortstepad ( x, y- )); int kortstepad ( int x, int y ) switch ( doolhof [ x ] [ y ]) case Kaas: return 0; case Vrij: // de test! doolhof [ x ] [ y ] = Muis; int min_weg = stuurmuizenvanaf ( x, y ); doolhof [ x ] [ y ] = Vrij; // backtrack stap return min_weg + ; default: return Oneindig; i.p.v. for-loop 0 kortste pad programma int main ( ) cout << kortstepad ( 6, 4 ) << endl; system("pause"); return EXIT_SUCCESS; resultaat is 6 correct, maar niet erg informatief we willen graag het pad zelf kennen probleem: op het moment dat we het kortste pad vinden weten we niet dat dit zo is. oplossingen: alle paden bewaren: duur en onnodig kortste pad afdrukken met normaal backtrack algoritme vinden we alle oplossingen hoe vinden we het kortste? bewaar kortste tot nu toe ( ktnt ) i.p.v. meldsucces nieuwe oplossing korter dan ktnt? zo ja: ktnt = nieuwe oplossing als je alles geprobeerd hebt is ktnt de kortste! kortste pad tot nu toe bewaren
4 kortste pad afdrukken globale object kortste pad lengte kortste tot nu toe als reference argument geef huidige lengte mee zodat je weet of je iets beters gevonden hebt. void kortstepad ( veld, lengte, int& kortste ) if ( op eindpunt ) if ( lengte < kortste ) kortste = lengte; // beter pad gevonden kopieerpad ( ); else if ( veld is vrij ) // de test! bezet veld; // voorkomt cycles in pad kortstepad vanaf alle buren ( lengte+ ); maak veld vrij; // backtrack stap kortste pad printen in C++ void kortsteweg ( int x,int y, int lengte, int& kortste ) switch ( doolhof [ x ][ y ]) case Kaas: if ( lengte < kortste ) // koter pad? kortste = lengte; copyweg ( ); return; i.p.v. case Vrij: // de test! for-loop doolhof [ x ][ y ] = Muis; muizenvanaf ( x, y, lengte+, kortste ); doolhof [ x ][ y ] = Vrij; // backtrack stap return; default: return; 4 muizen vanaf de buren void muizenvanaf ( int x, int y, int lengte, int& kortste ) kortsteweg ( x+, y, lengte, kortste ); kortsteweg ( x, y+, lengte, kortste ); kortsteweg ( x-, y, lengte, kortste ); kortsteweg ( x, y-, lengte, kortste ); by reference argument: zelfde effect als globale variabele, maar mooier int main ( ) int kortste = Oneindig; kortsteweg ( 4, 6, 0, kortste ); if ( kortste < Oneindig ) cout << "De lengte van de korste weg is " << kortste << endl; toonweg ( weg ); else cout << "Geen weg gevonden\n"; toonweg ( doolhof ); system("pause"); return EXIT_SUCCESS; 5 korste pad: oplossing ##################### ### ### ### ### ### ### ### ### @ ### ### ### ### ### ### ##################### wat iedereen binnen 0 seconden al gezien had 6 4
5 op de zelfde manier magische vierkanten in zo min mogelijk zetten met een paard op een schaakbord van een positie naar een andere vind een rondgang van het paard op het schaakbord zodat alle posities bezocht worden. 7 vierkant van N bij N bevat getallen van 0N -, of N som van alle rijen en kolommen is gelijk soms ook de som van de diagonaal gelijk oplossing oplossing magische vierkanten met backtracking N bij N vierkant is matrix int[n][n] met een beetje moeite kunnen we de som van de rijen en kolommen uitrekenen +++(m-)+m = m*(m+)/ hier m = N - er bestaan betere algoritmen dan backtracking! dus totale som (N -)*(N -+)/ voor iedere rij/kolom is de som dus (N -)*N/ vul kolom voor kolom kijk of som nog steeds kan passen gebruik bool vrij[nn] om te kijken of getallen vrij zijn 9 magische vierkanten in C++ const int N = ; const int NN = N*N; const int SOM = (NN-)*N/; int main ( ) int m [ N ] [ N ]; bool vrij [ NN ]; for ( int i=0; i<nn; i+= ) vrij [ i ] = true; vul ( 0, 0, m, vrij, 0 ); system("pause"); return EXIT_SUCCESS; 0 5
6 vullen in C++ void vul( int i, int j, int m [N][N], bool vrij [NN], int s ) if ( j==n ) // vierkant vol? som in print ( m ); kolom else if ( i==n && s==som ) // kolom vol en som klopt? vul ( 0, j+, m, vrij, 0 ); else if ( i<n ) // nog wat toevoegen aan kolom? for ( int n=0; n<nn; n+= ) if ( vrij[n] && s+n<=som ) // n vrij en past hier? waar kijken we vrij [ n ] = false; naar de rijen? m [ i ][ j ] = n; vul ( i+, j, m, vrij, s+n ); // recursie vrij [ n ] = true; // backtrack stap vullen in C++ void vul ( int i, int j, int m [N][N], bool vrij [NN], int s ) if ( j==n ) print ( m ); bool klopt ( int m [N][N], int i ) else if ( i==n && s==som ) vul ( 0, j+, m, vrij, 0 ); int s=0; else if ( i<n ) for ( int j=0; j<n; j+= ) for ( int n=0; n<nn; n+= ) s += m [ i ][ j ]; if ( vrij[n] && s+n<=som ) return s==som; vrij [ n ] = false; m [ i ][ j ] = n; if ( j<n- klopt ( m, i )) vul ( i+, j, m, vrij, s+n ); vrij[n] = true; kan dit slimmer? representatie deeloplossing kortste pad analyse globale rij waar we oplossing in bouwen permutaties, n-queens één globaal bord/wereld waar we oplossing in bouwen muis in doolhof, kortste pad paard op schaakbord soms rij van borden nodig schaakspel, 5 puzzel Algemeen voor backtrack algoritmen: O(V L ) V aantal mogelijkheden L langst mogelijke pad niet beter dan brute force; effect afsnijden sub-bomen is onzeker Voor muis in doolhof: V = Lengte * Breedte n L = Lengte * Breedte n complexiteit = O(V L ) door slim te genereren: O( L ) = O( Lengte*Breedte ) dergelijke heuristieken helpen dus echt door afsnijden sub-bomen met predikaat valt hoeveelheid werk vaak nog wel mee 4 6
7 kanoën waar gebeurd: soldaten moeten een brede rivier oversteken kleine jongentjes willen wel helpen met hun kano maar, in de kano kunnen of kinderen, of soldaat dus niet soldaten, of soldaat + kind de oplossing is niet moeilijk, maar we gaan met backtracking een oplossing zoeken backtrack kanoën oplossing is een rijtje van die situaties klasse kant met: aantal jongens hier aantal soldaten hier kant van de kano methoden voor: is klaar? kan over varen? vaar over constructor 5 6 const int Begin = ; enum InBoot J, JJ, S ; enum Kano Hier, Daar ; class Kant public: int jongens; int soldaten; Kano kano; klasse kant Kant ( ): jongens ( Begin ), soldaten ( Begin ), kano ( Hier ) ; bool klaar ( ) return soldaten==0 && jongens==begin && kano==hier; ; bool kan ( InBoot i ); void vaar ( Kant& naar, InBoot i ); ; 7 de methode kan bool Kant :: kan ( InBoot i ) if ( kano==hier ) switch ( i ) case J: return jongens >0; case JJ: return jongens >; case S: return soldaten>0; else // kano==daar switch ( i ) case J: return Begin-jongens >0; case JJ: return Begin-jongens >; case S: return Begin-soldaten>0; 8 7
8 methode vaar void Kant :: vaar ( Kant& naar, InBoot i ) if ( kano==hier ) naar.kano = Daar; &! switch ( i ) case J: naar.jongens = jongens-; naar.soldaten = soldaten ; return; case JJ:naar.jongens = jongens-; naar.soldaten = soldaten ; return; case S: naar.jongens = jongens ; naar.soldaten = soldaten-; return; else. 9 uitvoer operator << ostream& operator << (ostream& os, Kant k) return os << "Kant: Jongens " << k.jongens << " soldaten " << k.soldaten << ", daar: Jongens " << begin-k.jongens << " soldaten " << begin-k.soldaten << (k.kano==hier?" kano is hier\n":" kano is daar\n"); 0 backtracken voor kortste oplossing nodig: huidig pad en beste tot nu toe + lengte const int MaxPad = 0*Begin; // kies iets dat zeker lang genoeg is Kant pad [ MaxPad ]; Kant kortste [ MaxPad ]; int lengte = MaxPad; // ktnt: pad // ktnt: lengte bewaren van huidige pad in beste tot nu toe: void bewaar ( int l ) lengte = l; for ( int i=0; i<=l; i+= ) kortste [ i ] = pad [ i ]; toevoegen void voegtoe ( int i ) assert ( i<maxpad- ); if ( pad [ i ]. klaar ( ) ) if ( i < lengte ) bewaar ( i ); type conversie else for ( InBoot ib=j; ib<=s; ib = InBoot ( ib+ ) ) if ( pad [ i ]. kan ( ib ) ) pad [ i ]. vaar ( pad [ i+ ], ib ); voegtoe ( i+ ); // backtrack stap is impliciet 8
9 resultaat: programma uitvoeren Assertion failed: i<maxpad- hoe kan dit?? cycle jongentje blijft heen en weer roeien wat doen we eraan? testen op nieuwe situatie kortste pad kan nooit keer dezelfde toestand bevatten andere mogelijkeheid: bovengrens op lengte pad void voegtoe ( int i ) assert ( i<maxpad- ); if ( pad[i].klaar() ) if ( i<lengte ) bewaar ( i ); else for ( InBoot ib=j; ib<=s; ib = InBoot ( ib+ ) ) if ( pad[i].kan( ib ) ) pad[i].vaar ( pad[i+], ib ); if ( isnieuw ( i ) ) voegtoe( i+ ); // backtrack toevoegen e poging 4 resultaat 0: Kant: Jongens soldaten, daar: Jongens 0 soldaten 0, kano is hier : Kant: Jongens 0 soldaten, daar: Jongens soldaten 0, kano is daar : Kant: Jongens soldaten, daar: Jongens soldaten 0, kano is hier : Kant: Jongens soldaten, daar: Jongens soldaten, kano is daar 4: Kant: Jongens soldaten, daar: Jongens 0 soldaten, kano is hier 5: Kant: Jongens 0 soldaten, daar: Jongens soldaten, kano is daar 6: Kant: Jongens soldaten, daar: Jongens soldaten, kano is hier 7: Kant: Jongens soldaten 0, daar: Jongens soldaten, kano is daar 8: Kant: Jongens soldaten 0, daar: Jongens 0 soldaten, kano is hier ga na dat dit een correcte oplossing is programma werkt ook voor andere Begin waarden resultaat Begin = 0: Kant: Jongens soldaten, daar: Jongens 0 soldaten 0 kano is hier : Kant: Jongens soldaten, daar: Jongens soldaten 0 kano is daar : Kant: Jongens soldaten, daar: Jongens soldaten 0 kano is hier : Kant: Jongens 0 soldaten, daar: Jongens soldaten 0 kano is daar 4: Kant: Jongens soldaten, daar: Jongens soldaten 0 kano is hier 5: Kant: Jongens soldaten, daar: Jongens soldaten kano is daar 6: Kant: Jongens soldaten, daar: Jongens soldaten kano is hier 7: Kant: Jongens 0 soldaten, daar: Jongens soldaten kano is daar 8: Kant: Jongens soldaten, daar: Jongens soldaten kano is hier 9: Kant: Jongens soldaten, daar: Jongens soldaten kano is daar 0: Kant: Jongens soldaten, daar: Jongens soldaten kano is hier : Kant: Jongens soldaten 0, daar: Jongens soldaten kano is daar : Kant: Jongens soldaten 0, daar: Jongens 0 soldaten kano is hier kan het net zo snel met jongens en soldaten? 5 6 9
10 reflectie void voegtoe ( int i ) assert ( i<maxpad- ); if ( pad[i].klaar() ) is het wel nodig om hier if ( i<lengte ) een abort te doen? bewaar(i); else for ( InBoot ib=j; ib<=s; ib = InBoot (ib+) ) if ( pad[i].kan(ib) ) pad[i].vaar ( pad[i+], ib ); if ( isnieuw ( i ) ) voegtoe( i+ ); // backtrack 7 void voegtoe ( int i ) if ( pad[i].klaar() ) if ( i<lengte ) bewaar(i); else if ( i<maxpad- ) for ( InBoot ib=j; ib<=s; ib = InBoot (ib+) ) if ( pad[i].kan(ib) ) zonder abort pad[i].vaar ( pad[i+], ib ); if ( isnieuw ( i ) ) voegtoe( i+ ); // backtrack is die nog echt nodig? Nee, maar wel verstandig om takken snel af te snijden 8 op de zelfde manier boer, geit, kool en wolf kannibalen en missionarissen. 9 heuristieken Archimedes: Eureka! slimme vondsten representatie van de toestand n-queens: rij van kolomen i.p.v. heel bord volgorde van nieuwe elementen in voegtoe eerste koningin op eerste helft van de velden afbreken van het zoeken er zit een cycle in het pad herkennen dat we hier al zijn geweest we hebben de gespiegelde toestand al gezien herkennen dat het niets meer zal worden we hebben al een kortere oplossing gezien. maken backtracking vaak net bruikbaar 40 0
11 moeten we backtracken? alleen als je geen beter algoritme weet: O(n L ) breadth-first zoeken is vaak sneller, maar kan veel administratie vergen breadth-first: doorzoek heel niveau voordat je naar kinderen kijkt. muis in doolhof breadth-first idee: merk alle velden met afstand tot de kaas op veld van de kaas is afstand 0 op alle buren is afstand op buren van veld met n is afstand hoogstens n+ Analyse: buren van veld met afstand n vinden en merken: O(Lengte*Breedte) = O(n ) = O(V) Alle L velden merken: O(L * V) = O(n 4 ) Onthouden wat te merken veld vinden in O() totaal L * O() = O(L) = O(n )!! 4 4 breadth-first doolhof breadth-first doolhof const int Muur=-, Kaas=0, Vrij=Oneindig; void vuldoolhof ( ) bool gevonden = true; // er is een veld met afstand n void merkveld ( int i, int j, int n ) if ( doolhof[i][j] > n ) doolhof[i][j] = n; in het begin alles Oneindig (groot) for ( int n=0; gevonden ;n++ ) gevonden = false; for ( int i = 0; i < Lengte; i++ ) iets slimmer dan n<lengte*breedte for ( int j = 0; j < Breedte; j++ ) if ( doolhof[i][j]==n ) // er is een veld op afstand n void merkvelden ( int i, int j, int n ) merkveld ( i+, j, n ); merkveld ( i-, j, n ); merkveld ( i, j+, n ); merkveld ( i, j-, n ); merkvelden ( i, j, n+ ); gevonden = true; 4 44
12 breadth-first doolhof void toonweg ( ) for ( int i = 0; i < Lengte; i++ ) for ( int j = 0; j < Breedte; j++ ) switch ( doolhof [i][j] ) case Vrij: cout << " "; break; case Muur: cout << "###"; break; default: cout << setw() << doolhof[i][j] << ' ';break; cout << endl; 45 breadth-first doolhof resultaat ##################### ### ### 8 ### ### ### 5 ### 7 ### ### ### ### ### 7 ### ### 0 ### ### ### ### ### ##################### kortste weg van ieder punt direct af te lezen door aanpassen doolhof is administratie klein met bijhouden velden (queue) gaat het nog beter denk twee keer na voor je gaat programmeren!! reflectie is belangrijk!!! 46 Wat hebben we gedaan dictaat: H boek: backtracking komt niet voor Zoeken van oplossingen: in principe boom van oplossingen depth-first: bouw steeds één tak; rij i.p.v. boom brute force: bouw complete kandidaat-oplossing test of kandidaat-oplossing voldoet backtrack: test bij iedere toevoeging of het nog wat kan worden Opgave: weer backtracking 47
Verslag Opdracht 4: Magische Vierkanten
Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten
ALGORITMIEK: antwoorden werkcollege 5
1 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit
ALGORITMIEK: antwoorden werkcollege 5
ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit
Datastructuren: stapels, rijen en binaire bomen
Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)
definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten
recursieve datastructuren college graphs definities Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten E edges, arcs, kanten, pijlen, lijnen verbinding tussen knopen Voorbeelden steden en verbindingswegen
Programmeermethoden. Recursie. week 11: november kosterswa/pm/
Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,
Uitwerking tentamen Algoritmiek 9 juli :00 13:00
Uitwerking tentamen Algoritmiek 9 juli 0 0:00 :00. (N,M)-game a. Toestanden: Een geheel getal g, waarvoor geldt g N én wie er aan de beurt is (Tristan of Isolde) b. c. Acties: Het noemen van een geheel
Uitwerking tentamen Algoritmiek 10 juni :00 13:00
Uitwerking tentamen Algoritmiek 10 juni 2014 10:00 13:00 1. Dominono s a. Toestanden: n x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal X gelijk aan het aantal O of hooguit één hoger.
Een eenvoudig algoritme om permutaties te genereren
Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden
Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/
Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,
Tweede college algoritmiek. 12 februari Grafen en bomen
College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)
Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search
Algoritmiek 2018/Toestand-actie-ruimte Vierde college algoritmiek 2 maart 2018 Toestand-actie-ruimte Exhaustive Search 1 Algoritmiek 2018/Toestand-actie-ruimte Kannen Voorbeeld 4: Kannenprobleem We hebben
Zesde college algoritmiek. 9/10 maart Backtracking. Verdeel en Heers
Zesde college algoritmiek 9/10 maart 2017 Backtracking Verdeel en Heers 1 Backtracking Bij veel problemen gaat het erom een element met een speciale eigenschap te vinden binnen een ruimte die exponentieel
Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur
Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, 10.00 13.00 uur Opgave 1. a. Een toestand wordt bepaald door: het aantal lucifers op tafel, het aantal lucifers in het bezit van Romeo,
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Hoe een TomTom een sudoku oplost
Hoe een TomTom een sudoku oplost dr. Arnold Meijster [email protected] Palindromen Opdracht: Ga van een willekeurig woord na, of het een palindroom is of niet. lol pop lepel negen droomoord parterretrap
colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser
colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Datastructuren: stapels, rijen en binaire bomen
Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:
Recapitulatie: Ongeïnformeerd zoeken. Zoekalgoritmen ( ) College 2: Ongeïnformeerd zoeken. Dynamische breadth-first search
Recapitulatie: Ongeïnformeerd zoeken Zoekalgoritmen (009 00) College : Ongeïnformeerd zoeken Peter de Waal, Tekst: Linda van der Gaag een algoritme voor ongeïnformeerd zoeken doorzoekt de zoekruimte van
Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing
Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen
Practicumopgave 3: SAT-solver
Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel
Algoritmiek. 15 februari Grafen en bomen
Algoritmiek 15 februari 2019 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices) en E een verzameling van
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Uitwerking tentamen Analyse van Algoritmen, 29 januari
Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4
SPOJ oplossingen Gilles Callebaut 7 augustus 2015
SPOJ oplossingen 2012-2013 Gilles Callebaut 7 augustus 2015 DISCLAIMER Oefeningen zijn niet altijd correct of optimaal. Gelieve de oefeningen enkel te gebruiken ter ondersteuning. Van kopiëren leer je
9. Strategieën en oplossingsmethoden
9. Strategieën en oplossingsmethoden In dit hoofdstuk wordt nog even terug gekeken naar alle voorgaande hoofdstukken. We herhalen globaal de structuren en geven enkele richtlijnen voor het ontwerpen van
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011
15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree
Programmeermethoden. Controle-structuren. Walter Kosters. week 3: september kosterswa/pm/
Programmeermethoden Controle-structuren Walter Kosters week 3: 17 21 september 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleveren opgave 1 Inleveren: digitaal clintonobama1.cc en print van mooi.pdf.
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Uitgebreide uitwerking Tentamen Complexiteit, juni 2017
Uitgebreide uitwerking Tentamen Complexiteit, juni 017 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.
NAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
Derde college algoritmiek. 16/17 februari Toestand-actie-ruimte
Derde college algoritmiek 16/17 februari 2017 Toestand-actie-ruimte 1 Toestand-actie-ruimte Probleem Toestand-actie-ruimte Een toestand-actie-ruimte (toestand-actie-diagram, state transition diagram, toestandsruimte,
Programmeermethoden. Arrays. Walter Kosters. week 7: oktober kosterswa/pm/
Programmeermethoden Walter Kosters week 7: 15 19 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Nonogrammen Japanse puzzels (Nonogrammen) zien er zo uit: 1 1,1 1 1,1 1 0 1,1 0 1,1 3 7 7 7 7 7 7
Objectgericht Programmeren. (in Python)
Objectgericht Programmeren (in Python) Motivatie Programmeren is moeilijk Waarom? Complexiteit 100 200 300 400 500 kloc (1000 lijnen code) g1 = raw_input("eerste getal?") g2 = raw_input("tweede getal?")
software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies
software constructie recursieve datastructuren college 15 software engineering highlights 1 de software bestaat uiteindelijk uit datatypen functies verbindingen geven gebruik aan main is de top van het
Informatica: C# WPO 10
Informatica: C# WPO 10 1. Inhoud 2D arrays, lijsten van arrays, NULL-values 2. Oefeningen Demo 1: Fill and print 2D array Demo 2: Fill and print list of array A: Matrix optelling A: Matrix * constante
Tentamen Programmeren in C (EE1400)
TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code
Algoritmiek. 2 februari Introductie
College 1 Algoritmiek 2 februari 2017 Introductie 1 Introductie -1- docent: Rudy van Vliet [email protected] assistent werkcollege: Bart van Strien [email protected] website: http://www.liacs.leidenuniv.nl/~vlietrvan1/algoritmiek/
Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
Doorzoeken van grafen. Algoritmiek
Doorzoeken van grafen Algoritmiek Vandaag Methoden om door grafen te wandelen Depth First Search Breadth First Search Gerichte Acyclische Grafen en topologische sorteringen 2 Doolhof start eind 3 Depth
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
extra oefening algoritmiek - antwoorden
extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.
Derde college algoritmiek. 18 februari Toestand-actie-ruimte
Derde college algoritmiek 18 februari 2016 Toestand-actie-ruimte 1 BZboom: zoeken Na het bomenpracticum 60 20 80 10 40 70 100 1 15 30 75 5 25 35 2 BZboom: verwijderen 60 20 80 10 40 70 100 1 15 30 75 5
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10
CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel
Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3
Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3 Koen Rutten, Aris van Dijk 30 mei 2007 Inhoudsopgave 1 Verzamelingen 2 1.1 Definitie................................ 2 1.2 Eigenschappen............................
Tiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS
Algoritmiek 2016/Dynamisch Programmeren Tiende college algoritmiek 14 april 2016 Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS 1 Algoritmiek 2016/Dynamisch Programmeren Houtzaagmolen
Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)
Planning 1. Mini College 2. Introductiecursus Imperatief Programmeren 3. Crash and Compile (vanaf 17:00 uur) Geschiedinis van de Codemonkeys imperatief programmeren voor beginners Geschiedenis van de Codemonkey
Minimum Opspannende Bomen. Algoritmiek
Minimum Opspannende Bomen Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee greedy algoritmen + tijd en datastructuren: Het algoritme van
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,
Programmeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
Syntax- (compile), runtime- en logische fouten Binaire operatoren
Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle
Deze actie kadert binnen het project SOLABIO-'Soorten en landschappen als dragers voor biodiversiteit', mede gefinancierd door het Europees programma
!"#" $% #!&'!()!!$% *!$ + ), -!. /!& $ 0 ( 1 & & $ $ 1 ( #!& #!& #!& &% 2/3*""4 $$%/"32"4 5 ) 66 &. ) #!& ) 7 &, 89 8.9,7 !!:%$ " # $ # % $ & $ ;!!! $!:%$ 1!!! 0 0!!! ;, *!$ *!# + ; *! *!* *!-
Negende college algoritmiek. 15 april Dynamisch Programmeren
Negende college algoritmiek 15 april 2016 Dynamisch Programmeren 1 algemeen Uit college 8: DP: - nuttig bij problemen met overlappende deelproblemen - druk een oplossing van het probleem uit in oplossingen
2 Recurrente betrekkingen
WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen
Datastructuren en Algoritmen
Datastructuren en Algoritmen Tentamen Vrijdag 6 november 2015 13.30-16.30 Toelichting Bij dit tentamen mag je gebruik maken van een spiekbriefje van maximaal 2 kantjes. Verder mogen er geen hulpmiddelen
Programmeren (1) Examen NAAM:
Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen [email protected] en [email protected]
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek
Tiende college algoritmiek. 26 april Gretige algoritmen
Algoritmiek 01/10 College 10 Tiende college algoritmiek april 01 Gretige algoritmen 1 Algoritmiek 01/10 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag
Examen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/
Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void
Zevende college algoritmiek. 24 maart Verdeel en Heers
Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties
Variabelen en statements in ActionScript
Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer
