150 likes | 313 Views
Algoritmen en Datastructuren (ALDAT). EVMINX4 Week 1. Inhoud ALDAT. Onderwerpen: Algoritmen en Datastructuren STL (standaard C++ library) Diverse toepassingen van algoritmen en datastructuren Spelletjes! Werkvormen: 7 dagdelen theorie + practicum (+/- 14 uur theorie) in week 1 t/m 7
E N D
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1
Inhoud ALDAT Onderwerpen: Algoritmen en DatastructurenSTL (standaard C++ library) Diverse toepassingen van algoritmen en datastructurenSpelletjes! Werkvormen: 7 dagdelen theorie + practicum (+/- 14 uur theorie) in week 1 t/m 7 10 dagdelen zelfstudie en toetsing (vooral practicum) in week 1 t/m 8 4 dagdelen reparatie in week 9 of 10
Leermiddelen Boeken Thinking in C++ 2nd Edition, Volume 1 + 2, Bruce Eckel Praktisch UML, 2de editie, Warmer en Kleppe Dictaat (zelf dubbelzijdig afdrukken!) Studiewijzer Aanvullingen op theorie Extra voorbeelden Handouts (bij dagdeel 5 en 6) Blackboard en http://bd.eduweb.hhs.nl/aldat/ Studiewijzer met uitgebreide planning Dictaat Practicumopdrachten + uitgebreide practicumhandleiding Sourcecode van alle voorbeelden Sheets Links
Voorbeeld Statische datastructuur:struct deelnemer {int punten;char naam[80];};struct stand {int aantalDeelnemers;deelnemer lijst[100];};stand s; De nadelen van het gebruik van de ingebouwde datastructuren struct en array zijn: de grootte van de array's lijst en naam moet bij het vertalen van het programma bekend zijn en kan niet aangepast worden (=statisch). elke deelnemer neemt evenveel ruimte in onafhankelijk van de lengte van zijn naam (=statisch). het verwijderen van een deelnemer uit de stand is een heel bewerkelijke operatie. Do you remember PROS2 ?
Recursieve datastructuren Lijst leeg of element met pointer naar lijst Stamboom leeg of persoon met pointer naar stamboom (van vader) en pointer naar stamboom (van moeder)
‘76 boek van Niklaus Wirth: Algorithms + Datastructures = Programs
Klassieke datastructuren Klassieke datastructuren kunnen m.b.v. OOP technieken als herbruikbarecomponenten worden geïmplementeerd. Er zijn diverse component- bibliotheken verkrijgbaar: STL (Standard Template Library) Opgenomen in ISO/ANSI C++ std (sept 1998) Aanwezig in C++ Builder, Microsoft Visual C++ en gcc.
Datastructuren Ding om data “gestructureerd” in op te slaan. Een template is erg geschikt voor het implementeren van een datastructuur. Basisbewerkingen: insert, remove, find empty, full, size Een bepaalde datastructuur kan op verschillende manieren geïmplementeerd worden. Een Abstracte Base Class per datastructuur maakt gebruik onafhankelijk van de implementatie.
Datastructures Stack Queue Vector Sorted vector Linked List Sorted list Binary Tree Search tree Hash Table Priority Queue (Binary Heap)
Big O notation De big O notatie wordt gebruikt om de executietijd en het geheugengebruik van algorithmen met elkaar te vergelijken. De O staat voor 'order of magnitude‘. f(n)=O(n2) betekent dat functie f(n) “van boven” asymptotisch begrensd wordt door g(n)=n2. Dit betekent dat f(n) a·n2 voor grootte waarden van n. Waarbij a 0 (je mag a zelf kiezen).
Big O notation voorbeeld Wat is de big O notatie voor: f(n) = 2n3 + 4n + 2 log2 n + 100. f(n) = 4 log2 n. f(n) = log10 n. Bedenk: log10 n = log2 n / log2 10. f(n) = 1000. f(x) = (10x4 + 4x2) / (5x3 + 12x2 + 7x). = O(n3) = O(log2n) = O(log2n) = O(1) = O(x)
Big O notation voorbeeld Wat is de executietijd van het volgende algoritme in big O notatie: T(n) = O(n) unsigned int max(vector<unsigned int> v) { vector<unsigned int>::size_type n = v.size(); unsigned int max = 0; for (vector<unsigned int>::size_type i = 0; i < n; ++i) { if (v[i] > max) { max=v[i]; } } return max; } Kan het beter ? … en als je v.size() processoren hebt ? … en als de array al gesorteerd is ?
Big O notation voorbeeld Wat is de executietijd van het volgende algoritme in big O notatie: unsigned int maxprod(vector<unsigned int> v) { vector<unsigned int>::size_type n = v.size(); unsigned int max = 0; for (vector<unsigned int>::size_type i=0; i<n; ++i) { for (vector<unsigned int>::size_type j=i+1; j<n; ++j) { if (v[i]*v[j]>max) { max=v[i]*v[j]; } } } return max; } T(n) = O(n2) Kan het beter ?
Big O notation Je ziet dat een O(n2) algoritme niet bruikbaar is voor hele grote hoeveelheden data en dat een O(10n) algoritme zo wie zo niet bruikbaar is.