Algoritmen en Datastructuren (ALDAT)
EVMINX4 Week 1
2
Inhoud ALDATOnderwerpen:
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 710 dagdelen zelfstudie en toetsing (vooral
practicum) in week 1 t/m 84 dagdelen reparatie in week 9 of 10
3
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
4
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 ?
5
Recursieve datastructurenLijst
leeg ofelement met pointer naar lijst
Stamboomleeg ofpersoon met pointer naar stamboom (van vader)
en pointer naar stamboom (van moeder)
6
Algorithms+
Datastructures=
Programs
‘76 boek van Niklaus Wirth:
7
Klassieke datastructurenKlassieke datastructuren kunnen m.b.v. OOP
technieken als herbruikbare componenten 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.
8
DatastructurenDing om data “gestructureerd” in op te slaan.Een template is erg geschikt voor het
implementeren van een datastructuur.Basisbewerkingen:
insert, remove, findempty, full, size
Een bepaalde datastructuur kan op verschillende manieren geïmplementeerd worden.
Een Abstracte Base Class per datastructuur maakt gebruik onafhankelijk van de implementatie.
9
DatastructuresStackQueueVectorSorted vectorLinked ListSorted listBinary TreeSearch treeHash TablePriority Queue (Binary Heap)
10
Big O notationDe 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).
11
Big O notation voorbeeldWat 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)
12
Big O notation voorbeeldWat is de executietijd van het volgende
algoritme in big O notatie:
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;}
T(n) = O(n)
Kan het beter ?
… en als de array al gesorteerd is ?… en als je v.size() processoren hebt ?
13
Big O notation voorbeeldWat 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 ?
14
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.
15
Bekende datastructuren
Top Related