software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies
|
|
- Adam van den Pol
- 8 jaren geleden
- Aantal bezoeken:
Transcriptie
1 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 bouwwerk elementaire datatypen vormen de bodem alles daartussen gebruikt wat en wordt zelf gebruikt bij recursie is er een rondgaand pad hoe komen we aan dit bouwwerk? trail and error? begin met iets dat er op lijkt en ga debuggen? gebruik een ontwerp! 2 5 stappen plan 1. Probleemanalyse, specificatie 2. Ontwerp van algoritmen en datastructuren plaatjes, tekst, formule, algemeen geval 3. Reflectie zal het gaan werken zal het probleem opgelost worden 4. Implementeren pas hier code schrijven 5. Evaluatie testen om kwaliteit te bepalen werkt het in alle gevallen, verificatie is het probleem opgelost, validatie 3 ontwerpen dit is de essentiële en spannende stap plaatjes, formules, pseudo-code hoeft niet tot in het laatste detail dingen die 'zeker lukken' kun je overslaan layout van dialogen initialisatie van een rijtje vergeet dit uiteindelijk niet hoe meer ervaring, hoe minder details in ontwerp groot gevaar voor zelfoverschatting reflectie moet mogelijk zijn op basis van ontwerp voor grote projecten maak je soms een prototype hiervoor doorloop je dezelfde stappen! 4 1
2 implementeren ontwerp ligt klaar voor je begint top-down: van boven naar onder bottom-up incrementeel: bouw stukje bij beetje begin met een programma dat weinig kan maak het langzaam krachtiger test ieder gebouwd stukje meteen maak eerst de stukken waar twijfels over bestaan als herontwerp nodig is, is er weinig verloren problemen kun je maar beter snel kennen compleet ontwerp nodig om bouwwerk uiteindelijk af in een plaatje: software constructie incrementeel te kunnen maken 5 6 highlights programmeertaal aspecten recursieve datastructuren dynamic programming programma ontwerp taal implementatie graph algoritmen lineaire algebra abstractie 7 pointers behalve een type, waarde en naam hebben objecten een object-id iedere instantie van een type heeft een unieke id in C++ (en andere talen) is de id z'n adres dit idee is al ouder dan OO die adressen veranderen niet adressen kun je manipuleren als normale objecten in je programma: pointers afspraak NULL-pointer wijst nergens heen nuttig en nodig in veel programma's recursieve datastructuren je kunt er ook veel fouten mee maken 8 2
3 programmeertaal aspecten pointers T*, &x, NULL functies resultaat: void, T, T*, T& argumenten: T, T*, T&, T [] rijen, C-strings aanname: T* wijst altijd in rij T[] r[i] en *(r+i) zijn dan gelijk objecten zichtbaarheid (scope) levensduur altijd het huidige compound statement objecten gemaakt met new leven voor 'eeuwig' opruimen met delete 9 subklassen van iedere klasse kun je een subklasse maken deze kan extra attributen en methoden bevatten class sub : public hoofd { int extra; protected: int f ( ) { return extra+1; } }; hiding via private, public en protected herdefinitie voor virtual methoden overal waar je hoofd verwacht mag je sub gebruiken typeconversie van sub naar hoofd voor directe types dynamic binding via pointers en ref args (C& of C*) object-id: this pointer 10 dynamic binding recursieve datastructuren class hoofd {public: virtual int f ( ) { return 1; } }; class sub : public hoofd {public : int f ( ) { return 2; } }; geeft dus: int main ( ) 1, 2 { hoofd h; sub s; hoofd h2 = s; hoofd *hp = &s; cout << h2. f ( ) << ", " << hp -> f ( ) << endl; voorbeelden: lijst, gesorteerde lijst, queue, stack,.. boom, zoekboom,.. basis knoop is object of structuur met één element knoop bevat pointer(s) naar opvolger(s) null pointer: er is geen opvolger hierdoor kan dynamisch iedere grootte gemaakt worden gebruik aparte klasse om eigenschappen te bewaken zoekboom, queue, stack,.. list:
4 lijsten knoop heeft hooguit één opvolger voordeel boven rijen: altijd een element toe te voegen element ertussen of eruit kan altijd goedkoop O(1) nadeel element opzoeken is duurder: O(n) i.p.v. O(1) 13 lijst in C++ typedef class Knoop *Lijst; // Lijst is een pointer!! class Knoop { El kop; // het lijstelement, private Lijst staart; // recursie: pointer naar de volgende public: Knoop ( El hd, Lijst tl = Leeg ) : kop ( hd ), staart ( tl ) { } ~Knoop() { delete staart; } // destructor: ruim hele lijst op friend El& head ( Lijst ); // vrienden kennen private velden friend Lijst& tail ( Lijst ); }; El& head ( Lijst l ) { assert ( l!= Leeg ); // voorkom selectie uit lege lijst return l->kop; } 14 bomen implementatie als lijsten verschil: bomen hebben meer dan 1 opvolger gebruik: zoekbomen (gebalnceerde zoekbomen, AVL, Red-black) representatie van talen... gesorteerde datastructuren gebruikt om elementen efficiënt te vinden structuur actie element zoeken element toevoegen element verwijderen gesorteerde rij O ( log n ) O ( n ) O ( n ) gesorteerde lijst O ( n ) O ( 1 ) O ( 1 ) gebalanceerde zoekboom O ( log n ) O ( 1 ) O ( 1 ) 15 1) dit zijn bovengrenzen, soms kan het sneller 2) we gaan er bij toevoegen en verwijderen vanuit dat we de plaats weten 3) balanceren en gebalanceerd houden van de boom vergt extra werk 4) ongebalanceerde bomen gedragen zich als lijst 16 4
5 speciale zoekbomen houden zich dynamisch steeds in balans alle operaties in O(log N) AVL-bomen verschil in hoogte steeds hooguit 1 sla dit op in iedere knoop als knoop uit balans: herbalanceren (draaien) Red-Black trees wortel en bladeren zijn zwart alle paden hebben zelfde aantal zwarte knopen alle rode knopen hebben zwarte kinderen indien uit balans: draaien en/of kleuren B-bomen, 2/3 bomen, lijst/boom-manipulaties gebruiken altijd pointers aflopen is nooit een probleem pointer zelf of kopie van pointer zijn evengoed veranderen: zorg dat je geen kopie verandert pak pointer uit knoop tail ( l ) = tail ( tail ( l )); gebruik een reference argument in recursieve functie void f ( Lijst & l ) { l = tail ( l ); } gebruik pointer naar pointer Knoop ** p = &l; p = & (( *p ) -> next ); *p = ( *p ) -> next; 18 taal implementatie altijd opbreken in verschillende fasen scanner: maakt tokens van invoer gebruik reguliere definities voor syntax van tokens altijd simpel, nooit een moeilijke keuze parser: maakt syntaxboom van tokens maak een klasse hiërarchie die past bij de syntax boom interpreter: bepaalt waarde met deze syntaxboom syntaxboom blijft hetzelfde manipulatie: verander deze syntaxboom interpretatie semantiek geeft vertelt direct wat er moet gebeuren parser recursive descent: goede syntax nodig ( niet links recursief, LL(1) ) met LL(1) kun je direct zien welke regel past anders grote look ahead of backtracking nodig stop prioriteit van operatoren in de regels van de grammatica E -> E + T T // expressie T -> T * F F // term F -> ( E ) num // factor simpel en direct regels van parser volgen direct de grammatica bottom-up tabel met prioriteiten en stack nodig (bijna) alle parser generatoren maken zo'n shift reduce parser
6 dynamic programming idee: dubbel recursieve functies hebben vaak een vreselijke complexiteit, b.v. O(2 n ) als het aantal mogelijke argumenten beperkt is kunnen we een tabel maken met resultaten in plaats van opnieuw uitrekenen kunnen we nu waarden opzoeken in de tabel, O(1) voor N waarden en m argumenten hebben we O(N m ) waarden in de tabel maakt veel problemen doable edit distance,... lineaire algebra lineaire afbeeldingen in R n kunnen handig met een matrix vermenigvuldiging A ( B v ) = ( A B ) v schuiven is niet lineair, maar kan met vermenigvuldiging in R n+1 ga over op homogene coördinaten (voeg extra 0 toe) implementatie vergt vectoren en matrices van verschillende grootte dit kan prima met templates graph algoritmen veel problemen laten zich formuleren in termen van (gelabelde) graphen verbindingen tussen knopen met een gewicht kortste pad, grootste flow, bereikbaarheid,.. verschillende representaties als bomen, rij van verbindingen per knoop, globale rij van verbindingen, verbindingsmatrix,.. aantal standaard algoritmen Prim, Kruskal: Minimum Spanning Tree Dijkstra: korste pad Floyd: all pair shortest path Ford-Fulkerson: grootste flow Minimum Spanning Tree Prim: greedy algoritme begin bij een knoop voeg steeds goedkoopste link toe tussen de boom en een nieuwe knoop algoritme geeft ouders van knopen in MST: tree Kruskal greedy algoritme iedere knoop in eigen kluster verbind steeds klusters met de goedkoopste link resultaat is verzameling links (verbindingen)
7 kortste afstand tot startknoop Dijkstra's kortste pad algoritme lijkt erg op Prim in het begin is afstand van wortel tot zichzelf 0 als er geen directe verbinding is, is de afstand greedy algoritme: voeg steeds de knoop toe die het dichts bij de boom ligt alle directe buren van die knoop kunnen hierdoor dichter bij de wortel komen levert afstand tot wortel op i.p.v. ouder 25 kortste afstand tussen alle knopen Floyd-Warshall (all pair shortest path) gebruik completen afstandmatrix in het begin alleen direct verbindingen alle andere afstanden op edge relaxation: maak een steeds betere schatting: W(i,j) k = min ( W(i,j) k-1, W(i,k) k-1 + W(k,j) k-1 ) for ( int k=0; k < g.size; k++ ) for ( int i=0; i < g.size; i++) for ( int j=0; j < g.size; j++ ) { int wk = g.w[i][k] + g.w[k][j]; if ( wk < g.w[i][j] ) g.w[i][j] = wk; } 26 maximale stroom door netwerk netwerk is graph gewicht is capaciteit idee is simpel (Ford-Fulkerson): initieel is de flow 0; while ( er is nog een pad waarover de flow verhoogd kan worden ) verhoog de flow over dat pad; je verhoogt de flow steeds zoveel als mogelijk over het gevonden pad als flow in integers: O ( E f) met f maximale flow variaties in het zoeken van dat pad: depth first breadth first (algoritme het dan Edmonds Karp): verbindingen per knoop A A B E knopen en kanten representatie graph met boomknopen verbindingsmatrix knopen = { A, B, C, D, E } A edges = { (A,A), (A,B) B , (B,D), (B,E) van C , (C,E), (D,E) D E , (E,B), (E,D) O ( V E 2 ) onafhankelijk van f 27 } 28 B D E C E D E E B D A C E B D E C A naar B D A B C D E 7
8 abstractie verberg details maakt het duidelijker kunt niet per ongeluk iets fout doen realisatie: private elementen van klasse module maak programmafragmenten algemener los in een keer meer problemen op goed voor hergebruik realisatie speciale gevallen en stopconditie in extra argumenten klasse hiërarchie templates 29 tentamenstof alles wat we behandeld hebben uit het dictaat 14 tot en met 19, 21, 24 testen, parseren, interpreteren, red-black trees, en graphs staat nog niet in het dictaat de hoofdstukken uit Big C++ die info geven 8, 10, 16-18, 22 lang niet alles staat in het boek 30 Vragen 31 8
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 informatiecolleges 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
Nadere informatieMinimum 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
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 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 informatieKortste Paden. Algoritmiek
Kortste Paden Toepassingen Kevin Bacon getal Six degrees of separation Heeft een netwerk de small-world eigenschap? TomTom / Google Maps 2 Kortste paden Gerichte graaf G=(N,A), en een lengte L(v,w) voor
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 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 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 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 informatieDoorzoeken 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
Nadere informatie4EE11 Project Programmeren voor W. College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e
4EE11 Project Programmeren voor W College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Grotere programma s ontwerpen/maken Datastructuren en algoritmes 2 Evolutie,
Nadere informatieProgrammeermethoden. 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 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 informatieMinimum Spanning Tree
Minimum Spanning Tree Wat is MST? Minimum spanning tree De meest efficiënte manier vinden om een verbonden netwerk op te bouwen Wat is een tree/boom? Graaf G: een verzameling knopen (vertices): V een verzameling
Nadere informatieKortste Paden. Algoritmiek
Kortste Paden Vandaag Kortste Paden probleem All pairs / Single Source / Single Target versies DP algoritme voor All Pairs probleem (Floyd s algoritme) Dijkstra s algoritme voor Single Source Negatieve
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 informatieTree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen
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 traversal 15 november
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 informatieTW2020 Optimalisering
TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 2 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 1 / 28 Minimum Opspannende Boom (Minimum Spanning
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 informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Nadere informatieGrafen en netwerken I Datastructuren en doorzoeken. Algoritmiek
Grafen en netwerken I Datastructuren en doorzoeken Algoritmiek 1 Inleiding 2 Netwerken Veel toepassingen, bijvoorbeeld: Sociale netwerken, electrische netwerken, wegennetwerken, communicatie netwerken,
Nadere informatieDatastructuren en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 11 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel Heaps en heapsort Heap 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1 16 14 10 8 7 9 3
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 informatieTW2020 Optimalisering
TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 28 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 1 / 25 Definitie Een boom is een samenhangende
Nadere informatieEerste college algoritmiek. 5 februari Introductie
College 1 Eerste college algoritmiek 5 februari 2016 Introductie 1 Introductie -1- docent: Jeannette de Graaf; kamer 151 e-mail: j.m.de.graaf@liacs.leidenuniv.nl assistenten: Hanjo Boekhout, Leon Helwerda,
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 informatieDatastructuren en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 30 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel Dynamische verzamelingen Stack implementaties Array met maximale grootte Linked List
Nadere informatieDe volgende opgave gaat over de B-bomen van het college, waar sleutels zowel in de bladeren als ook in de interne knopen opgeslagen worden.
. a) Een Fibonacci boom (niet te verwarren met een Fibonacci queue) van hoogte h is een AVL-boom van hoogte h met zo weinig mogelijk knopen. i. Geefvoorh =,,,,eenfibonacciboomvanhoogteh(eenboombestaande
Nadere informatieIntroductie in C++ Jan van Rijn. September 2013
Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)
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 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 informatieHet minimale aantal sleutels op niveau h is derhalve
1 (a) In een B-boom van orde m bevat de wortel minimaal 1 sleutel en maximaal m 1 sleutels De andere knopen bevatten minimaal m 1 sleutels en maximaal m 1 sleutels (b) In een B-boom van orde 5 bevat elke
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 en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 9 oktober 2015 1 met dank aan Hans Bodlaender en Gerard Tel Zoekbomen Binaire boom Bestaat uit knopen Beginknoop is de wortel (root) Elke knoop heeft
Nadere informatieJava Programma structuur
Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1 Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan,
Nadere informatiepublic boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber
Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden
Nadere informatieAlgoritmiek. 2 februari Introductie
College 1 Algoritmiek 2 februari 2017 Introductie 1 Introductie -1- docent: Rudy van Vliet rvvliet@liacs.nl assistent werkcollege: Bart van Strien bartbes@gmail.com website: http://www.liacs.leidenuniv.nl/~vlietrvan1/algoritmiek/
Nadere informatieDatastructuren 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
Nadere informatieHoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.
Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de
Nadere informatieGrafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.
Grafen Grafen Een graaf bestaat uit een verzameling punten (ook wel knopen, of in het engels vertices genoemd) en een verzameling kanten (edges) of pijlen (arcs), waarbij de kanten en pijlen tussen twee
Nadere informatieTweede Toets Datastructuren 29 juni 2016, , Educ-Γ.
Tweede Toets Datastructuren 29 juni 2016, 13.30 15.30, Educ-Γ. Motiveer je antwoorden kort! Zet je mobiel uit. Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe
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 informatieProgrammeren 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
Nadere informatiecompileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken
compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken - belangrijkste punten: - ontleden van de programmatekst - bijhouden van de datastructuren Data Structuren en Algoritmen
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2014 2015, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieTwaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify
Algoritmiek 2016/Branch & Bound Twaalfde college algoritmiek 13 mei 2016 Branch & Bound Heap, Heapsort & Heapify 1 Algoritmiek 2016/Branch & Bound TSP met Branch & Bound Mogelijke ondergrenzen voor de
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 informatieOvererving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Nadere informatieHet omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.
Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek
Nadere informatietemplates: het probleem recursieve datastructuren college 10 gebruik template wat zouden we willen templates exceptions type-parameters!
templates: het probleem recursieve datastructuren college 10 templates exceptions typedef... El; class Knoop El head; Knoop* tail; ; void swap ( El& x, El& y ) const EL t = x; x = y; y = t; er is maar
Nadere informatieTiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra
Algoritmiek 017/Gretige Algoritmen Tiende college algoritmiek 13/1 april 017 Gretige Algoritmen Algoritme van Dijkstra 1 Algoritmiek 017/Gretige Algoritmen Muntenprobleem Gegeven onbeperkt veel munten
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 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 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 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 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 informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieDatastructuren en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 14 oktober 2015 1 met dank aan Hans Bodlaender en Gerard Tel Willekeurig gebouwde zoekbomen Willekeurig gebouwde zoekbomen Hoogte van zoekboom met
Nadere informatieDatastructuren Werkcollege Intro
Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs
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 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 informatieHoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie
Hoofdstuk 2 Week 4: Datastructuren 2.1 Leesopdracht In het hoorcollege komen lijsten en bomen aan de orde. De eerste datastructuur komt in het boek in bladzijden 317-333 aan de orde. In dit dictaat komt
Nadere informatieElementary Data Structures 3
Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14 Meer
Nadere informatieAmorized Analysis en Union-Find Algoritmiek
Amorized Analysis en Union-Find Vandaag Amortized analysis Technieken voor tijdsanalyse van algoritmen Union-find datastructuur Datastructuur voor operaties op disjuncte verzamelingen Verschillende oplossingen
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 informatieUniversiteit 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
Nadere informatieCompilers.
Compilers joost.vennekens@denayer.wenk.be Job van een compiler Job van een compiler 68: newarray int int grens = min + (max - min) / 2; int[] kleiner = new int[n]; int[] groter = new int[n]; int k = 0;
Nadere informatieOefententamen in2505-i Algoritmiek
TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica Oefententamen in2505-i Algoritmiek Maart 2007 Het gebruik van boek of aantekeningen tijdens dit tentamen is niet toegestaan.
Nadere informatieSyntax- (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
Nadere informatieDatastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46
Datastructuren Analyse van algoritmen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren 1 / 46 Datastructuren en Algoritmen Datastructuren, 6 ECTS eerstejaars Bachelor INF Datastructuren,
Nadere informatie8C080 deel BioModeling en bioinformatica
Vijf algemene opmerkingen Tentamen Algoritmen voor BIOMIM, 8C080, 13 maart 2009, 09.00-12.00u. Het tentamen bestaat uit 2 delen, een deel van BioModeling & bioinformatics en een deel van BioMedische Beeldanalyse.
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 informatieUitwerking 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
Nadere informatiepublic boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber
Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden
Nadere informatiePracticumopgave 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
Nadere informatieModulewijzer Tirdat01
Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4
Nadere informatieC++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1 Commentaar In C: /* Deze functie berekent de omtrek van een cirkel */ float
Nadere informatieVakgroep 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 tony.wauters@kahosl.be en tim.vermeulen@kahosl.be
Nadere informatieElfde college algoritmiek. 10 mei Algoritme van Dijkstra, Gretige Algoritmen
lgoritmiek 019/lgoritme van ijkstra lfde college algoritmiek 10 mei 019 lgoritme van ijkstra, Gretige lgoritmen 1 lgoritmiek 019/ynamisch programmeren Programmeeropdracht 3 Lange Reis 0 10 10 1 1 100 0
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 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 informatieProgrammeermethoden NA
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder
Nadere informatieDatastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.
Datastructuren 2015 Programmeeropdracht 3: Expressies Deadline. Dinsdag 8 december 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek van Drozdek. U wordt gevraagd expressies
Nadere informatieStacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49
Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen
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 informatieDiscrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie
Discrete Structuren Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 3 maart 2008 GRAFEN & BOMEN Paragrafen 6.1-6.4 Discrete Structuren
Nadere informatieHet Eindfeest. Algoritmiek Opgave 6, Voorjaar
1 Achtergrond Het Eindfeest Algoritmiek Opgave 6, Voorjaar 2017 1 Om het (successvol) afsluiten van Algoritmiek te vieren, is er een groot feest georganiseerd. Jij beschikt als enige van je vrienden over
Nadere informatieGrafen en BFS. Mark Lekkerkerker. 24 februari 2014
Grafen en BFS Mark Lekkerkerker 24 februari 2014 1 Grafen Wat is een graaf? Hoe representeer je een graaf? 2 Breadth-First Search Het Breadth-First Search Algoritme Schillen De BFS boom 3 Toepassingen
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2008 2009, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees elke
Nadere informatieZevende college algoritmiek. 23/24 maart Verdeel en Heers
Zevende college algoritmiek 23/24 maart 2017 Verdeel en Heers 1 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht 0 1 2 3 0 1 2 3 4 1 2 3 4 5 2 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht
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 informatieInformatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction
Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2014 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic
Nadere informatieBeginselen 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,
Nadere informatieDiscrete Wiskunde, College 12. Han Hoogeveen, Utrecht University
Discrete Wiskunde, College 12 Han Hoogeveen, Utrecht University Dynamische programmering Het basisidee is dat je het probleem stap voor stap oplost Het probleem moet voldoen aan het optimaliteitsprincipe
Nadere informatieZevende college Algoritmiek. 6 april Verdeel en Heers
Zevende college Algoritmiek 6 april 2018 Verdeel en Heers 1 Algoritmiek 2018/Backtracking Programmeeropdracht 2 Puzzel 2: D O N A L D G E R A L D + R O B E R T Elke letter stelt een cijfer voor (0,1,...,9)
Nadere informatieSemantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)
Bas Luttik s.p.luttik@tue.nl http://www.win.tue.nl/~luttik HG 7.14 tel.: 040 247 5152 Hoorcollege 8 (7 juni 2007) Functionele talen Idee: een programma definieert reeks (wiskundige) functies. Programma
Nadere informatie