dynamic programming recursieve datastructuren college 11 Fibonacci met tabel
|
|
- Suzanna Devos
- 7 jaren geleden
- Aantal bezoeken:
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: 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 informatieDatastructuren 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 informatieProgrammeermethoden. 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 informatieREEKS 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 informatieDatastructuren: 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 informatieAchtste 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 informatieTweede 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 informatieUitwerking 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 informatie2 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 informatieREEKS 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 informatieUitwerking 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 informatieProgrammeermethoden. 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 informatiedr. 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 informatieAlgoritmiek. 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 informatieRecursion. 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 informatieextra 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 informatieVerslag 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 informatieTentamen 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 informatierecursie 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 informatieRecursie: 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 informatieExamen 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 informatieALGORITMIEK: 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 informatieOnline 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 informatiedefinities 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 informatieEen 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 informatieUitwerking 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 informatie9. 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 informatieTentamen 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 informatieInleiding 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 informatieModelleren 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 informatieSmall 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 informatieModelleren 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 informatieVierde 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 informatieTwaalfde 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 informatieAls 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 informatiesoftware 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 informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieEen 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 informatieTentamen 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 informatieModelleren 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 informatieInformatica: 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 informatieOEFENINGEN 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 informatieTEST 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 informatieUitgebreide 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 informatie7 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 informatieExamen 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 informatieSEQUENTIE-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 informatieUitwerking 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 informatieElfde 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 informatieDatastructuren 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 informatieProgrammeertechnieken
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 informatieProgrammeermethoden. 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 informatieInleiding 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 informatieVijfde 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 informatieOverzicht. 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 informatie10 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 informatieVierde 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 informatieVOORBLAD 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 informatieDatastructuren: 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 informatieCombinatoriek 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 informatieDiscrete 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 informatiePlanning. 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 informatieNegende 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 informatieProgrammeren 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 informatieDe 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 informatieDynamisch Programmeren. Het Rugzakprobleem
INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieAlgoritmen, 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 informatieli d a l n s V a l GEMEENTE MAARTENSDIJK r Nbo bestemmingsplan buitengebied g g Nbo Nbo Schaal 1:5000 plankaart noord
Nadere informatie
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 informatieVierde 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 informatieHOGESCHOOL 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 informatieTentamen 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 informatieNegende 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 informatieVoorbeeldtentamen 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 informatieDOMjudge 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 informatieTentamen 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 informatieHOOFDSTUK 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 informatieOpgaven 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 informatieALGORITMIEK: 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 informatieProgrammeermethoden 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 informatieTentamen 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 informatieModelleren 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 informatie2.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 informatieProgrammeren 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 informatieD-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 informatiePracticum 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 informatieUitgebreide 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 informatieLineaire 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 informatieDatastructuren 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 informatieInformatica: 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 informatieProgrammeermethoden. 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 informatieCombinatoriek 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 informatieTree 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 informatieTentamen 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 informatieDerde 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 informatieRecursie. 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 informatieOnafhankelijke 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