Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

15
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1

Transcript of Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

Page 1: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

Algoritmen en Datastructuren (ALDAT)

EVMINX4 Week 1

Page 2: 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

Page 3: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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

Page 4: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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 ?

Page 5: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

5

Recursieve datastructurenLijst

leeg ofelement met pointer naar lijst

Stamboomleeg ofpersoon met pointer naar stamboom (van vader)

en pointer naar stamboom (van moeder)

Page 6: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

6

Algorithms+

Datastructures=

Programs

‘76 boek van Niklaus Wirth:

Page 7: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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.

Page 8: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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.

Page 9: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

9

DatastructuresStackQueueVectorSorted vectorLinked ListSorted listBinary TreeSearch treeHash TablePriority Queue (Binary Heap)

Page 10: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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).

Page 11: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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)

Page 12: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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 ?

Page 13: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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 ?

Page 14: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

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.

Page 15: Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 1.

15

Bekende datastructuren