dynamic programming recursieve datastructuren college 11 Fibonacci met tabel

Maat: px
Weergave met pagina beginnen:

Download "dynamic programming recursieve datastructuren college 11 Fibonacci met tabel"

Transcriptie

1 dynamic programming recursieve datastructuren college 11 dynamic programming onthouden of opnieuw berekenen? idee: onthoud tussenresultaten van de berekingen om herhaald uitrekenen te voorkomen hier vooral meervoudig recursieve functies we hebben geschikt datastructuur nodig ruimte-complexiteit is meestal slechter algoritme moet wat aangepast worden we zijn dit al eerder tegen gekomen fibonacci met tabel driehoek van Pascal Fibonacci met tabel Fibonacci over de groei van konijnen int fib ( int n ) return n<2? 1 : fib (n-1) + fib (n-2); fib is O ( 2 n ) preciezer O ( n ) fib (n-2) wordt 2 keer uitgerekend fib (n-3) wordt 4 keer uitgerekend etc.. dynamic programming stop resultaten in een tabel zoek waarden op in tabel i.p.v. ze uit te rekenen voor n>1: fib(n) = fib(n-1)+fib(n-2) 3 4 1

2 Fibonacci met dynamic programming maak een tabel met fib[m] voor m n int fibdp (int n ) int* fibrij = newint [ n+1 ]; fibrij [ 0 ] = fibrij [ 1 ] = 1; for (int i = 2; i<=n; i+=1 ) fibrij [ i ] = fibrij [ i-1 ] + fibrij [ i-2 ]; return fibrij [ n ]; dit is O(n) recurente betrekking 5 Fibonacci tabel in O ( 1 ) ruimte dit kan ook in O ( n ) tijd en in O ( 1 ) ruimte alleen de laatste 2 elementen uit de tabel zijn nodig kan vaak in dynamic programming int fibdp2 (int n ) int laatste = 1, vorige = 1; for ( ; n>1 ; n-=1 ) int nieuwe = laatste + vorige; vorige = laatste; laatste = nieuwe; return laatste; 6 n n! k = k!( n k)! naïeve implementatie driehoek van Pascal ook overflow probleem int bincoef ( int n, int k ) return fac ( n ) / ( fac ( k ) * fac ( n-k )); als we fac steeds uitrekenen, element O ( n ) tabel O (n 3 ) ook dit kan veel beter 7 driehoek van Pascal onthoud de vorige rij hoeken altijd waarde 1 andere elementen som van bovenburen void driehiekpascal ( int m ) int *rij = newint [ m+1 ]; for ( int k=0; k<=m ; k+=1 ) for ( int n=k; n>=0 ; n-=1 ) slechts O(n) geheugen van k naar 0, gebruik symmetrie cout << (rij[n] = n==k n==0? 1 : rij[n]+rij[n-1]) << ' '; cout << endl; handig maar lelijk, vullen en afdrukken in een keer elementen in O ( 1 ), hele driehoek in O ( n 2 ) 8 2

3 één binomiaal coëfficiënt één binomiaal coëfficiënt met tabel int bincoef ( int n, int k ) return fac ( n ) / ( fac ( k ) * fac ( n-k )); ongeschikt voor dynamic programming maar tabel van fac kan natuurlijk wel recursieve formulering binomiaal coëfficiënten int bincoef ( int n, int k ) if ( n==k n==0 ) return 1; return bincoef ( n, k-1 ) + bincoef ( n-1, k-1 ) ; hier kunnen we direct een tabel voor maken 9 int bincoefdp ( int n, int k ) int* r = newint [k+1]; for (int l=1; l<=k; l+=1 ) for (int m=l; m>=0; m-=1 ) if ( m==l m==0 ) r[m] = 1; r[m] = r[m] + r[m-1] ; return r[n]; 10 spannender probleem edit-distance van strings: aantal edit-acties dat nodig is om ene string in andere om te zetten toegestane edit acties: substitution: vervang één letter door één andere spot shot, man mal, maan baan insertion: voeg één letter toe pot spot, pot poot, ma man deletion: gooi één letter weg spot pot, poot pot, man ma we gaan dit implementeren als een functie int editdistance ( char s [ ], char t [ ] ) 11 acceptatietest class testeditdistance : public Test public: void run ( ) test_ ( editdistance ( "", "" ) == 0 ) ; test_ ( editdistance ( "a", "" ) == 1 ) ; randgevallen test_ ( editdistance ( "", "a" ) == 1 ) ; test_ ( editdistance ( "a", "a" ) == 0 ) ; test_ ( editdistance ( "a", "b" ) == 1 ) ; test_ ( editdistance ( "abcd", "dcba" ) == 4 ) ; 'normale' test_ ( editdistance ( "abcd", "dabc" ) == 2 ) ; gevallen test_ ( editdistance ( "shot", "spot" ) == 1 ) ; test_ ( editdistance ( "ago", "agog" ) == 1 ) ; test_ ( editdistance ( "hour", "our" ) == 1 ) ; test_ ( editdistance ( "programma", "implementatie" )==11 ) ; ; groot geval 12 3

4 recursief algoritme beschouw een string als bron en de ander als doel in hoeveel acties kunnen we bron omzetten in doel ( omgekeerd is precies even veel stappen ) voor de laatste letter zijn er 4 mogelijkheden: past: geen actie nodig past niet, een van de volgende acties: substitute: vervang bestaande letter door gewenste insert: voeg gewenste letter toe delete: gooi bestaande letter weg ga recursief verder met de rest kosten van edit-acties stop het in een functie om flexibel te zijn voorlopig kosten alle acties 1: int match ( char c, char d ) return c==d? 0 : 1 ; int inschar ( char c ) return 1; int delchar ( char c ) return 1; match substitute we hadden ook vooraan kunnen beginnen 13 insert en delete 14 eerste aanzet begin achteraan geen zin om steeds het woord aan te passen het einde op te zoeken geef index van laatste letter steeds mee int editdistance ( char s [ ], char t [ ] ) return computedistance ( s, t, strlen ( s )-1, strlen ( t )-1 ); 15 computedistance int computedistance ( char s [ ], char t [ ], int i, int j ) klaar? if ( i<0 && j<0 ) return 0; s leeg? if ( i<0 ) return inschar( t [ j ] ) + computedistance ( s, t, i, j-1 ); if ( j<0 ) t leeg? return delchar( s [ i ] ) + computedistance ( s, t, i-1, j ); match: substitute of past return min ( computedistance ( s, t, i-1, j-1 ) + match ( s[i], t[j] ), computedistance ( s, t, i, j-1 ) + inschar ( t [ j ] ), computedistance ( s, t, i-1, j ) + delchar ( s [ i ] ) ); merk op: strings zelf worden niet veranderd 16 4

5 aanroep geef de index van de laatste letters mee als beginwaarde int edit_distance ( char s [ ], char t [ ] ) return computedistance ( s, t, strlen ( s )-1, strlen ( t )-1 ); 17 computedistance evaluatie de test voor dit programma slaagt, het is ook correct voor wat langere strings (zeg lengte 12), is het erg langzaam! return min ( computedistance ( s, t, i-1, j-1 ) + match ( s[i], t[j] ), computedistance ( s, t, i, j-1 ) + inschar ( t[j] ), computedistance ( s, t, i-1, j ) + delchar ( s[i] ) ); drievoudige recursie! zelfs als we aannemen dat beide indices afnemen is het O ( 3 n )! kan dit beter? maak voor gegeven s en t tabel voor distance[i][j] 18 dynamic programming int edit_distancedp (char s [], char t [] ) int len_s = strlen ( s ), len_t =strlen ( t ); int ** m = newint* [ len_s+1 ]; for (int i=0; i<=len_s ; i+=1 ) m [ i ] = newint [ len_t+1 ]; m [ 0 ] [ 0 ] = 0; // alloceer tabel // kosten voor lege strings for (int i=1; i<=len_s; i+=1 ) // initialiseer randen m [ i ] [ 0 ] = m [ i-1 ] [ 0 ] + inschar ( s [ i-1 ] ); for (int j=1; j<=len_t; j+=1 ) m [ 0 ] [ j ] = m [ 0 ] [ j-1 ] + delchar ( t [ j-1 ] ); for (int i=1; i<=len_s; i+=1 ) // vul tabel for (int j=1; j<=len_t; j+=1 ) m [ i ] [ j ] = min ( m [ i-1 ] [ j-1 ] + match ( s [ i-1 ], t [ j-1] ), m [ i ] [ j-1 ] + inschar( t [ j-1 ] ), m [ i-1 ] [ j ] + delchar( s [ i-1 ] ) ); return m [ len_s ] [ len_t ]; opzoeken in tabel 19 standaard voorbeeld cout << "Distance " << edit_distancedp ( "thou shalt not", "you should not" ) << endl; geeft Distance 5 via welk pad dan? 20 5

6 de afstandsmatrix doel 21 hoe kom ik er wat is het pad van thou-shalt-not, naar you-should-not? antwoord: DSMMMMMISMSMMMM D: delete S: substitute I: insert M: match hoe komen we hieraan? edit acties bijhouden in matrix edit acties reconstrueren uit matrix 22 action matrix y o u - s h o u l d - n o t B I I I I I I I I I I I I I I t D M M M M M M M M M M M M M M h D M M M M M M I I I I I I I I o D M M M M M M M I I I I I M I u D M D M I I I I M I I I I I I - D M D D M I I I I M M M I I I s D M D D D M I I I I M M M M M h D M D D D D M I I I I I I M M a D M D D D D D M M M M M M M M l D M D D D D D M M M I I I I I t D M D D D D D M M M M M M M M - D M D D M D D M M M M M I I I n D M D D D D D M M M M D M I I o D M M D D D D M M M M D D M I t D M D D D D D D M M M D D D M afdrukken alternatief als je goed je best doet kun je ook zonder de action tabel begin rechts onder bekijk 3 buren om te beslissen welke stap je hebt gekozen als beste toe je de matrix vulde ga die kant op herhaal dit totdat je in m[0][0] bent. pad:d S M M M M M I S M S M M M M

7 action matrix y o u - s h o u l d - n o t t h o u s h a l t n o t pad:d S M M M M M I S M S M M M M 25 afdrukken van het pad void printpad (int *m [], char s [], char t [], int i, int j ) if ( i==0 ) if ( j==0 ) return; // klaar! printpad ( m, s, t, i, j-1 ); // eerst de voorgaande cout << " I" << t [ j-1 ]; // insert if ( j==0 ) printpad ( m, s, t, i-1, j ); // eerst de voorgaande cout << " D" << s [ i-1 ]; // delete... zie volgende pagina afdrukken deel 2 int matchcost = m [i-1][j-1] + match( s [ i-1 ], t [ j-1 ] ), insertcost = m [i ][j-1] + inschar( t [ j-1 ] ), deletecost = m [i-1][j ] + delchar( s [ i-1 ] ); if ( matchcost <= insertcost && matchcost <= deletecost ) printpad ( m, s, t, i-1, j-1 ); if ( s [ i-1 ] == t [ j-1 ] ) // match cout << " M" << s [ i-1 ]; cout << " S" << s[i-1] << "->" << t[j-1]; // substitute if ( insertcost < deletecost ) printpad ( m, s, t, i, j-1 ); // eerst de voorgaande cout << " I" << t [ j-1 ]; // insert printpad ( m, s, t, i-1, j ); cout << " D" << s [ i-1 ]; // delete voorbeeld edit pad van "you should not murder" en "thou shalt not kill" Dt Sh y Mo Mu M_ Ms Mh Io Sa u Ml St d M_ Mn Mt M_ Im Iu Sk r Si d Sl w Sl r Dt delete t Sh y Substitute h by y Mo match o Io insert o

8 variaties op dit thema longest common subsequence lcs ( democrat, republican ) -> eca voldoende verandering: was 1 int match ( char c, char d ) return c==d? 0 : MAX ; maximum monotone subsequence mms ( ) -> minste deletes om stijgende reeks te krijgen geen andere acties als past en delete meer variaties gelijkheid DNA-sequences Needleman/Wunsch score initieel 0 overeenkomst aminozuren: +2 verschil: -1 delete: -2 zoek de hoogste score ons algoritme zoekt de laagste kosten oplossing: voorzie alles van een min-teken complexiteit we moeten een matrix helemaal vullen voor iedere cell wat werk met huidige letters: O ( 1 ) bekijk 3 buren: O ( 1 ) totaal voor één cell: O ( 1 ) voor hele matrix O ( n 2 ) héél veel beter dan de oorspronkelijke O ( 3 n ) geheugengebruik we gebruiken nu ook O ( n 2 ) geheugen als we het pad niet hoeven weten is dat vaak niet nodig voor edit diatance hebben we genoeg aan één rij

9 de pont de pont tussen Mook en Cuijk heeft een zeer smalle toegangsweg met 'n rij auto's hoe moeten we de auto's plaatsen (link of rechts) om er zoveel mogelijk op de pont te krijgen? int rij [] = 2,2,4,6,1,6,9,1,8,0 // de autolengtes int lengte = 20; // de rij lengte op de pont geeft einde aan 33 recursief algoritme geef resterende lengte linker en rechter rij mee a is index van te plaatsen auto = aantal auto's op pont resultaat is aantal auto's int plaats (int a=0, int l=lengte, int r=lengte ) if ( l<0 r<0 ) // laatste auto paste niet meer return -1; if ( rij [ a ] == 0 ( l == 0 && r == 0 )) return a; geen auto's meer beide rijen vol return max ( a // huidige aantal auto's, plaats (a+1, l - rij [ a ], r ) // auto links, plaats (a+1, l, r - rij [ a ] // auto rechts ); 34 analyse algoritme is dubbel recursief: O ( 2 n ) geschikt voor dynamic programming maak tabel met lengtes als index tabel bevat aantal te plaasten auto's we moeten nu wel voor iedere lengte de waarde uitrekenen eerst alleen voor de lengtes die je echt gebruikt 35 pont met dynamic programming int plaatsdp ( ) int **m = newint *[ Lengte+1 ]; for (int i=0; i<=lengte; i+=1 ) // maak ruimte voor tabel aan m [ i ] = newint [ Lengte+1 ]; for (int a=0, i=0; i<=lengte; a+=1 ) // vul randen for (int l=0; i<=lengte && ( l<rij [ a ] rij [ a ]==0 ); l++, i++ ) m [ 0 ] [ i ] = m [ i ] [ 0 ] = a; for (int i=1; i<=lengte; i+=1 ) // vul rest for (int j=1; j<=lengte; j+=1 ) l en i verhogen constint a = max ( m [ i-1 ] [ j ], m [ i ] [ j-1 ] ); constint l = rij [ a ]; if ( l>0 && ((i>=l && m[i-l][j]>=a) (j>=l && m[i][j-l]>=a)) ) m [ i ] [ j ] = a+1; m [ i ] [ j ] = a; return m [ Lengte ] [ Lengte ]; // lees resultaat uit tabel 36 9

10 de tabel int lengte = 20; int rij [] = 2,2,4,6,1,6,9,1,8,0; 37 hou moeten de auto's staan? kan ook hier uit de tabel gelezen worden nu stappen zo groot als de auto lengte 38 pad door de tabel int lengte = 20; int rij [] = 2,2,4,6,1,6,9,1,8,0; 39 vulling uit tabel in C++ void kant (int * m [ ], int i, int j ) constint a = m [ i ] [ j ]; if ( a>0 ) if ( i>0 && a == m [ i-1 ] [ j ] ) // skip lege plaatsten kant ( m, i-1, j ); if ( j>0 && a == m [ i ] [ j-1 ] ) // idem in andere richting kant ( m, i, j-1 ); if ( j-rij [ a-1 ] >= 0 && m [ i ] [ j-rij [ a-1 ]] == a-1 ) // past rechts? kant ( m, i, j-rij [ a-1 ] ); // eerst de voorgaande auto's cout << "auto " << a << " met lengte " << rij[a-1]<<" rechts\n"; // auto past zeker links kant ( m, i-rij [ a-1 ], j ); cout << "auto " << a << " met lengte " << rij[a-1] << " links\n"; 40 10

11 voorbeeld vulling int rij [] = 2,2,4,6,1,6,9,1,8,0; int lengte = 20; output: auto 1 met lengte 2 links auto 2 met lengte 2 rechts auto 3 met lengte 4 links auto 4 met lengte 6 links auto 5 met lengte 1 links auto 6 met lengte 6 links auto 7 met lengte 9 rechts auto 8 met lengte 1 rechts auto 9 met lengte 8 rechts algemeen deze techniek staat bekend als dynamic programming, of memoization algemeen: schrijf recursief algoritme herken termen die opnieuw uitgerekend worden stop die in een tabel lees uit tabel i.p.v. opnieuw rekenen werkt ook in veel gevallen waar je tot nu toe zou kiezen voor backtracken of breadth-first-search dit heeft veel betere complexiteit! alternatief hier vullen we de hele tabel en lezen dan de uitkomst uit de tabel indien je niet alles nodig hebt kun je ook alleen opslaan wat je echt nodig hebt initieel: geen elementen een beginwaarde zorg dat je kunt zien dat je geen echte waarde hebt opgeslagen als je een waarde nodig hebt kijk in de tabel of die er is zo ja: gebruik de opgeslagen waarde zo nee: reken waarde uit en sla die op werk net zo goed, maar we zullen het niet verder uitwerken voorwaarden dynamisch programmeren wanneer werkt dit? recursief algoritme termen komen opnieuw voor er mogen geen globale afhankelijkheden zijn bovengrens aan tabel nodig hashing kan soms als er geen vaste bovengrens is

12 conclusies een directe recursieve implementatie is meestal duidelijk, maar kan een slechte complexiteit hebben zo n algoritme is vaak om te zetten naar een algoritme met betere complexiteit zorg dat berekening die vaker voorkomen en veelwerk zijn slechts één keer gedaan worden zie hoofdstuk 24 dictaat 45 12

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

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,

Nadere informatie

Datastructuren college 10

Datastructuren college 10 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

Nadere informatie

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

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,

Nadere informatie

REEKS II. Zaterdag 6 november 2010, 11u

REEKS II. Zaterdag 6 november 2010, 11u TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS II Zaterdag 6 november 2010, 11u NAAM :... VRAAG 1: AFSTAND [5 PUNTEN] In deze oefening gaan we opzoek naar identieke

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

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)

Nadere informatie

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Achtste college algoritmiek. 8 april Dynamisch Programmeren Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

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)

Nadere informatie

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

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.

Nadere informatie

2 Recurrente betrekkingen

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

Nadere informatie

REEKS I. Zaterdag 6 november 2010, 9u

REEKS I. Zaterdag 6 november 2010, 9u TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS I Zaterdag 6 november 2010, 9u NAAM :... VRAAG 1: MINSTENS [5 PUNTEN] Schrijf een methode minstens(), met twee

Nadere informatie

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

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

Nadere informatie

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

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

Nadere informatie

dr. Walter Kosters, Universiteit Leiden Capelle vrijdag 17 april 2009 www.liacs.nl/home/kosters/gastlessen/ 1 Introductie is een techniek die je helpt om uit doolhoven te komen en soortgelijke problemen

Nadere informatie

Algoritmiek. 15 februari Grafen en bomen

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

Nadere informatie

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

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

extra oefening algoritmiek - antwoorden

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.

Nadere informatie

Verslag Opdracht 4: Magische Vierkanten

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

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

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

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

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

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden: Recursie: definitie Een object wordt recursief genoemd wanneer het partieel bestaat uit of partieel gedefinieerd is in termen van zichzelf. Recursie wordt gebruikt bij wiskundige definities, bijvoorbeeld:

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

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

Nadere informatie

Online c++ leren programmeren:

Online c++ leren programmeren: Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma

Nadere informatie

definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten

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

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

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

Nadere informatie

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

Uitwerking tentamen Algoritmiek 9 juni :00 17:00 Uitwerking tentamen Algoritmiek 9 juni 2015 14:00 17:00 1. Clobber a. Toestanden: m x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal O gelijk aan het aantal X of er is hooguit één

Nadere informatie

9. Strategieën en oplossingsmethoden

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

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

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.

Nadere informatie

Inleiding Programmeren 2

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

Nadere informatie

Modelleren en Programmeren

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

Nadere informatie

Small Basic Programmeren Text Console 2

Small Basic Programmeren Text Console 2 Oefening 1: Hoogste getal Je leest een reeks positieve gehele getallen in totdat je het getal 0 (nul) invoert. Daarna stopt de invoer en druk je een regel af met het hoogste getal uit de reeks. Voorbeeld:

Nadere informatie

Modelleren en Programmeren

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));

Nadere informatie

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

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

Nadere informatie

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST College 12 Twaalfde college complexiteit 11 mei 2012 Overzicht, MST 1 Agenda voor vandaag Minimum Opspannende Boom (minimum spanning tree) als voorbeeld van greedy algoritmen Overzicht: wat voor technieken

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies

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

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Tentamen Programmeren in C (EE1400)

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

Nadere informatie

Modelleren en Programmeren

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

Nadere informatie

Informatica: C# WPO 10

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

Nadere informatie

OEFENINGEN PYTHON REEKS 6

OEFENINGEN PYTHON REEKS 6 OEFENINGEN PYTHON REEKS 6 1. A) Schrijf een functie die een getal x en een getal y meekrijgt. De functie geeft de uitkomst van volgende bewerking als returnwaarde terug: x y x als x y x y y als x < y B)

Nadere informatie

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2011-2012 Zaterdag 5 november 2011, 9u30 NAAM :... VRAAG 1: EVEN VEEL [5 PUNTEN] Schrijf een methode evenveel(), met twee argumenten,

Nadere informatie

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 5 juni 2007, uur

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 5 juni 2007, uur Uitgebreide uitwerking tentamen Algoritmiek Dinsdag juni 00, 0.00.00 uur Opgave. a. Een toestand bestaat hier uit een aantal stapels, met op elk van die stapels een aantal munten (hooguit n per stapel).

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief

Nadere informatie

SEQUENTIE-STRUCTUUR. Oefening: Dichtheid

SEQUENTIE-STRUCTUUR. Oefening: Dichtheid SEQUETIE-STRUCTUUR Oefening: Dichtheid geef diameter vd bol(m) //Declaratie input variabelen double diameter; double soortmassa; //Declaratie variabelen voor tussenresultaten double volume; diameter //Declaratie

Nadere informatie

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

Nadere informatie

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

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D

Nadere informatie

Datastructuren Uitwerking jan

Datastructuren Uitwerking jan Datastructuren Uitwerking jan 16 1 1a) Een ADT wordt gekenmerkt door de opgeslagen gegevens en de beschikbare operaties. De Priority Queue bevat en verzameling elementen waarbij elk element en eigen waarde

Nadere informatie

Programmeertechnieken

Programmeertechnieken Aanvulling op Programmeren Radboud Universiteit Nijmegen 10 December 2012 1 Omschrijving Linked lists Implementatie Boomstructuren 2 Recursie De rij van Fibonacci Het driehoekprobleem 3 Het substitutiecijfer

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

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

Nadere informatie

Inleiding Programmeren 2

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

Nadere informatie

Vijfde college algoritmiek. 2/3 maart Exhaustive search

Vijfde college algoritmiek. 2/3 maart Exhaustive search Vijfde college algoritmiek 2/3 maart 2017 Exhaustive search 1 Voor- en nadelen Brute force: Voordelen: - algemeen toepasbaar - eenvoudig - levert voor een aantal belangrijke problemen (zoeken, patroonherkenning)

Nadere informatie

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

Overzicht. 1. Definities. 2. Basisalgoritme. 3. Label setting methoden. 4. Label correcting methoden. 5. Ondergrenzen. 6. Overzicht 1. Definities 2. Basisalgoritme 3. Label setting methoden 4. Label correcting methoden 5. Ondergrenzen 6. Resultaten Kortste Pad Probleem 1 Definities Een graaf G = (V, E) bestaat uit een verzameling

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

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

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force Algoritmiek 2017/Complexiteit Vierde college algoritmiek 23/24 februari 2017 Complexiteit en Brute Force 1 Algoritmiek 2017/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:

Nadere informatie

VOORBLAD SCHRIFTELIJKE TOETSEN

VOORBLAD SCHRIFTELIJKE TOETSEN Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : GESPRG : EP11/EP12 TOETSDATUM : 07-02-2014 TIJD : 13.00 14.30 uur AANTAL PAGINA S (incl.

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

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:

Nadere informatie

Combinatoriek groep 1 & 2: Recursie

Combinatoriek groep 1 & 2: Recursie Combinatoriek groep 1 & : Recursie Trainingsweek juni 008 Inleiding Bij een recursieve definitie van een rij wordt elke volgende term berekend uit de vorige. Een voorbeeld van zo n recursieve definitie

Nadere informatie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 22 februari 2009 INDUCTIE & RECURSIE Paragrafen 4.3-4.6 Discrete Structuren Week 3:

Nadere informatie

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) 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

Nadere informatie

Negende college algoritmiek. 6/7 april Dynamisch Programmeren

Negende college algoritmiek. 6/7 april Dynamisch Programmeren Negende college algoritmiek 6/7 april 2017 Dynamisch Programmeren 1 algemeen Uit college 8: DP: - nuttig bij problemen met overlappende deelproblemen - druk een oplossing van het probleem uit in oplossingen

Nadere informatie

Programmeren in C++ Efficiënte zoekfunctie in een boek

Programmeren in C++ Efficiënte zoekfunctie in een boek Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!

Nadere informatie

De Leidsche Flesch Studievereniging voor Natuurkunde, Sterrenkunde, Wiskunde en Informatica sinds DLF Pointerworkshop

De Leidsche Flesch Studievereniging voor Natuurkunde, Sterrenkunde, Wiskunde en Informatica sinds DLF Pointerworkshop DLF Pointerworkshop Opgaven 2 maart 2016 XKCD # 371 In dit document staan een aantal oude tentamenopgaven om te oefenen voor het hertentamen PR Bij de selectie is rekening gehouden met de opgaven die het

Nadere informatie

Dynamisch Programmeren. Het Rugzakprobleem

Dynamisch Programmeren. Het Rugzakprobleem INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Algoritmen, Datastructuren en Complexiteit ( ) Uitwerkingen

Algoritmen, Datastructuren en Complexiteit ( ) Uitwerkingen Universiteit Twente Kwartiel 010/ Afdeling Informatica 1 e huiswerkserie 6 december 010 Algoritmen, Datastructuren en Complexiteit 1914000 Uitwerkingen De deadline voor het inleveren van deze huiswerkserie

Nadere informatie

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

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren Achtste college algoritmiek 12 april 2019 Verdeel en Heers Dynamisch Programmeren 1 Uit college 7: Partitie Partitie Partitie(A[l r]) :: // partitioneert een (sub)array, met A[l] als spil (pivot) p :=

Nadere informatie

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force Algoritmiek 2019/Toestand-actie-ruimte Vierde college algoritmiek 1 maart 2019 Toestand-actie-ruimte Brute Force 1 Algoritmiek 2019/Toestand-actie-ruimte Torens van Hanoi Voorbeeld 3: Torens van Hanoi

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

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

Nadere informatie

Tentamen combinatorische optimalisatie Tijd:

Tentamen combinatorische optimalisatie Tijd: Tentamen combinatorische optimalisatie 26-05-2014. Tijd: 9.00-11.30 Tentamen is met gesloten boek. Beschrijf bij elke opgave steeds het belangrijkste idee. Notatie en exacte formulering is van minder belang.

Nadere informatie

Negende college algoritmiek. 15 april Dynamisch Programmeren

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

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

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

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep. Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep. Gebruik deze opgaven, naast die uit het boek, om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht opgaven.

Nadere informatie

ALGORITMIEK: answers exercise class 7

ALGORITMIEK: answers exercise class 7 Problem 1. See slides 2 4 of lecture 8. Problem 2. See slides 4 6 of lecture 8. ALGORITMIEK: answers exercise class 7 Problem 5. a. Als we twee negatieve (< 0) getallen bij elkaar optellen is het antwoord

Nadere informatie

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 6: Lijsten Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal

Nadere informatie

Tentamen in2705 Software Engineering

Tentamen in2705 Software Engineering Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen

Nadere informatie

Modelleren en Programmeren

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

Nadere informatie

2.0 Voorkennis. Rekenregels machten: 5) a 0 = 1. p p q p q a p q q. p q pq p p p. Willem-Jan van der Zanden

2.0 Voorkennis. Rekenregels machten: 5) a 0 = 1. p p q p q a p q q. p q pq p p p. Willem-Jan van der Zanden 2.0 Voorkennis Voorbeeld: (a + b) 2 = a 2 + 2ab + b 2 (a + b) 3 = (a +b)(a2 + 2ab + b2) = a 3 + 2a 2 b + ab 2 + a 2 b +2ab 2 + b 3 = a 3 + 3a 2 b + 3ab 2 + b 3 Rekenregels machten: p p q pq a pq 1) a a

Nadere informatie

Programmeren met Arduino-software

Programmeren met Arduino-software Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en

Nadere informatie

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder? D -DAG 13 februari 2014: 1+ 1 = 2 (en hoe nu verder?) 1 = 2en hoe nu verder? 1 Inleiding Snel machtsverheffen Stel je voor dat je 7 25 moet uitrekenen. Je weet dat machtsverheffen herhaald vermenigvuldigen

Nadere informatie

Practicum hoogtemeting 3 e klas havo/vwo

Practicum hoogtemeting 3 e klas havo/vwo Deel (benaderbaar object) Om de hoogte van een bepaald object te berekenen hebben we geleerd dat je dat kunt doen als je in staat bent om een rechthoekige driehoek te bedenken waarvan je één zijde kunt

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

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.

Nadere informatie

Lineaire data structuren. Doorlopen van een lijst

Lineaire data structuren. Doorlopen van een lijst Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn

Nadere informatie

Datastructuren Uitwerking jan

Datastructuren Uitwerking jan Datastructuren Uitwerking jan 2015 1 1a. Een abstracte datastructuur is een beschrijving van een datastructuur, met de specificatie van wat er opgeslagen wordt (de data en hun structuur) en welke operaties

Nadere informatie

Informatica: C# WPO 13

Informatica: C# WPO 13 Informatica: C# WPO 13 1. Inhoud Bestanden uitlezen, bestanden schrijven en data toevoegen aan een bestand, csv-bestanden 2. Oefeningen Demo 1: Notepad Demo 2: Read CSV-file Demo 3: Write CSV-file A: Plot

Nadere informatie

Programmeermethoden. Arrays (vervolg 2) Walter Kosters. week 9: 5 9 november kosterswa/pm/

Programmeermethoden. Arrays (vervolg 2) Walter Kosters. week 9: 5 9 november kosterswa/pm/ Programmeermethoden Walter Kosters week 9: 5 9 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Derde programmeeropgave Nonogram:... citatie/referentie: Tja~\cite{abc} levert Tja [1], met \begin{thebibliography}{xx}

Nadere informatie

Combinatoriek groep 1

Combinatoriek groep 1 Combinatoriek groep 1 Recursie Trainingsdag 3, 2 april 2009 Getallenrijen We kunnen een rij getallen a 0, a 1, a 2,... op twee manieren definiëren: direct of recursief. Een directe formule geeft a n in

Nadere informatie

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

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

Nadere informatie

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

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

Nadere informatie

Derde college complexiteit. 7 februari Zoeken

Derde college complexiteit. 7 februari Zoeken College 3 Derde college complexiteit 7 februari 2017 Recurrente Betrekkingen Zoeken 1 Recurrente betrekkingen -1- Rij van Fibonacci: 0,1,1,2,3,5,8,13,21,... Vanaf het derde element: som van de voorgaande

Nadere informatie

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N! Recursie Faculteit: in de wiskunde: n! is gedefiniëerd als: 0! = 1 n! = n (n 1)! in Java: public static int faculteit( int n ) // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie