1 Tentamen 21 januari 2008 uitleg. 2 1. Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.

Slides:



Advertisements
Verwante presentaties

Advertisements

PSD Basisstructuren programmeren.
PSD Basisstructuren programmeren.
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Hoofdstuk 8: Recursie.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
PROS2 Les 11 Programmeren en Software Engineering 2.
Base: bewerkingen 2 soorten - Oplopend- Aflopend.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Conditionele expressie
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Leiderverkiezing Olympus College 14 april 2008 David N. Jansen.
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Numerieke Natuurkunde
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Deel I: Programmeertaal C 6. Arrays en Pointers
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Sorteeralgoritmen. Sorteren: aanpak 1 Hoe ga je een rij getallen sorteren met PC? Sorteren door selectie (= selection sort): Zoek de kleinste waarde Sorteer.
TEKST 11 TYPEN GROEPSGEDRAG
AP A en P zijn verzamelingen die geen lid zijn van zichzelf. A is de verzameling van alle soorten appels en P is de verzameling van alle soorten peren.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 7 onze.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
voor familie en vrienden van
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Let’s go! ›Beginnerspresentatie ›Starten met prospero ›Verschil CMS en web navigator ›Nieuwe content > nieuwe folder aanmaken ›Bestanden uploaden ›Linkobject.
verhoudingen – breuken – procenten - kommagetallen
Oic even weken..
verhoudingen – breuken – procenten - kommagetallen
verhoudingen – breuken – procenten - kommagetallen
Variabelen. Wat zijn variabelen? Klassiek: een variabele houdt informatie bij. Klassiek: een variabele houdt informatie bij. bvb: int getal; getal = 5;
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Welkom! maandag 16 November 2015 Les B-2.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Een enquête maken met Google Docs Je gaat leren hoe je een enquête kunt maken in Google Docs met een Formulier. De link kun je vespreiden zodat de vragenlijst.
Leesvaardig Examentraining.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Hoofdstuk 9 M&O JUNI 2016 H3. Wat gaan we doen? - Hoofdstuk 9 M&O - Introductievragen - Uitleg / aantekeningen - Sommen maken.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Gameprogrammeren: Objecten en geheugen
Hoofdstuk 9 M&O + in groepjes Havo3 iPad.
Natuurkunde-project Typ hier de titel van je project Jouw naam
Programmeren woensdag 4 oktober 2017.
Zeeslag Bron: csunplugged.org / csunplugged.nl.
Gameprogrammeren: Arrays
Transcript van de presentatie:

1 Tentamen 21 januari 2008 uitleg

2 1. Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met de executietijd van een programma in verhouding tot de toename van de invoer?

3 1. Algemene kennisvragen b)“Noem 3 soorten samenstellings- mechanismen voor algoritmen.” –Cruciaal: waar kunnen algoritmen uit samengesteld zijn? Dat konden zaken zijn als top-down verfijningen, functies & procedures, herhalingen, keuzes e.d.

4 1. Algemene kennisvragen c)“Drie begrippen die nauw aan elkaar gerelateerd zijn, zijn type, waarde en object. Beschrijf kort, maar zo nauwkeurig mogelijk wat de verschillen tussen deze begrippen zijn.” –Cruciaal: op de een of andere manier moest duidelijk gemaakt worden dat een ‘type’ staat voor een verzameling mogelijke waarden, een object een variabele of een constante kan zijn en dat ‘variabelen van een bepaald type’ een waarde kunnen hebben. (bijv. int getal = 3; )

5 1. Algemene kennisvragen d)“Geef aan wat het verschil is tussen call-by-value en call-by-reference. Is het ook mogelijk om objecten die constant zijn via call-by-reference door te geven? Zo ja, wat kan hiervan het nut zijn? Zo nee, waarom niet?” –Cruciaal: dat duidelijk gemaakt werd, dat bij call-by- value [een kopie van] de waarde van een object wordt meegegeven en bij call-by-reference het object zelf [via het geheugenadres] ter bewerking wordt aangeboden.

6 1. Algemene kennisvragen e)“Geef de belangrijkste verschillen aan tussen enerzijds ‘ struct ’ s en anderzijds ‘ rijen ’ ” –struct: verzameling van elementen van mogelijk verschillend type / rij: verzameling van element van hetzelfde type –struct: elementen worden gevonden middels naam / rij: elementen middels index

7 1. Algemene kennisvragen f)“Bij het zoeken van een element in een ongesorteerde rij moet je in het ergste geval de hele rij doorlopen. Nu kom je op het idee om de rij eerst te sorteren, en daarna te zoeken, omdat je weet dat je middels binair zoeken veel eerder kunt stoppen. Geef aan of dit wel of niet een goed idee is en motiveer je antwoord.” –Beste in-situ sorteeralgoritme heeft complexiteit O(n log n) –Binair zoeken heeft complexiteit O(log n) –Dus eerst sorteren, dan binair zoeken: O(n log n) + O(log n) = O (n log n) –Zoeken in ongeordende rij heeft complexiteit O(n) –Zoeken in ongeordende rij heeft betere complexiteit, dus het is een slecht idee. –Maar: als je vaker in dezelfde rij wilt gaan zoeken, dan kan het wel verstandig zijn omdat de kosten van sorteren na verloop van tijd wegvallen.

8 2. Structs en rijen Mogelijke uitwerking 2.a: typedef char Naam [15 ] ; const int Rijlengte = 3 ; struct Lid { int lidnr ; Naam naam ; int gebjaar ; char postcode [ 8 ] ; int huisnr ; } ; typedef Lid Ledenrij [ Rijlengte ] ; struct JaarIndexStruct { int gebjaar ; int recordnr ; } ; typedef JaarIndexStruct Indexrij [ Rijlengte ] ;

9 2. Structs en rijen (vervolg 1) Mogelijke uitwerking 2.b, deel 1: void voeg_toe ( Ledenrij lrij, Indexrij inrij, int& aantal, Lid lid ) { if ( aantal >= Rijlengte ) cout << "Rij zit vol na " << aantal << " toevoegingen!\n\n" ; else { lrij[aantal] = lid ; voeg_gebjaar_indexrecord_toe ( inrij, aantal, lid ) ; aantal++ ; } Zie voor uitwerking “voeg_gebjaar_indexrecord_toe(..)” de volgende sheet.

10 2. Structs en rijen (vervolg 2) Mogelijke uitwerking 2.b, deel 2: void voeg_gebjaar_indexrecord_toe ( Indexrij inrij, int aantal, Lid lid ) { // moet volgens insertie-methode gebeuren int positie = aantal ; // zoek invoeg-positie op: (van achter naar voren) if ( aantal > 0 ) { while ( positie > 0 && inrij[positie-1].gebjaar > lid.gebjaar ) { positie-- ; } for ( int i = aantal ; i >positie ; i-- ) inrij [ i ] = inrij [ i - 1 ] ; // 1 naar achter schuiven } // else : aantal, dus 'positie' staat op 0... => niks; houden zo // nu: op gevonden 'positie' indexrecord tussenvoegen: inrij[positie].gebjaar = lid.gebjaar ; inrij[positie].recordnr = aantal ; }

11 2. Structs en rijen (vervolg 3) Mogelijke uitwerking 2.c: void toon_leden_op_geboortejaars_volgorde ( Ledenrij lrij, Indexrij inrij, int aantal ) { cout << "Lidgegevens, naar toenemend geboortejaar:\n\n" << "Lidnr \tNaam \t\tJaar \tPostcode+Huisnr:\n" ; for ( int inrijpos = 0; inrijpos < aantal ; inrijpos++ ) { const Lid dit_lid = lrij[inrij[inrijpos].recordnr] ;// verwijzing in rij! cout << dit_lid.lidnr << "\t" << dit_lid.naam << "\t" << dit_lid.gebjaar << "\t" << dit_lid.postcode << "\t" << dit_lid.huisnr << endl ; /* equivalent (zonder aparte ‘dit_lid’-declaratie: cout << lrij[inrij[inrijpos].recordnr].lidnr << "\t" << lrij[inrij[inrijpos].recordnr].naam << "\t" << lrij[inrij[inrijpos].recordnr].gebjaar << "\t" << lrij[inrij[inrijpos].recordnr].postcode << "\t " << lrij[inrij[inrijpos].recordnr].huisnr << endl ; */ } }

12 3. Recursie a)Struct voor posities: struct Pos { int x; int y; }; Alternatief, gebruik een rij van twee waarden: typedef int Pos [2]; Type voor Route: typedef Pos Route [64]; het aantal moet wel kloppen; er kunnen maximaal 8  8 sprongen uitgevoerd worden.

13 3. Recursie b)Bepalen van legale positie: bool legale_positie (Pos p) {return p.x >= 0 && p.x < aantalRijen && p.y >= 0 && p.y < aantalKolommen; } Bepalen of positie al bezet is: bool positie_bezet (Pos p, Route r, int lengte) {for (int i=0; i<lengte; i++) {if (zelfde_pos(p,r[i])) return true; } return false; } Hulpfunctie: bool zelfde_pos (Pos a, Pos b) { return a.x == b.x && a.y == b.y; } test op ondergrens en bovengrens

14 3. Recursie b)Breid route uit met nieuwe positie: void markeer_route (Pos p, Route r, int lengte) {r[lengte] = p; }

15 3. Recursie c)bool paardensprong (Pos van, Pos naar, Route r, int lengte) {if (zelfde_pos (van,naar)) {druk_route_af (r, lengte); return true; } else {for (int mogelijk=0; mogelijk<8; mogelijk++) { Pos volgende = tel_op(van,richtingen[mogelijk]); if (legale_positie (volgende) && !positie_bezet (volgende,r,lengte)) {markeer_route (volgende,r,lengte); if (paardensprong (volgende,naar,r,lengte+1)) return true; } return false; }

16 3. Recursie c)Hulpfuncties: bool zelfde_pos (Pos a, Pos b) {return a.x == b.x && a.y == b.y; } Pos tel_op (Pos a, Pos b) { Pos c = {a.x+b.x,a.y+b.y}; return c; } void druk_route_af (Route r, int lengte) {for (int i=0; i<lengte; i++) cout << “(“ << r[i].x << “,” << r.[i].y << “)”; }

17 3. Recursie c)Hulpdatastructuren: Pos richting [] = {{-1,2},{-1,-2},{-2,1},{-2,-1}, {1,2},{1,-2},{2,1},{2,-1}};

18 3. Recursie d)Als het bord n  n groot is, is het langst mogelijke pad n 2 lang, dus O(n 2 ).