Upload
katrien-brabander
View
221
Download
0
Embed Size (px)
Citation preview
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