De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.

Verwante presentaties


Presentatie over: "1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal."— Transcript van de presentatie:

1 1 PI1 week 9 Complexiteit Sorteren Zoeken

2 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal stappen (niet de tijd) –hangt af van de invoer/argumenten –benadering is goed genoeg Niet: hoe moeilijk is de algoritme?

3 3 Voorbeeld: faculteit int fac (int n) { int result = 1; for (int i = n; i > 0; i -= 1) result = result * i; return result; } aantal stappen evenredig met n. we zeggen: de complexiteit is orde n en schrijven dit als O(n) als we heel nauwkeurig tellen: 3*n + 2.

4 4 Orde (1) result = result * i; cout << "aap" Alle elementaire/eenvoudige operaties hebben complexiteit O (1)

5 5 Vuistregels complexiteit zonder herhalingen en andere functies: O (1) één herhaling-met-teller en bovengrens n : O (n) probleem steeds halveren: O (log n) 2 geneste herhalingen-met-tellertjes: O (n 2 ) alleen grootste term in som telt O (a.n – b) = O (n) n keer O(n m ) = O(n m+1 )  n keer O(n) = O(n 2 )  n keer O(n) + O(log n) = O(n 2 )  n keer O(n 2 ) + O(n) = O(n 3 )

6 6 int volslagenNutteloos (int n) { int result = 1; for (int i = 5; i < n; i = i + 7) result = result * i + i; return result; } int genesteHerhalingen (int n) { for (int i = 0; i < n; i = i + 1) for (int j = 0; j < n; j = j + 1) doeIetsVanOrdeEen (); } genesteHerhalingen is O (n 2 ) volslagenNutteloos is O (n)

7 7 int genesteHerhalingen2 (int n, int m) { for (int i = 0; i < n; i = i + 1) for (int j = 0; j < m; j = j + 1) doeIetsVanOrdeEen (); } genesteHerhalingen2 is O (n x m) int genesteHerhalingen3 (int n) { for (int i = 0; i < n; i = i + 1) for (int j = i; j < n; j = j + 1) doeIetsVanOrdeEen (); } genesteHerhalingen3 is O (n 2 )

8 8 int opeenvolgendeHerhalingen (int n) { for (int i = 0; i < n; i = i + 1) doeIetsVanOrdeEen (); for (int j = 0; j < n; j = j + 1) doeIetsVanOrdeEen (); } opeenvolgendeHerhalingen is O (n) opeenvolgendeHerhalingen2 is O (n + m) int opeenvolgendeHerhalingen2 (int n, int m) { for (int i = 0; i < n; i = i + 1) doeIetsVanOrdeEen (); for (int j = 0; j < m; j = j + 1) doeIetsVanOrdeEen (); }

9 9 Voorbeeld: vergelijken van strings Aantal stappen is evenredig met de lengte van de string: O (min (lengte s, lengte t)) int strcmp (char s [], char t []) {int i = 0; while (s[i] == t[i]) // zolang letters gelijk zijn { if (s[i] == '\0') // einde strings? return 0; // s en t zijn gelijk else i++; // volgende letter } if (s[i] t }

10 10 Woorden zoeken Complexiteit: O (aantal x lengte woord) typedef char Woord […]; int zoekWoord (Woord woord, Woord lijst [], int aantal) { for (int i = 0; i < aantal; i++) { if ( strcmp (woord, lijst[i]) == 0 ) return i; } return aantal; }

11 11 Bubble sort zolang twee elementen naast elkaar uit volgorde zijn: verwissel die zoek steeds de hele rij af –als element groter dan rechterbuur: verwissel ze –als er niets verwisseld is, is rij gesorteerd –herhaal dit totdat alles gesorteerd is

12 12 Rij aflopen: bubbelen bool bubble (El rij [], int laatste) { bool is_gesorteerd = true; for (int i = 0; i < laatste; i++) { if (rij[i] > rij[i+1]) {verwisselElementen(rij,i,i+1); is_gesorteerd = false; } return is_gesorteerd ; } bubble is O (laatste)

13 13 Bubble sort void bubbleSort (El rij[], int aantal) {const int laatste = aantal – 1; while (! bubble (rij, laatste)) ; } void bubbleSort (El rij[], int aantal) {const int laatste = aantal – 1; while (true) {if (bubble (rij, laatste)) return; } Na 'aantal' keer bubbelen is de rij gesorteerd: bubble is O (aantal 2 )

14 14 Zoeken (in een ongesorteerde rij) bool komtVoor (int el, int rij [], int aantal) { for (int i = 0; i < aantal; i++) if (el == rij [i]) return true; return false; } Complexiteit komtVoor is O (aantal)

15 15 Zoeken (in een gesorteerde rij) bool komtVoor3 (int el, int rij [], int aantal) { for (int i = 0; i < aantal; i++) if (el == rij [i]) return true; else if (el < rij [i]) return false; } Complexiteit komtVoor is O (aantal)

16 16 Binair zoeken (halveringsalgoritme) bool zoekBinair (int el, int rij [], int aantal) { int onder = 0, boven = aantal; while (onder < boven) { const int midden = (onder + boven) / 2; if (el == rij [midden]) return true; else if (el < rij [midden]) boven = midden; else onder = midden + 1; } return false; } Complexiteit zoekBinair is O (???)

17 17 Hoe vaak kun je n halveren? int halveer (int n) { int aantal_halv = 0; while (n > 0) {n = n / 2; aantal_halv++; } return aantal_halv; } Antwoord: log n Complexiteit zoekBinair is O (log n)

18 18 Voorbeeld van executietijden aantalO(n)O(n log n)O(n 2 ) 100.01 s 1000.1 s0.2 s1 s 10001 s3 s100 s = 1,7 minuut 10.00010 s40 s10.000 s = 2,8 uur 100.000100 s = 1,7 minuut 500 s = 8,3 minuut 10 6 s = 11,6 dagen

19 19 Wat er behandeld is Dictaat: Hoofdstuk 8.5, Hoofdstuk 7 Boek: -


Download ppt "1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal."

Verwante presentaties


Ads door Google