Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid.
|
|
- Karolien Smit
- 6 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Complexiteit of efficiëntie van algoritmen Hoe meet je deze? Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid. Een betere maatstaf is het aantal berekeningsstappen dat moet worden gedaan. We zijn niet zozeer geïnteresseerd in het precieze aantal stappen maar in de toename van het aantal stappen als het probleem 2 of 10 of 100 keer zo groot wordt gemaakt. for (int k=0; k < n; k++) { sum = sum + k; Als ik n 10 keer groter maak, moeten er 10 keer zo veel stappen worden gemaakt, bij 100 keer groter 100 keer meer stappen Daarom zeggen dat de complexiteit van dit algoritme O(n): orde n. Het aantal stappen neemt lineair toe met de grootte van n. Data Structuren en Algoritmen - Sorteren augustus
2 Complexiteit vervolg for (int k=0; k < n; k++) { for (int m = 0; m < n; m++) {. for (int k=0; k < n; k++) { for (int m = 0; m < k; m++) {. Wat is de complexiteit van deze geneste lussen? Maakt het wat uit dat de binnenste lus in de ene tot n en de andere tot k loop? Neem bv n = 10: in bovenste: 100 stappen In onderste: stappen Dat lijkt verschillend maar: Als n = 100, in bovenste stappen in onderste = 5050 stappen In beide gevallen neemt het aantal stappen met +/- een factor 100 toe. Daarom voor beide is de complexiteit: O(n^2) Data Structuren en Algoritmen - Sorteren augustus
3 Complexiteit vervolg Bestuderen van complexiteit van algoritmen is een belangrijke activiteit binnen de informatica. Zie bv: De complexiteit van een algoritme zegt iets over de mogelijkheid het algoritme binnen redelijke tijd uit te voeren. Voor veel, op het oog eenvoudige, problemen zijn bv alleen exponentiële algoritmen bekend, dus O(2^n) - handelsreizigersprobleem: vindt de kortste route langs n steden - zo efficiënt mogelijk plaatsen van n componenten op een microchip - vinden van priemfactoren in een getal van lengte n (aantal decimalen). Heel belangrijk in de cryptografie. Praktisch betekent dit dat deze problemen voor n vanaf orde 100 niet meer oplosbaar zijn. Voor de eerste 2 bestaan goede benaderende algoritmen, die voor de praktijk goed genoeg zijn. Voor het vinden van priemfactoren is (nog) geen nietexponentiële methode gevonden! PKI maakt hier dankbaar gebruik van (behandeld in IBV) Data Structuren en Algoritmen - Sorteren augustus
4 Sorteren Sorteren speelt een belangrijke rol in diverse algoritmen. Daarom is er behoefte aan efficiënte sorteer algoritmen. Er bestaan veel verschillende sorteer algoritmen, ieder met zijn eigen voor en nadelen. We beschouwen hier een aantal verschillende algoritmen vanuit complexiteitsoogpunt. Zie ook: Data Structuren en Algoritmen - Sorteren augustus
5 Sorteren: Selection sort Het selection sort algoritme is eenvoudig: static void selsort(int a[], int n) {// n is lengte int m,h; for (int i = 0; i < n; i++) { m = i; for (int j = i+1; j < n; j++) { if (a[j] < a[m]) m = j;, h = a[i]; a[i] = a[m]; a[m] = h; Het selecteert steeds het kleinste element uit de rest van het array en zet dit vooraan. Dit algoritme heeft complexiteit n^2 (vanwege geneste lus). Dus voor een array van lengte 1000, moeten er stappen doorlopen worden! Dit loopt dus heel hard op als n groter wordt! Als n = dus stappen! Vraag Hoelang duurt het ongeveer om een array van lengte te sorteren als je 10^9 stappen per sec kan doen. Data Structuren en Algoritmen - Sorteren augustus
6 Sorteren (vervolg) Gelukkig is het mogelijk efficiënter te sorteren. Een bekend snel sorteer algoritme is het Quicksort algoritme. Bij quicksort verdeel je een array herhaaldelijk in tweeën, waarbij alle elementen in het eerste deel kleiner zijn dan die in het tweede (gebeurt in split). static void qsort(int[] a, int low, int up) { int m; if (low < up) { m = split(a, low, up); qsort(a, low, m - 1); qsort(a, m + 1, up); static int split(int[] a, int low, int up) { int h, m; // hulp var m = low; // initialisatie // invariant: a[low.. m-1]< a[m] <= a[m+1..i-1] for (int i = low + 1; i <= up; i++) { if (a[i] < a[m]) { h = a[i]; a[i] = a[m+1]; a[m+1] = a[m]; a[m] = h; m++; return m; Aanroep: qsort(a,0,n-1); Data Structuren en Algoritmen - Sorteren augustus
7 Sorteren (vervolg) De functie split splitst een array tussen de grenzen low en up [low..up] in twee stukken: elementen kleiner dan het eerste element (pivot element) en elementen groter dan de pivot Tijdens de uitvoering van split geldt voor i en m steeds het volgende: a[low.. m-1]< a[m] <= a[m+1..i-1] Als nu a[i] >= a[m] dan kunnen we i een opschuiven. Als a[i] < a[m] dan: schuiven we a[m+1] naar a[i], a[m] naar a[m+1] en a[i] naar a[m] (rotatie). Ga na dat we nu weer in de situatie van het plaatje zitten met i 1 opgeschoven. Wat is nu de complexiteit van qsort? split kost in de orde van n stappen (1 for lus). Hoe vaak wordt split aangeroepen: als het segment door split steeds in twee gelijke delen wordt gesplitst, roepen we split net zo vaak aan als we een segment kunnen halveren voordat de lengte van het segment 1 wordt. Dit is 2 log n. Data Structuren en Algoritmen - Sorteren augustus
8 Sorteren (vervolg) De totale complexiteit wordt dus: n * 2 log n Voor een array van lengte 1000 is dit dus ongeveer: (dus 100 * zo snel als selsort!). De voorwaarde was echter dat split een segment in ongeveer twee gelijke delen splitste. Als dit niet gebeurt is de situatie slechter. In het slechtste geval (bv. als het array al gesorteerd is) is de complexiteit weer n 2. Probeer maar eens uit op een klein voorbeeld! Let op: dit hangt natuurlijk ook af van de keuze van het pivot element. Hier kiezen we het eerste element steeds als pivot. Je kan ook het middelste element kiezen. In dat geval gaat het sorteren van een (minof-meer) al gesorteerd array veel sneller! Vraag Hoelang duurt het sorteren van ons array nu ( 2 log = 23)? Data Structuren en Algoritmen - Sorteren augustus
9 Merge sort Mergesort is een ander voorbeeld van een sorteer algoritme met complexiteit n* 2 log n. De belangrijkste verschillen met quicksort zijn: - quicksort sorteert in het oorspronkelijke array, mergesort heeft een hulp-array nodig. - mergesort is gegarandeerd n* 2 log n, terwijl quicksort in het slechtste geval complexiteit n 2 heeft. Het merge-sort algoritme is eenvoudiger dan quicksort. Het idee is het array herhaald in tweeën te delen tot er stukken over blijven met lengte 1 of 0. Twee gesorteerde delen kunnen ge-merged (samengevoegd) tot een gesorteerd gedeelte. De functie merge voegt de twee gesorteerde deelarrays [low..m] en [m+1..up] samen tot een nieuw gesorteerd array (schuift ze in elkaar door steeds het volgende kleinste element te kiezen). Op het einde wordt het sorteerde array weer teruggekopieerd naar het oorspronkelijk array: [low..up-1] De functie mergesort deelt het array in twee delen, sorteert deze beide recursief en merged dan deze twee gesorteerde delen. Data Structuren en Algoritmen - Sorteren augustus
10 Merge sort static void merge(int a[],int h[],int low,int m,int up) { int i1 = low, i2 = m + 1, r = low; while (i1 <= m && i2 <= up) { if (a[i1] <= a[i2]) { h[r++] = a[i1++]; else { h[r++] = a[i2++]; while (i1 <= m) { h[r++] = a[i1++]; while (i2 <= up) { h[r++] = a[i2++]; for (i1 = low; i1 <= up; i1++) { a[i1] = h[i1]; static void mergesort(int a[], int h[], int low, int up) { int m; if (low < up) { m = (low + up) / 2; mergesort(a, h, low, m); mergesort(a, h, m + 1, up); merge(a, h, low, m, up); public static void main(string[] args) { int a[] = new int[]{6, 5, 4, 3, 2, 1, 7, 10, 13, 18, 20, 12, 15, 14, 9, 16, 17, 8, 19, 11; int h[] = new int[20]; mergesort(a, h, 0, 19); for (int i = 0; i < 20; i++) { System.out.print("" + a[i] + " "); System.out.println(); Data Structuren en Algoritmen - Sorteren augustus
11 Heap sort Als laatste sorteer algoritme bekijken we heap sort. Heap sort heeft gegarandeerde n * 2 log n complexiteit en heeft geen extra array nodig! Het nadeel van heap sort is dat het algoritme nogal complex is. Het heap sort algoritme bestaat uit twee slagen: - In de eerste slag wordt het array in de zgn. heap conditie gebracht. - In de tweede slag wordt het array in heap conditie gesorteerd. Beide slagen hebben een complexiteit n * 2 log n. Data Structuren en Algoritmen - Sorteren augustus
12 Heap conditie Om te begrijpen wat een array in heap conditie is moeten we het array voorstellen als een boom. Het array a is in de heap conditie als geldt: a[vader] >= a[zoon] voor alle vaders en zonen. Als a[i] een vader is dan zijn: a[2*i + 1] en a[2*i + 2] zijn zonen. Als a[i] een zoon is dan is a[(i-1) / 2] zijn vader (geheeltalige deling dus 5 / 2 = 2 bv). (Dit geldt niet voor a[0] (want (0-1) / 2 == 0!). Bij a[0] moeten we dus oppassen!) Data Structuren en Algoritmen - Sorteren augustus
13 Algoritme om array in heap conditie te brengen static void makeheap(int a[], int n) { int i, elem; for (i = 1; i < n; i++) { elem = a[i]; moveup(a, elem, i); static void moveup(int a[], int elem, int blad) { // pre: a[0..blad-1] in heap conditie // post: a[0..blad] in heap conditie int father, son; son = blad; father = (son - 1) / 2; while (father >= 0 && elem > a[father]) { a[son] = a[father]; son = father; if (son == 0) { father = - 1; // om te stoppen else { father = (son - 1) / 2; a[son] = elem; Het idee is om beginnend in blad langs de takken van de boom omhoog te lopen totdat je of aan de top bent gekomen (elem is het grootste element), of je de juiste plaats hebt gevonden waar elem moet worden ingevoegd. Bij het omhoog lopen wordt een vader steeds in positie van de zoon geplaatst. Data Structuren en Algoritmen - Sorteren augustus
14 Complexiteit van makeheap makeheap bevat een lus van lengte n - 1. moveup bevat een while-lus die van een blad in de boom tot hooguit de top loopt. Aangezien de boom niet dieper is dan 2 log n, kan moveup niet meer dan 2 log n stappen hebben. De totale complexiteit van makeheap wordt dus: n * 2 log n Data Structuren en Algoritmen - Sorteren augustus
15 Sorteren van een array in heap conditie In de top van een heap bevindt zich altijd het grootste element. Dit element plaatsen we op de laatse plaats in het array waarna we het element dat op de laatste plaats stond opnieuw van bovenaf in de heap (maar nu eentje korter) plaatsen. Dit proces herhalen we totdat alle elementen aan de beurt zijn geweest. static void movedown(int a[], int elem, int last) { // pre: a[1..last] is een heap (a[0] ontbreekt) // pre: a[0..last] is een heap en elem is ingevoegd int father, son; father = 0; son = maxson(a, father, last); while (son <= last && elem < a[son]) { a[father] = a[son]; father = son; son = maxson(a, father, last); a[father] = elem; static void sortheap(int a[], int n) { int i, h; for (i = n - 1; i > 0; i--) { h = a[i]; a[i] = a[0]; movedown(a, h, i - 1); movedown plaatst een element van bovenaf in een heap h is het element dat geplaatst moet worden en i - 1 is de index van het laatste element in de heap (de heap wordt steeds 1 korter). movedown werkt op vergelijkbare manier als moveup, alleen ga je nu langs de taken naar beneden, waarbij je steeds de tak neemt van de grootste zoon en deze zoon eentje naar boven schuift. Data Structuren en Algoritmen - Sorteren augustus
16 Sorteren van een array in heap conditie static int maxson(int a[], int father, int last) { int son; son = 2 * father + 1; if (son >= last) { return son; else if (a[son] < a[son + 1]) { return son + 1; else { return son; Voor de complexiteit van sortheap geldt hetzelfde verhaal als voor makeheap, deze is dus ook: n* 2 log n static void heapsort(int a[], int n) { makeheap(a, n); sortheap(a, n); Data Structuren en Algoritmen - Sorteren augustus
17 Samenvatting Verschillende manieren van sorteren. Er is niet een beste. Voor korte arrays is selection sort ok qsort is vooral goed als het array een bijna random verdeling heeft mergesort is onafhankelijk van de verdeling maar heeft hulp array nodig heapsort heeft een vrij hoge overhead en daarom minder geschikt voor kleine arrays Opgave Oefen op papier met de verschillende algoritmen Volgende les moet je kunnen laten zien dat je deze op een voorbeeld kan toepassen. Data Structuren en Algoritmen - Sorteren augustus
Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort
College 6 Zesde college complexiteit 19 maart 2019 Mergesort, Ondergrens sorteren Quicksort, Shellsort 1 Vorige keer Voor sorteeralgoritmen gebaseerd op arrayvergelijkingen, waarbij per arrayvergelijking
Nadere informatieZevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort
College 7 Zevende college complexiteit 17 maart 2008 Ondergrens sorteren, Quicksort 1 Sorteren We bekijken sorteeralgoritmen gebaseerd op het doen van vergelijkingen van de vorm A[i] < A[j]. Aannames:
Nadere informatieZevende college algoritmiek. 24 maart Verdeel en Heers
Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties
Nadere informatieZevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort)
College 7 Zevende college complexiteit 7 maart 2017 Mergesort, Ondergrens sorteren (Quicksort) 1 Inversies Definitie: een inversie van de permutatie A[1],A[2],...,A[n] is een paar (A[i],A[j]) waarvoor
Nadere informatieHoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding
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
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 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. 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 informatieOpgaven QuickSort 3 mei 2019, Werkgroep, Datastructuren.
Opgaven QuickSort 3 mei 2019, Werkgroep, Datastructuren. Als je klaar bent, maak dan de opgaven van vorige keer af. Cijfer: Op een toets krijg je meestal zes tot acht opgaven. 1. Doe QuickSort: Voer QuickSort
Nadere informatieDivide & Conquer: Verdeel en Heers vervolg. Algoritmiek
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek Algoritmische technieken Vorige keer: Divide and conquer techniek Aantal toepassingen van de techniek Analyse met Master theorem en substitutie Vandaag:
Nadere informatieVoortgezet 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 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 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 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 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 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 informatieRecursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40
Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N
Nadere informatieVierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument
Complexiteit 2019/04 College 4 Vierde college complexiteit 26 februari 2019 Beslissingsbomen en selectie Toernooimethode Adversary argument 1 Complexiteit 2019/04 Zoeken: samengevat Ongeordend lineair
Nadere informatiesheets 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 informatieUitgebreide uitwerking Tentamen Complexiteit, mei 2007
Uitgebreide uitwerking Tentamen Complexiteit, mei 007 Opgave. a. Een beslissingsboom beschrijft de werking van het betreffende algoritme (gebaseerd op arrayvergelijkingen) op elke mogelijke invoer. In
Nadere informatieREEKS I. Zaterdag 6 november 2010, 9u
TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS I Zaterdag 6 november 2010, 9u NAAM :... VRAAG 1: MINSTENS [5 PUNTEN] Schrijf een methode minstens(), met twee
Nadere informatieVierde college algoritmiek. 23/24 februari Complexiteit en Brute Force
Algoritmiek 2017/Complexiteit Vierde college algoritmiek 23/24 februari 2017 Complexiteit en Brute Force 1 Algoritmiek 2017/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:
Nadere 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 informatieAchtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren
Achtste college algoritmiek 12 april 2019 Verdeel en Heers Dynamisch Programmeren 1 Uit college 7: Partitie Partitie Partitie(A[l r]) :: // partitioneert een (sub)array, met A[l] als spil (pivot) p :=
Nadere 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 informatieVierde 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 informatiealgoritmiek - antwoorden
2016 algoritmiek - antwoorden F. Vonk versie 1 28-8-2016 inhoudsopgave eenvoudige algoritmes... - 3 - complexe algoritmes... - 7 - zoeken (vwo)... - 10 - sorteren (vwo)... - 12 - Dit werk is gelicenseerd
Nadere informatieVijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument
Complexiteit 2017/05 College 5 Vijfde college complexiteit 21 februari 2017 Selectie Toernooimethode Adversary argument 1 Complexiteit 2017/05 Opgave 28 Gegeven twee oplopend gesorteerde even lange rijen
Nadere informatierecursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie
Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk
Nadere informatieVoorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Nadere informatieTiende college algoritmiek. 26 april Gretige algoritmen
Algoritmiek 01/10 College 10 Tiende college algoritmiek april 01 Gretige algoritmen 1 Algoritmiek 01/10 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag
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 informatieOpgaven 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 informatie2 Recurrente betrekkingen
WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen
Nadere informatieDivide & Conquer: Verdeel en Heers. Algoritmiek
Divide & Conquer: Verdeel en Heers Algoritmiek Algoritmische technieken Trucs; methoden; paradigma s voor het ontwerp van algoritmen Gezien: Dynamisch Programmeren Volgend college: Greedy Vandaag: Divide
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 informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan
Nadere informatieTiende college algoritmiek. 14 april Gretige algoritmen
College 10 Tiende college algoritmiek 1 april 011 Gretige algoritmen 1 Greedy algorithms Greed = hebzucht Voor oplossen van optimalisatieproblemen Oplossing wordt stap voor stap opgebouwd In elke stap
Nadere informatieTiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra
College 10 Tiende college algoritmiek mei 013 Gretige algoritmen, Dijkstra 1 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag van n (n 0) eurocent. Alle
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 informatieDivide & Conquer: Verdeel en Heers. Algoritmiek
Divide & Conquer: Verdeel en Heers Algoritmiek Algoritmische technieken Trucs; methoden; paradigma s voor het ontwerp van algoritmen Gezien: Dynamisch Programmeren Hierna: Greedy Vandaag: Divide & Conquer
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 informatieSmall Basic Programmeren Text Console 2
Oefening 1: Hoogste getal Je leest een reeks positieve gehele getallen in totdat je het getal 0 (nul) invoert. Daarna stopt de invoer en druk je een regel af met het hoogste getal uit de reeks. Voorbeeld:
Nadere informatieDerde college complexiteit. 7 februari Zoeken
College 3 Derde college complexiteit 7 februari 2017 Recurrente Betrekkingen Zoeken 1 Recurrente betrekkingen -1- Rij van Fibonacci: 0,1,1,2,3,5,8,13,21,... Vanaf het derde element: som van de voorgaande
Nadere informatieZesde college algoritmiek. 18 maart Backtracking. Verdeel en Heers
College 6 Zesde college algoritmiek 18 maart 2016 Backtracking Verdeel en Heers 1 Backtracking Basisidee backtracking bouw een oplossing stap voor stap op en controleer steeds of de deeloplossing in conflict
Nadere informatieProgra-MEER - Algoritmiek Leuven 20 maart 2018
Progra-MEER - Leuven 20 maart 2018 Bart Demoen KU Leuven Veerle Fack UGent Frank Neven/Wim Lamotte UHasselt schooljaar 2017-2018 Vandaag... 2/33 waar staan we i.v.m. 24 april? werkblad met twee thema s
Nadere informatieUitgebreide uitwerking Tentamen Complexiteit, juni 2018
Uitgebreide uitwerking Tentamen Complexiteit, juni 018 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.
Nadere informatieVijfde college algoritmiek. 9 maart Brute Force. Exhaustive search
Vijfde college algoritmiek 9 maart 2018 Brute Force Exhaustive search 1 Before I say another word Opdracht 1 partner? deadline: 21/22 maart 2018 vragenuren vanmiddag, 15.30 uur (Jacob) woensdag 21 maart,
Nadere informatieVierde college complexiteit. 14 februari Beslissingsbomen
College 4 Vierde college complexiteit 14 februari 2017 Restant zoeken Beslissingsbomen 1 Binair zoeken Links := 1; Rechts := n; while Links Rechts do Midden := Links + Rechts 2 ; if X = A[Midden] then
Nadere informatieRecursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!
Recursie Faculteit: in de wiskunde: n! is gedefiniëerd als: 0! = 1 n! = n (n 1)! in Java: public static int faculteit( int n ) // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!
Nadere 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 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 informatieAchtste college algoritmiek. 8 april Dynamisch Programmeren
Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst
Nadere informatie1 Complexiteit. of benadering en snel
1 Complexiteit Het college van vandaag gaat over complexiteit van algoritmes. In het boek hoort hier hoofdstuk 8.1-8.5 bij. Bij complexiteitstheorie is de belangrijkste kernvraag: Hoe goed is een algoritme?
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 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 informatieDerde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte
Algoritmiek 2018/Complexiteit Derde college algoritmiek 2 februari 2018 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2018/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:
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 informatieProgrammeren (1) Examen NAAM:
Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft
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 informatieZoek- en sorteeralgoritmen en hashing
Zoek- en sorteeralgoritmen en hashing Femke Berendsen (3689301) en Merel van Schieveen (3510190) 9 april 2013 1 Inhoudsopgave 1 Inleiding 3 2 Zoek- en sorteeralgoritmen 3 2.1 Grote O notatie..........................
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 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 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 informatieElke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.
Versie 16 januari 2017 Sorteren unplugged Sorteren gebeurt heel veel. De namen van alle leerlingen in de klas staan vaak op alfabetische volgorde. De wedstrijden van een volleybal team staan op volgorde
Nadere informatieOpgaven Heaps Datastructuren, 8 juni 2018, Werkgroep.
Opgaven Heaps Datastructuren, 8 juni 2018, 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 informatieDe 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 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 informatieTwaalfde college algoritmiek. 23 mei Branch & Bound, Heapsort
College 12 Twaalfde college algoritmiek 23 mei 2013 Branch & Bound, Heapsort 1 Handelsreizigersprobleem Traveling Salesman Problem (handelsreizigersprobleem) Gegeven n steden waarvan alle onderlinge afstanden
Nadere informatieTentamen Programmeren in C (EE1400)
TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd
Nadere informatieDe symmetrische min-max heap
De symmetrische min-max heap Tweede programmeeropdracht Datastructuren, najaar 2006 De symmetrische min-max heap (SMM heap) is een datastructuur waarin getallen (of andere elementen met een lineaire ordening)
Nadere informatieTiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS
Algoritmiek 2016/Dynamisch Programmeren Tiende college algoritmiek 14 april 2016 Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS 1 Algoritmiek 2016/Dynamisch Programmeren Houtzaagmolen
Nadere informatieDe doorsnede van twee verzamelingen vinden
De doorsnede van twee verzamelingen vinden Inleiding Daniel von Asmuth 12 februari 2015 Dit artikel vergelijkt enkele algoritmen om de doorsnede van twee verzamelingen of rijen van getallen te vinden.
Nadere informatieEerste Toets Datastructuren 11 juli 2018, , Educ-α.
Eerste Toets Datastructuren 11 juli 2018, 13.30 15.30, Educ-α. Motiveer je antwoorden kort! Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe je de vraag interpreteert
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 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 informatieHOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren
HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet
Nadere 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 informatieIngebouwde klassen & methodes
Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private
Nadere informatieInformatica: C# WPO 11
Informatica: C# WPO 11 1. Inhoud Pass by reference (ref, out), recursie, code opdelen in verschillende codebestanden 2. Oefeningen Demo 1: Swapfunctie Demo 2: TryParse(int) Demo 3: Recursion Tree Demo
Nadere informatieDerde college algoritmiek. 22 februari Complexiteit Toestand-actie-ruimte
Algoritmiek 2019/Complexiteit Derde college algoritmiek 22 februari 2019 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2019/Complexiteit Opgave 1 bomenpracticum Niet de bedoeling: globale (member-)variabele
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 informatieUitgebreide uitwerking Tentamen Complexiteit, juni 2017
Uitgebreide uitwerking Tentamen Complexiteit, juni 017 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen
Nadere informatieNAAM: 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 informatieTiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra
Tiende college algoritmiek mei 018 Gretige Algoritmen Algoritme van Dijkstra 1 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag van n (n 0) eurocent. Alle
Nadere informatieVierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force
Algoritmiek 2019/Toestand-actie-ruimte Vierde college algoritmiek 1 maart 2019 Toestand-actie-ruimte Brute Force 1 Algoritmiek 2019/Toestand-actie-ruimte Torens van Hanoi Voorbeeld 3: Torens van Hanoi
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)
Nadere informatieAlgoritmes in ons dagelijks leven. Leve de Wiskunde! 7 April 2017 Jacobien Carstens
Algoritmes in ons dagelijks leven Leve de Wiskunde! 7 April 2017 Jacobien Carstens Wat is een algoritme? Een algoritme is een eindige reeks instructies die vanuit een gegeven begintoestand naar een beoogd
Nadere informatieOpgaven Lineair Sorteren Datastructuren, 15 mei 2019, Werkgroep.
Opgaven Lineair Sorteren Datastructuren, 15 mei 2019, 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
Nadere informatieUitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Nadere 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 informatieEerste Toets Datastructuren 22 mei 2019, , Educ-β en Megaron.
Eerste Toets Datastructuren 22 mei 209, 3.30 5.30, Educ-β en Megaron. Motiveer je antwoorden kort! Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe je de vraag
Nadere informatieREEKS II. Zaterdag 6 november 2010, 11u
TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS II Zaterdag 6 november 2010, 11u NAAM :... VRAAG 1: AFSTAND [5 PUNTEN] In deze oefening gaan we opzoek naar identieke
Nadere informatieDynamisch Programmeren. Het Rugzakprobleem
INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................
Nadere informatieIeder tweetal heeft nodig: Een kopie van de slagschipspelletjes: 1. 1A, 1B voor spel A, 2B voor spel A, 3B voor spel 3
Activiteit 6 Slagschepen Zoekalgoritme Samenvatting Computers zijn vaak nodig om informatie te vinden in grote hoeveelheden data. Ze moeten een snelle en efficiënte manier ontwikkelen om dit te doen. Deze
Nadere informatieEen eenvoudig algoritme om permutaties te genereren
Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieHeuristieken en benaderingsalgoritmen. Algoritmiek
Heuristieken en benaderingsalgoritmen Wat te doen met `moeilijke optimaliseringsproblemen? Voor veel problemen, o.a. optimaliseringsproblemen is geen algoritme bekend dat het probleem voor alle inputs
Nadere informatie