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

Slides:



Advertisements
Verwante presentaties

Advertisements

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Algoritmen en Datastructuren (ALDAT)
Datastructuren Quicksort
Hoofdstuk 8: Recursie.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Gestructureerd programmeren in C
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Tanden poetsen elke dag 2 keer 2 minuten per keer.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Conditionele expressie
1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.

Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
1 Datastructuren Heapsort College 4. 2 Vandaag  Kort: ADT vs Datastructuur  Heaps en Heapsort  Tijd over: ondergrenzen voor sorteren; nog sneller sorteren.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Zoek- en sorteeralgoritmen & Hashing
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
Datastructuren Sorteren: bubble, merge, quick
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Datastructuren Sorteren, zoeken en tijdsanalyse
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
CONTROLESTRUCTUREN (DEEL 1)
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Sorteeralgoritmen. Sorteren: aanpak 1 Hoe ga je een rij getallen sorteren met PC? Sorteren door selectie (= selection sort): Zoek de kleinste waarde Sorteer.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
CONTROLESTRUCTUREN (DEEL 1)
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
1 Datastructuren Quicksort College 3. 2 Vorige keren  O-notaties  Sorteren: insertion sort, bubble sort  Kosten (n 2 ) tijd in het slechtste geval.
1 Datastructuren Sorteren, zoeken en tijdsanalyse College 2.
1 Datastructuren Analyse van algorithmen (vervolg) Heapsort College 4.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
GUI & classes Een Gui in een class steken en het object gebruiken.
Informatie beoordelen If else Switch En Wiskunde.
Minimum Opspannende Bomen
Kennismaking met programmeren
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Gameprogrammeren: Herhalingen
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Voorbeeld: Simulatie van bewegende deeltjes
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Kennismaking met programmeren
Slim tellen.
Sorteren met kaarten.
Implementatie Zoekboom
Object Communication (Jewel Jam)
Slim tellen.
Python – For loop + strings
Python – For loop + strings
Transcript van de presentatie:

1 PI1 week 9 Complexiteit Sorteren Zoeken

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 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 Orde (1) result = result * i; cout << "aap" Alle elementaire/eenvoudige operaties hebben complexiteit O (1)

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 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 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 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 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 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 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 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 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 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 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 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 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 Voorbeeld van executietijden aantalO(n)O(n log n)O(n 2 ) s s0.2 s1 s s3 s100 s = 1,7 minuut s40 s s = 2,8 uur s = 1,7 minuut 500 s = 8,3 minuut 10 6 s = 11,6 dagen

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