algoritmen en datastructuren (aldat) evminx4 week 1

Post on 24-May-2015

215 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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