Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding

Save this PDF as:
 WORD  PNG  TXT  JPG

Maat: px
Weergave met pagina beginnen:

Download "Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding"

Transcriptie

1 Hoofdstuk 3 Week 5: Sorteren 3.1 Inleiding Zoals al bleek in college 1 kunnen zoekalgoritmen veel sneller worden uitgevoerd, indien we weten dat de elementen in de lijst, waarin wordt gezocht, geordend voorkomen. Niet voor niets zijn telefoongidsen, adresbestanden, woordenboeken en dergelijke alfabetisch geordend. Zelfs voor relatief kleine bestanden loont het vaak al de moeite de gegevens in zekere geordende volgorde beschikbaar te hebben, zeker, als zo n bestand vaak doorzocht moet worden. Helaas worden gegevens slechts zelden geordend aangeleverd. (Een student zal zijn studiegenoten niet in alfabetische volgorde tegenkomen en dus ook niet in alfabetische volgorde in zijn agenda hun adressen kunnen noteren). We zullen dus op de één of andere manier de ongeordende gegevens moeten ordenen. 1 ) Het op volgorde zetten van gegevens wordt wel sorteren genoemd. In algemene vorm komt het bij sorteeralgoritmen neer op: Gegeven: een zekere list alsmede een ordenings relatie. De ordeningsrelatie geeft aan in welke volgorde de elementen van de lijst moeten voorkomen. Gevraagd: een algoritme, dat list sorteert volgens de gegeven ordening We zullen in dit hoofdstuk aannemen, dat de lijst een array van Comparable, zodat iedere Class die de interface Comparable implementeerd door deze methods kan worden gesorteerd. De interface Comparable definieert de ordeningsrelatie, met de method compareto: public int compareto(object o) 1 ) Een andere mogelijkheid is, elk nieuw gegeven direkt op de goede plaats (volgens de ordening) tussen te voegen. Deze methode zullen we hier niet bespreken. 1

2 De waarde van a.compareto(b) is kleiner dan nul als a < b volgens de ordeningsrelatie, a.compareto(b) == 0 als a = b volgens de ordeningsrelatie, en a.compareto(b) > 0 als a > b volgens de ordeningsrelatie. We zullen de gewenste eindtoestand realiseren, uitsluitend door gebruik te maken van verwisseling van elementen in de lijst list (zogenaamd sorteren in situ). Daarvoor zullen we onderstaande method gebruiken: private static void swapitems ( Comparable list[], int i, int j ) // pre: list[i] = X en list[j] = Y // post: list[i] = Y en list[j] = X Comparable hulp = list[i]; list[i] = list[j]; list[j] = hulp; 3.2 Selection sort Het algoritme voor Selection Sort is eenvoudig. Zoek het kleinste element uit de lijst en plaats het voorop de lijst. Zoek vervolgens het kleinste element in het resterende deel van de lijst en plaatst dat op de volgende plaats in de lijst en herhaal dit totdat alle elementen op de juiste plaats staan. Het algoritme heeft dan de vorm: private static int smallestitem ( Comparable list [], int left, int right ) // returns index of smallest item in list between // left and right-1 inclusive int index, result = left; for ( index = left + 1; index < right; index ++ ) if (list[index].compareto(list[result]) < 0) 2

3 result = index; return result; public static void selectionsort ( Comparable list [], int length ) // Sorts list int index; for ( index = 0 ; index < length - 1 ; index ++ ) swapitems( list, index, smallestitem( list, index, length ) ); 3.3 Insertion sort Bij insertion sort geldt dat het stuk list[b..index-1] al gesorteerd is, maar in het resterende deel kunnen nog kleinere waarden voorkomen. Bij iedere stap wordt het gesorteerde stuk list[b..index-1] met één element uitgebreid tot list[b..index]. Daarvoor moet het element list[index] op de juiste plaats tussengevoegd worden. Hiervoor wordt een nieuwe variabele next geïntroduceerd met als waarde index. De elementen list[next] en list[next-1] worden met elkaar vergeleken en zo nodig met Swap verwisseld. We herhalen deze stap voor next:=next-1 totdat er niet meer verwisseld hoeft te worden. Zo zakt bij wijze van spreken het element list[index] in de lijst list[0..index-1] af totdat de juiste plaats is gevonden. We kunnen de binnenste lus implementeren met: next = index; // Voeg element[index] toe aan de gesorteerde lijst while (( next > 0 ) &&!(list[next].compareto( list[next-1]) > 0)) swapitems( list, next, next-1 ); 3

4 next = next - 1; Dit houdt dit in, dat we net zolang het element list[next] met zijn voorganger verwisselen, tot het op de juiste plaats staat. De method ziet er als volgt uit: public static void insertionsort ( Comparable list [], int length ) // Sorts list int index, next; for (index = 1; index < length; index ++ ) // Invariant: list[0]..element[index-1] zijn // gesorteerd next = index; // Voeg list[index] toe aan de gesorteerde lijst while (( next > 0 ) &&!(list[next].compareto( list[next-1] ) > 0)) swapitems( list, next, next-1 ); next--; 3.4 Heapsort Heapsort is een efficiënte sorteer methode, zowel in geheugengebruik als in rekentijd. Net als de vorige twee methoden is het een in situ methode die niet of nauwelijks extra geheugen nodig heeft. Daarnaast is het een methode die gegarandeerd O n 2 log n efficiëntie heeft wat betreft rekentijd, tegen O n 2 voor de voorgaande methoden zie 3.7. Heapsort gebruikt een datastructuur die heap of priority-queue wordt genoemd. Een 4

5 heap kan worden beschouwd als een boom, waarin het root-element de hoogste waarde (of prioriteit) heeft. Verder geldt dat voor iedere knoop in de boom, beide kinderen geen hogere waarde hebben dan de knoop zelf. Dit wordt de heap conditie genoemd. Op een heap kunnen we drie acties uitvoeren: (i) initialisatie van een lege heap, (ii) invoegen van een element met willekeurige waarde, en (iii) verwijderen van het root element. Heapsort neemt nu de volgende stappen: Initialiseer de lege heap Voeg één voor één alle elementen van list aan de heap toe Verwijder één voor één alle elementen uit de heap (waarbij de grootste als eerste komt!!), en vul hiermee list van achter naar voor. Willen we deze acties kunnen uitvoeren onder handhaving van de heap conditie, dan is het nodig om van een willekeurig element zowel de ouder als de kinderen kunnen bepalen. In de bomen die we tot nu toe hebben gehad kon dit niet. We zouden iedere knoop van een boom natuurlijk uit kunnen voeren met een extra verwijzing naar de ouder, maar dit kost geheugen. De eenvoudig oplossing is de boom op te slaan in een array. We weten immers hoe groot de boom maximaal wordt: net zo groot als de te sorteren array (= n elementen)! Maar hoe zit het dan met de claim dat heapsort niet veel geheugen nodig heeft? De truc die we gebruiken is de volgende. We gebruiken het oorspronkelijke array als heap. Dit is zo te organiseren dat er als k elementen in de heap zitten, deze de eerste k elementen in list in beslag nemen, terwijl de overige n k elementen het achterste deel van list in beslag nemen. De manier waarop we ouders en kinderen bijhouden is ook simpel. De ouder van node i is node i/2 (waarbij we integerdeling bedoelen), en de kinderen van node i zijn i 2 en i Daarbij moeten we wel checken of ze bestaan! dit doen we niet door te checken of de kinderen null zijn, maar door te checken of de index waarde i 2 of i kleiner is dan het huidig aantal elementen in de heap. Let op: De telling van index waarden begint bij een heap bij 1 niet 0, zoals bij een array. Als 0 de root-node index zou zijn, zou een kind van de root ook index 0 hebben. Dit kan dus niet! De implementatie van heap is de volgende: public class Heap public Comparable list []; public int maxsize, size; public Heap( Comparable thelist [], int length ) list = thelist; maxsize = length; 5

6 size = 0; public Comparable itematheapindex( int i ) return list[i-1];... Er zijn dus drie data velden: de array list: een verwijzing naar je origineel), maxsize: de maximum grootte, en size: de huidige grootte. De constructor neemt de originele array, en laat list ernaar verwijzen. De maximum grootte wordt gelijk gesteld aan de lengte van list, en size wordt nul, wat aangeeft dat de heap leeg is. De method itematheapindex geeft het element op heap index i terug, wat overeenkomt met array index i-1. In de code zetten we deze omrekening rechtstreeks neer: element child komt overeen met list[child-1]. Het invoegen en verwijderen heeft telkens de volgende structuur: schendt de heap conditie, en repareer die daarna. We beginnen met insertinheap. In deze method wordt eerst gecontroleerd dat de maximum capaciteit niet wordt overschreden, verhoogt dan size, en plaatst het nieuwe element achter aan de heap array. Dit element staat dus in een van de bladeren van de boom. Tenzij het een element met de kleinst mogelijke waarde in het pad via de voorouders naar de root is, staat het niet op zijn plaats, en is de heap conditie geschonden. Dit wordt gerepareerd door upheap. De method ziet er als volgt uit: public void insertinheap( Comparable item) if ( size <= maxsize ) size ++; list[size-1] = item; upheap( size ); Method upheap rekent de ouder van de te verschuiven node child uit, en copieert 6

7 het betreffende array element naar temp. Er wordt nu iteratief gezocht naar de eerste voorouder die een waarde groter dan die van temp heeft, of dat de root-node bereikt is. Iedere keer dat een voorouder te klein is, wordt hij naar de betreffende kind positie door geschoven. Als de while-lus klaar is, wordt het kind op zijn plek gezet. De method zet er als volgt uit. Merk op dat dit zoekprocess maximaal 2 log n stappen vergt, size=n child. Immers, de parent wordt bij iedere herhaling gedeeld door twee. De lus stopt als parent == 0 in ieder geval, en dus na niet meer dan 2 log n stappen. void upheap( int child ) int parent = child / 2; Comparable temp = list[child-1]; boolean found = false; while ((parent > 0) &&!found) if ( list[parent-1].compareto(temp) < 0 ) list[child - 1] = list[parent - 1]; child = parent; parent = child / 2; else found = true; list[child - 1] = temp; Method removefirst haalt, als de heap niet leeg is, het element list[0] weg (oftewel de root). Het laatste element, op array index size - 1 wordt dan in de root geplaatst, size wordt 1 kleiner gemaakt, en de heap wordt gerepareerd met downheap. Tot slot wordt het oude root element terug gegeven met een return statement. public Comparable removefirst() if (size > 0) Comparable temp = list[0]; list[0] = list[size - 1]; size --; downheap(1); 7

8 return temp; else return null; Method downheap is het spiegelbeeld van upheap. Van een node met heap index parent wordt van de data een kopie gemaakt. Daarna wordt van de twee kinderen (als ze bestaan) de grootste gezocht. Als de parent kleiner is dan het grootste kind neemt het kind de positie van de parent, zo niet of als er geen kinderen zijn, dan staat parent op de juiste plaats. Net als upheap, heeft downheap een complexiteit van O 2 log n. Dit keer wordt child iedere keer verdubbeld, en na hooguit 2 log n stappen wordt child groter dan size, en stopt de lus. De methode kan als volgt worden geimplementeerd. void downheap ( int parent ) int child; Comparable temp = list[parent-1]; boolean found = false; while ((parent <= size / 2) &&!found) child = parent * 2; if ( child < size ) if ( list[child-1].compareto(list[child]) < 0 ) child ++; if ( temp.compareto(list[child-1]) < 0 ) list[parent - 1] = list[child - 1]; parent = child; else found = true; list[parent - 1] = temp; Heapsort is nu simpel: 8

9 static void heapsort ( Comparable list[], int length ) Heap heap = new Heap(list,length); int i; // Zorg eerst dat heap aan de heap conditie gaat voldoen for ( i = 1; i<= length; i++ ) heap.insertinheap( list[i-1] ); // heap is nu gebouwd size = length for ( i = length ; i > 1 ; i -- ) list[i-1] = heap.removefirst( ); Na initialisatie van de heap worden de elementen van de array in de heap geplaatst, waarna ze in de tweede for-lus eruit worden gehaald, en de array list van achter naar voren wordt gevuld. 3.5 Partition sort Tot slot van dit hoofdstuk willen we recursie gebruiken om een sorteer probleem op te lossen. We beschouwen een sorteer probleem, waarvan voor het hier te geven algoritme het aantal operaties (onder niet te extreme omstandigheden) evenredig is met n 2 log n als het een sortering van n objecten betreft. Veronderstel het bestaan van een method splitlist van de volgende vorm: private static int splitlist ( Comparable list [], int b, int e ) die de waarden van list[ b..e ] permuteert (verwisselt) en als functieresultaat een 9

10 waarde s berekent, zodanig dat (1) b s e (2) list[b..s-1] list[s] (3) list[s] list[s+1..e] (3.1) In een plaatje: b V V V s-1 s s+1 e Het (recursieve) sorteer-method is nu voor de hand liggend: public static void quicksort ( Comparable list [], int b, int e ) if ( b < e ) int pivot = splitlist( list, b, e ); quicksort( list, b, pivot - 1 ); quicksort( list, pivot + 1, e ); De eenvoud van een recursieve method wordt veelal als misleidend ervaren, omdat men zich het mechanisme tracht voor te stellen. We stellen echter met nadruk dat de gegeven tekst een getrouwe afspiegeling is van de begripsmatige eenvoud. Moeilijker is de method splitlist. Er zijn vele versies van soortgelijke method in omloop. Het erop gebaseerde sorteer algoritme is in de literatuur bekend onder de naam quicksort. Het algoritme is gebaseerd op de keuze van één van de array-elementen als vergelijkingswaarde, zeg V, die uiteindelijk op indexpositie s zal belanden. Array-elementen V worden links in het array verzameld, array-elementen V worden rechts in het array verzameld. Om er zeker van te zijn dat een permutatie van het oorspronkelijke array ontstaat, en dat er dus geen waarden verdwijnen, zullen we als enige operatie op het array de onderlinge verwisseling van twee waarden toestaan. De index s zullen we opsporen door gebruik te maken van twee wijzers (een linkerwijzer b en een rechterwijzer e) waarbij b van links naar rechts door list zal lopen en e van rechts naar links. We zullen ervoor 10

11 zorgen dat ten allen tijden alle elementen links van de linkerwijzer voldoen aan V en alle elementen rechts van de rechterwijzer aan V. Indien nu b=e hebben we ons doel bereikt. Alvorens de body van splitlist te geven nog enige analyse. We introduceren grootheden B en E hetgeen nodig is om in de specificatie nog iets over de beginwaarden van b en e te zeggen. We kiezen nu als hoofdinvariant: list[b..b 1] V list[e + 1..E] (3.2) (de permutatie-eis zullen we niet steeds opnieuw noemen). In een plaatje: V?? V B b e E Als we nu ervoor zorgen dat uiteindelijk: b = e V = list[b] (3.3) dan is b = e de gezochte waarde s. We zullen uiteindelijk list[b] = V bewerkstelligen door ervoor te zorgen dat altijd geldt: list[l] = V list[r] = V (3.4) Dit betekent dat we iedere keer als we de lus uitvoeren ervoor moeten zorgen dat de waarde van V in list[b] of in list[e] blijft staan. Als de waarde van V in list[b] staat, dan mogen we e veranderen zonder dat de waarde van list[b] verloren gaat. Hetzelfde geldt als de waarde van V in list[e] staat, dan mogen we b veranderen. In het eerste geval rechtvaardigt dit het naar links schuiven van e en in het tweede geval het naar rechts schuiven van b. We kunnen de body nu afmaken: private static int splitlist ( Comparable list [], int b, int e ) boolean vtoleft = true; // Invariant: list[b..b-1 ] <= V <= list[ e+1..e ] while ( b < e ) if ( list[b].compareto( list[e] ) > 0 ) 11

12 swapitems( list, b, e ); vtoleft =!vtoleft; if (vtoleft) // V == list[b] e --; else // V == list[e] b ++; return b; 3.6 Mergesort Als laatste sorteeralgoritme bestuderen we mergesort. Technisch zit mergesort iets anders in elkaar, zodat dit algoritme niet goed past in het voorgaande kader. Mergesort werkt niet met het verwisselen van elementen maar met het copieren van lijsten. Daarom heeft mergesort een andere interface dan we tot nog toe gewend waren. public static void mergesort ( Comparable list [], Comparable temp [], int l, int r ) int i,j,k, middle; if ( r-l > 0) middle = (r + l) / 2; mergesort(list, temp, l, middle); mergesort(list, temp, middle+1, r); for (i = l ; i <= middle ; i ++ ) temp[i] = list[i]; for (i = middle + 1 ; i <= r ; i ++ ) temp[r + middle i] = list[i]; 12

13 i = l; j = r; for ( k = l ; k <= r ; k ++ ) if ( temp[i].compareto(temp[j]) < 0 ) list[k] = temp[i]; i ++; else list[k] = temp[j]; j--; Mergesort bewerkt een array. Het algoritme is heel simpel. Deel het te bewerken array in twee ongeveer gelijke delen. Sorteer het eerste en tweede deel met mergesort en voeg deze twee resultaten samen (merge). Deze recursieve methode eindigt als het te sorteren array slechts één element bevat. Het samenvoegen van twee gesorteerde lijsten is heel simpel. Vergelijk de twee eerste elementen en plaats de kleinste in het resulterende array en ga verder met het volgende element. Om een in situ algoritme te schrijven hebben we een hulp array temp nodig. Het is veel natuurlijker om mergesort voor echte lijsten en niet voor lijsten opgeslagen in array s te schrijven. We vragen jullie om tijdens het practicum mergesort voor lijsten te implementeren. 3.7 Iets over efficiëntie Bij vergelijking van een aantal algoritmen met het zelfde einddoel speelt het begrip efficientie een belangrijke rol. Een algoritme is efficiënter, naarmate deze sneller tot resultaat komt en/of daarbij minder geheugenruimte nodig heeft. Bij de meeste besproken algoritmen is het geheugengebruik (ruimte nodig voor hulpvariabelen bijvoorbeeld) ongeveer vergelijkbaar. 2 ) De uitzondering is merge sort, die een hulp array nodig heeft ter grootte n. We zullen ons hier verder beperken tot de snelheid. Een mate voor de snelheid kan (in dit geval) zijn het aantal vergelijkingen en het aantal verwisselingen van array-elementen in het algoritme. Zowel voor insertion sort als voor selection sort is het aantal vergelijkingen evenredig met het kwadraat van het aantal elementen van de lijst list. We spreken dan van O n 2 (orde grootte n 2 ). Dit houdt in, dat vier keer zoveel elementen in een lijst 16 keer zoveel 2 ) Dat is niet helemaal waar. De recursieve aanroepen vergen ook extra geheugenruimte. 13

14 vergelijkingen tot gevolg zal hebben. Partition sort is echter nog veel beter. In de method splitlist is het aantal vergelijkingen en het aantal verwisselingen O n (alle elementen uit het betreffende interval worden eenmaal beschouwd en zijn in principe kandidaat om verwisseld te worden). Indien elke partitie het interval middendoor deelt, zijn log n opdelingen nodig (dan is elk interval één element groot). In totaal komen we zo voor zowel het aantal verwisselingen als het aantal vergelijkingen in dit gunstige geval uit op O n log n, hetgeen beter is dan selection sort en insertion sort. Een partitie kan ook steeds slecht uitvallen en het interval opdelen in een interval ter grootte van één element en een interval ter grootte alles-min-één. In dat geval loop de efficientie terug tot O n 2. We spreken dan van een worst case-gedrag. Meestal is partition sort dus behoorlijk snel en wordt daarom ook wel quicksort genoemd. Heapsort heeft ook een O n log n complexiteit, omdat upheap en downheap een O log n complexiteit hebben en deze ieder n keer worden aangeroepen. Heapsort is gemiddeld langzamer dan quicksort, maar worst case is heapsort nog steeds O n log n, terwijl quicksort O n 2 kan worden. Ook heeft heapsort minder geheugen nodig. Het verschil komt door de heap structuur, die gegarandeerd een gebalanceerde boom is. Ook mergesort is efficiënt doordat we het array hier iedere keer in twee ongeveer gelijke stukken delen, wat ook neerkomt op een gebalanceerde boomstructuur, als we de recursieve opsplitsing bekijken. De diepte van de recursie is dus beperkt tot 2 log n. Bij iedere aanroep is het de complexiteit in de orde van het aantal elementen in het segment dat gesorteerd moet worden door die aanroep. Alle aanroepen op een bepaalde diepte van de recursie bij elkaar doen dus O n werk, de recursie heeft een maximum diepte van O 2 log n, dus de totale complexiteit is O n log n. De keuze voor één van de laatste drie methoden moet eerder op basis van geheugen gebruik, en toepassing worden gezocht, dan dat er één duidelijk de beste is. Mergesort heeft als voordeel dat ook files, of linked lists ermee gesorteerd kunnen worden. Sorteren van data in files is nodig als de data niet in het geheugen passen. Heapsort is een goede alrounder: niet zo snel als quicksort, maar zuiniger met geheugen, en gegarandeerd O n log n. 14

Datastructuren. 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 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 informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Hoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie

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

Voortgezet Prog. voor KI

Voortgezet Prog. voor KI Voortgezet Prog. voor KI Docent: Michael Wilkinson IWI 142 tel. 050-3638140 (secr. 3633939) Frank Brokken RC 352 tel. 050-3633688 Voorkennis: Inleiding Programmeren voor KI (nieuwe stijl) Stof: Practicum

Nadere informatie

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

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011 15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree

Nadere informatie

4EE11 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 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 informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

Tentamen Programmeren in C (EE1400)

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

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie Complexiteit 2016/04 College 4 Vierde college complexiteit 16 februari 2016 Beslissingsbomen en selectie 1 Complexiteit 2016/04 Zoeken: samengevat Ongeordend lineair zoeken: Θ(n) sleutelvergelijkingen

Nadere informatie

Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen

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

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

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

Nadere informatie

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

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

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

De doorsnede van twee verzamelingen vinden

De doorsnede van twee verzamelingen vinden De doorsnede van twee verzamelingen vinden Daniel von Asmuth Inleiding Dit artikel probeert enkele algoritmen te vergelijken om de doorsnede van twee verzamelingen of rijen van getallen te vinden. In een

Nadere informatie

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

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

Nadere informatie

10 Meer over functies

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

Nadere informatie

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

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

Nadere informatie

Verslag Opdracht 4: Magische Vierkanten

Verslag Opdracht 4: Magische Vierkanten Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten

Nadere informatie

Tweede Toets Datastructuren 29 juni 2016, , Educ-Γ.

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

IMP Uitwerking week 13

IMP Uitwerking week 13 IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het

Nadere informatie

Datastructuren; (Zoek)bomen

Datastructuren; (Zoek)bomen Datastructuren; (Zoek)bomen Bomen, zoekbomen, gebalanceerde zoekbomen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 1 / 50 Bomen Traversal van bomen Datastructuur van

Nadere informatie

Tentamen in2705 Software Engineering

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

Nadere informatie

Derde college complexiteit. 7 februari Zoeken

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

Nadere informatie

2 Recurrente betrekkingen

2 Recurrente betrekkingen WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

NAAM: Programmeren 1 Examen 29/08/2012

NAAM: Programmeren 1 Examen 29/08/2012 Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Gesloten boek examen: er mag geen gebruik worden gemaakt van het studieboek.

Nadere informatie

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt

Nadere informatie

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

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

Nadere informatie

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen Universiteit Twente 2009-2010/2 Afdeling Informatica, Faculteit EWI Tentamen dinsdag 19 januari 2010, 8.45-12.15 Algoritmen, Datastructuren en Complexiteit (214020 en 214025) Uitwerkingen Bij dit tentamen

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

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

Nadere informatie

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,

Nadere informatie

Tentamen Inleiding Programmeren in Java

Tentamen Inleiding Programmeren in Java Tentamen Inleiding Programmeren in Java Vakcode: 2lI0L7 Datum: 4 februari 2005 Tijd: 13.30-17.00 uur Algemeen: Dit tentamen bestaat uit 4 opgaven, waarvoor in totaal 100 punten verdiend kunnen worden.

Nadere informatie

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014! Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige

Nadere informatie

Negende college algoritmiek. 15 april Dynamisch Programmeren

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

Nadere informatie

9. Strategieën en oplossingsmethoden

9. Strategieën en oplossingsmethoden 9. Strategieën en oplossingsmethoden In dit hoofdstuk wordt nog even terug gekeken naar alle voorgaande hoofdstukken. We herhalen globaal de structuren en geven enkele richtlijnen voor het ontwerpen van

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Recapitulatie: Ongeïnformeerd zoeken. Zoekalgoritmen ( ) College 2: Ongeïnformeerd zoeken. Dynamische breadth-first search

Recapitulatie: Ongeïnformeerd zoeken. Zoekalgoritmen ( ) College 2: Ongeïnformeerd zoeken. Dynamische breadth-first search Recapitulatie: Ongeïnformeerd zoeken Zoekalgoritmen (009 00) College : Ongeïnformeerd zoeken Peter de Waal, Tekst: Linda van der Gaag een algoritme voor ongeïnformeerd zoeken doorzoekt de zoekruimte van

Nadere informatie

Datastructuren college 10

Datastructuren college 10 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen

Nadere informatie

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

compileren & 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 informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

Nadere informatie

Genetische algoritmen in Java met JGAP

Genetische algoritmen in Java met JGAP Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen

Nadere informatie

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties Hashing Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 november 2012 ODE/FHTBM Hashing 29 november 2012 1/30 Hashing Een typisch gebruik van de implementatie

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Datastructuren en algoritmen

Datastructuren en algoritmen Datastructuren en algoritmen Doelstelling Datastructures + algorithms = programs Boek van Niklaus Wirth: bedenker Pascal en Modula Datastructuur: structuur om informatie op te slaan Algoritme: voorschrift

Nadere informatie

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println(Hallo! Voorbeeld Java-programma import java.io.*; één klasse...met één functie...met één opdracht public class Hallo { public static void main (String[] a) { System.out.println("Hallo!"); accolades begrenzen

Nadere informatie

Hoofdstuk 6. Geordende binaire bomen

Hoofdstuk 6. Geordende binaire bomen Hoofdstuk 6 Geordende binaire bomen Eerder bespraken we hoe gelinkte lijsten een zeer flexibele structuur geven. Het zoeken in een gelinkte lijst was echter niet optimaal, aangezien je enkel de lijst van

Nadere informatie

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

definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten recursieve datastructuren college graphs definities Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten E edges, arcs, kanten, pijlen, lijnen verbinding tussen knopen Voorbeelden steden en verbindingswegen

Nadere informatie

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing

Nadere informatie

12 september 2012 Complexiteit. Analyse van algoritmen (doelen) Empirische analyse : Voorbeeld Gevolgen

12 september 2012 Complexiteit. Analyse van algoritmen (doelen) Empirische analyse : Voorbeeld Gevolgen Complexiteit van Algoritmen Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 12 september 2012 ODE/FHTBM Complexiteit van Algoritmen 12 september 2012 1/41 Efficientie-analyse

Nadere informatie

sheets Programmeren 1 Java college 6, Walter Kosters De sheets zijn gebaseerd op met name hoofdstuk 13 en 14 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin: Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk

Nadere informatie

Informatica: C# WPO 10

Informatica: C# WPO 10 Informatica: C# WPO 10 1. Inhoud 2D arrays, lijsten van arrays, NULL-values 2. Oefeningen Demo 1: Fill and print 2D array Demo 2: Fill and print list of array A: Matrix optelling A: Matrix * constante

Nadere informatie

Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren:

Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren: V. Arrays A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele

Nadere informatie

Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen

Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen De implementatie wordt kort besproken in 5.2.6 1. Programmatie Zoekalgoritme Definitie van boom: we hebben geen binaire boom met exact

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

slides7.pdf 23 nov

slides7.pdf 23 nov Onderwerpen Operating Systems Inleiding Algemeen 7 Operating Systems Algoritmen Piet van Oostrum Wat is een Operating System? Wat doet een O.S.? Hoe zit een O.S. in elkaar? (in grote lijnen) Wat zijn de

Nadere informatie

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4 Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4 Jonathan K. Vis 1 Inleiding (blz. 70 72) In dit essay behandelen we bladzijden 70 75 van Donald E. Knuth

Nadere informatie

Datastructuren en Algoritmen voor CKI

Datastructuren en Algoritmen voor CKI Ω /texmf/tex/latex/uubeamer.sty-h@@k 00 /texmf/tex/latex/uubeamer.sty Datastructuren en Algoritmen voor CKI Vincent van Oostrom Clemens Grabmayer Afdeling Wijsbegeerte Hoorcollege 5 16 februari 2009 Waar

Nadere informatie

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord en Leonie Bosveld December 19, 2016 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True

Nadere informatie

Algoritmen, Datastructuren en Complexiteit (214020/5)

Algoritmen, Datastructuren en Complexiteit (214020/5) Universiteit Twente Semester 2005/1 Afdeling Informatica 2 e huiswerkserie 13 december 2005 Algoritmen, Datastructuren en Complexiteit (214020/5) De deadline voor het inleveren van deze huiswerkserie (bij

Nadere informatie

Overerving & Polymorfisme

Overerving & 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 informatie

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST

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

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

VI. Klassen en objecten

VI. Klassen en objecten VI. Klassen en objecten Klassen en objecten vormen het fundament van OOP. We zullen dus uitgebreid aandacht besteden aan klassen en objecten. U kunt Java niet begrijpen zonder goed met klassen en objecten

Nadere informatie

Zelftest Programmeren in Java

Zelftest Programmeren in Java Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test

Nadere informatie

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst s Informatica Hoofdstuk 1 Object Klasse Methode Parameters Type Velden Toestand Compiler Resultaten (returnwaarde) In java fungeren objecten als een model voor de elementen waarin een probleem kan worden

Nadere informatie

TENTAMEN Programmeren 1

TENTAMEN Programmeren 1 TENTAMEN Programmeren 1 vakcode: 213500 datum: 15 augustus 2002 tijd: 13:30 17:00 uur Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Niño/Hosch, en van de handleiding van Programmeren

Nadere informatie

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd

Nadere informatie

Java virtuele machine JVM

Java virtuele machine JVM Implementatie Java Java virtuele machine JVM Java programma vertaald naar byte code instructies Byte code instructies uitgevoerd door JVM JVM is processor architectuur kan in principe in hardware worden

Nadere informatie

T3 in het wild While Juni 2004. Tom de Valk 0115665 Tom Evers 0115525 Sjors Meekels 0138630

T3 in het wild While Juni 2004. Tom de Valk 0115665 Tom Evers 0115525 Sjors Meekels 0138630 T3 in het wild While Juni 2004 Tom de Valk 0115665 Tom Evers 0115525 Sjors Meekels 0138630 INHOUDSOPGAVE Inleiding... 2 1. WHILE OO... 3 1.1 Afbakening... 3 1.2 Uitbreidingen... 3 2. Syntax... 4 3. Semantiek...

Nadere informatie

De volgende opgave gaat over de B-bomen van het college, waar sleutels zowel in de bladeren als ook in de interne knopen opgeslagen worden.

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

Informatica. 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 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 informatie

8. Complexiteit van algoritmen:

8. Complexiteit van algoritmen: 8. Complexiteit van algoritmen: Voorbeeld: Een gevaarlijk spel 1 Spelboom voor het wespenspel 2 8.1 Complexiteit 4 8.2 NP-problemen 6 8.3 De oplossing 7 8.4 Een vuistregel 8 In dit hoofdstuk wordt het

Nadere informatie

Programmeertechnieken

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

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

Opgaven Binair Zoeken en Invarianten Datastructuren, 4 mei 2016, Werkgroep.

Opgaven Binair Zoeken en Invarianten Datastructuren, 4 mei 2016, Werkgroep. Opgaven Binair Zoeken en Invarianten Datastructuren, 4 mei 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

Nadere informatie

Derde college algoritmiek. 23 februari Toestand-actie-ruimte

Derde college algoritmiek. 23 februari Toestand-actie-ruimte College 3 Derde college algoritmiek 23 februari 2012 Toestand-actie-ruimte 1 BZboom: verwijderen 60 20 80 10 40 70 100 1 15 30 75 5 25 35 100 verwijderen = 60 20 80 10 40 70 1 15 30 75 5 25 35 verwijderen

Nadere informatie

extra oefening algoritmiek - antwoorden

extra oefening algoritmiek - antwoorden extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.

Nadere informatie

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall, sheets Programmeren 1 Java college 4, Walter Kosters De sheets zijn gebaseerd op met name hoofdstuk 8 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze

Nadere informatie

TW2020 Optimalisering

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

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Design patterns Startbijeenkomst

Design patterns Startbijeenkomst Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) Sylvia.Stuurman@ou.nl Harrie Passier (2 e examinator) Harrie.Passier@ou.nl Aarzel niet vragen te stellen! Rooster

Nadere informatie

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Bijlage bij opgaven 9. Terugkoppeling 12

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Bijlage bij opgaven 9. Terugkoppeling 12 Open Universiteit Inhoud Introductie 2 Opgaven 3 Bijlage bij opgaven 9 Terugkoppeling 12 1 Open Universiteit Objectgeoriënteerd programmeren in Java 1 I N T R O D U C T I E Deze eindtoets is bedoeld als

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

Java Les 3 Theorie Herhaal structuren

Java Les 3 Theorie Herhaal structuren Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een

Nadere informatie

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet. Les C-02: Werken met Programma Structuur Diagrammen 2.0 Inleiding In deze lesbrief bekijken we een methode om een algoritme zodanig structuur te geven dat er gemakkelijk programmacode bij te schrijven

Nadere informatie

Opdracht 4: Overzichtelijker en generieker

Opdracht 4: Overzichtelijker en generieker Opdracht 4: Overzichtelijker en generieker Algoritmisch Denken en Gestructureerd Programmeren in Greenfoot c 2015 Renske Smetsers-Weeda & Sjaak Smetsers Op dit werk is een creative commons licentie van

Nadere informatie