Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAdriana van der Linden Laatst gewijzigd meer dan 9 jaar geleden
1
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden
2
De herhalingsfrequentie “het aantal herhalingen in een algoritme.” Voorbeeld: Herhalingsfrequentie: O-notatie: for(int i=0;i<10000;i++) { for(j=0;j<n*n;j++) {schrijf weg;} }
3
Regels O-notatie
4
De O-notatie Wat nu? if(iets==1) {schrijf 1 keer weg;} else{ for(int i=0;i<n;i++) { schrijf weg; }
5
De O-notatie Bij if-else constructies complexiteitsontwikkeling onvoorspelbaar. Derhalve: Worst case gedrag bepalen Best case gedrag bepalen Indien mogelijk: statistiek en kansrekening gebruiken om gemiddelde gedrag te bepalen.
6
Eindigheid van algoritmen Heeft een probleem een oplossing? Hoe dit te bepalen? Programma? Kan dit?! eindig(algoritme x) if( algoritme x==eindig) return true else return false
7
Eindigheid van algoritmen Algoritme dat zichzelf analyseert: eindig(algoritme) oneindig(algoritme) Oneindig(algoritme) eindig(algoritme) Algoritme() if(eindig(algoritme) {blijf oneindig doorgaan} else{return}
8
Eindigheid van algoritmen Conclusie: Algoritme dat eindigheid van een algoritme bepaalt, bestaat niet. Er zijn algoritmen mogelijk, waarvan niet is vast te stellen of ze eindig zijn. Bijv: Foo(int x) while(x!=1) if(x%2==0){x/=2;} else{ x=((3*x)+1;)} return;
9
Filosoferen? Algoritme dat eindigheid van algoritme bepaalt. Ben je je bewust van je eigen bewustzijn? Ja? Hoeveel complexiteit is daarvoor nodig? Begrijpt een tafel dat ie een tafel is? Begrijpt Wessel zichzelf? Nee!
10
Soorten problemen Polynomiale problemen: Doenlijke problemen: Sorteren van kleingeld Sorteren van lijsten Algemeen: complexiteitsontwikkeling ≤ Niet polynomiale problemen: Ondoenlijk: Ingestort zandkasteel precies nabouwen. Kraken van 448 bit Blowfish encrypted bestand. Algemeen: complexiteitsontwikkeling:
11
Soorten problemen Misschien polynomiaal: Niet deterministisch polynomiaal: Misschien te doen…..misschien niet…. Irak Israël / Palestijnen Handelsreizigersprobleem Rugzakprobleem
12
Recursie en bewijsvoering Uitdaging: zo efficiënt mogelijke software schrijven. Opdracht: Schrijf een programma dat de optelsom alle gehele positieve getallen onder een gegeven n berekent.
13
Recursie en bewijsvoering Schrijf een programma dat de optelsom van alle gehele positieve getallen onder een gegeven n berekent. Functie(5) levert: 5+4+3+2+1=15 Functie(8) levert: 8+7+6+5+4+3+2+1=36
14
Recursie en bewijsvoering Oplossing: Complexiteitsontwikkeling? Wiskundige notatie? Welnu: Functie(int x) { int result=0 for(int i=1;i<=x;i++) {result+=i;} return result; }
15
Recursie en bewijsvoering Goh…. Misschien geldt: Eens kijken… n 11 23 36 410 515 621 728 836 945
16
Recursie en bewijsvoering n 111 233 366 410 515 621 728 836 945
17
Recursie en bewijsvoering Hoe te bewijzen dat: Met predicatenlogica:
18
Inductieve bewijsvoering Dit betekent: Bewijs de eigenschap (= het predicaat) voor een getal (b). Toon aan dat daaruit volgtdat de eigenschap ook geldt voor het volgende getal… Hoe dit te vertalen naar:
19
Inductie: Basisstap Gooi de eerste dominosteen om: Vul het getal 1 in, in de vergelijking: Eerste steen omgegooid…
20
Inductie: inductiestap Neem nu een willekeurig getal x: Doe dit ook voor de opvolger x+1:
21
Inductie: inductiestap Voor de opvolger geldt: Maar dat kan ook anders: Bouw hem op uit zijn voorganger:
22
Inductie: inductiestap Uit: Volgt dat:
23
Inductie: inductiestap We hebben nu 2 vergelijkingen voor de opvolger: En:
24
Inductie: inductiestap
25
Opvolger direct uitgeschreven: Opvolger opgebouwd uit zijn voorganger: Beide formules zijn gelijkwaardig: bewijs geleverd
26
Winst? We weten nu: Hiermee kunnen we ons algoritme herschrijven: Functie(int x) { int result=0 for(int i=1;i<=x;i++) {result+=i;} return result; } Functie(int x) { Return(float)1/2 x*(x+1); }
27
Winst? Veel winst! Functie(int x) { int result=0 for(int i=1;i<=x;i++) {result+=i;} return result; } Functie(int x) { Return(float)1/2 x*(x+1); }
28
Voorbeeld: Bresenham Cirkels tekenen op een monitor… Onmogelijk vanwege het discrete karakter van monitoren. Derhalve: genoegen nemen met een benadering.
29
De cirkel: een definitie Een cirkel = een verzameling punten die allemaal op een gegeven afstand r liggen van een centraal punt. r y x
30
De cirkel: eigenschappen De relatie tussen een punt op de rand en het centrum: Pythagoras r
31
Een cirkel tekenen… Loop over de x- as en bereken de bijbehorende y- coördinaat op basis van de straal:
32
Een cirkel tekenen… Problemen: De cirkel wordt niet mooi gesloten getekend… Ieder punt kost nogal wat rekenkracht. Gebroken getallen zijn niet zo netjes en leiden mogelijk tot afrondingsfouten.
33
Een cirkel tekenen… Een andere methode: poolcoördinaten. r
34
Een cirkel tekenen… Poolcoördinaten: problemen: Hoekberekening vormt een gebroken getal. Gebruik van goniometrische functies…
35
Goniometrie in een computer Goniometrische functies volgens Taylor:
36
Een cirkel tekenen: Bresenham Een cirkel is symmetrisch… Teken 1/8 deel van de cirkel en construeer de rest volgens herhaald spiegelen.
37
Een cirkel tekenen: Bresenham Definieer een cirkelfunctie: Punt (x,y) op cirkel met straal r? functiewaarde=0 Punt (x,y) binnen de cirkel? functiewaarde <0 Punt (x,y) buiten de cirkel? functiewaarde >0
38
Bresenham: recursie… 2 mogelijkheden voor het volgende pixel… evaluatiepunt
39
Bresenham: recursie… Hebben we getekend: Dan wordt de volgende: OF
40
Bresenham: recursie… Evalueer de cirkelfunctie op het evaluatiepunt teneinde de y- coördinaat van de opvolger te kunnen berekenen:
41
Bresenham: recursie… Evaluatiepunt binnen cirkel? Teken: Evaluatiepunt buiten cirkel? Teken:
42
Bresenham: recursie… Evalueer cirkelfunctie voor “de opvolger van de opvolger”:
43
Bresenham: recursie… Ofwel:
44
Bresenham: recursie code int circleMidpoint(int xC,int yC,int radius) { int x=0,y=radius; int p = 1-radius; While(x<y) { x++; if(p<0) { p+=2*x+1; } else { y--; p+=2*(x-y)+1; }
45
Recursie en de O-notatie De torens van Hanoi
46
Recursie en de O-notatie De torens van Hanoi Stappen: 0
47
Recursie en de O-notatie De torens van Hanoi Stappen: 1
48
Recursie en de O-notatie De torens van Hanoi Stappen: 2
49
Recursie en de O-notatie De torens van Hanoi Stappen: 3
50
Recursie en de O-notatie De torens van Hanoi Stappen: 4
51
Recursie en de O-notatie De torens van Hanoi Stappen: 5
52
Recursie en de O-notatie De torens van Hanoi Stappen: 6
53
Recursie en de O-notatie De torens van Hanoi Stappen: 7
54
Recursie en de O-notatie De torens van Hanoi 0 stappen
55
Recursie en de O-notatie De torens van Hanoi T(n-1) stappen
56
Recursie en de O-notatie De torens van Hanoi T(n-1)+1 stappen
57
Recursie en de O-notatie De torens van Hanoi 2T(n-1)+1 stappen
58
Recursie en O-notatie Recurrente betrekking: Wat is van deze betrekking de complexiteitsontwikkeling?
59
Recursie en O-notatie Verband: Dit is te herschrijven middels introductie van een nieuwe functie:
60
Recursie en O-notatie Substitueren:
61
Recursie en O-notatie Verdubbeling bij iedere stap; Dit levert:
62
Recursie en O-notatie Verdubbeling bij iedere stap; Dit levert: http://www.cut-the-knot.org/recurrence/hanoi.shtml
63
Recursie en de O-notatie De torens van Hanoi Alle schijven moeten via middelste paal.
64
Recursie en de O-notatie De torens van Hanoi 0 stappen
65
Recursie en de O-notatie De torens van Hanoi T(n-1) stappen
66
Recursie en de O-notatie De torens van Hanoi T(n-1) +1 stappen
67
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +1 stappen
68
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +2 stappen
69
Recursie en de O-notatie De torens van Hanoi 3T(n-1) +2 stappen
70
Sorteren Bubblesort Insertionsort Arraysort Mergesort Quicksort E.v.a.
71
Sorteren Bubblesort Nogal dom algoritme… Complexiteitsontwikkeling:
72
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen
73
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen A>B? Verwissel A<B? Doe niets
74
Bubblesort Werking: 362951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
75
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
76
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
77
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
78
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
79
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
80
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
81
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
82
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
83
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
84
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
85
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
86
Bubblesort Werking: 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
87
Bubblesort En opnieuw….(zucht…) 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
88
mergesort Iets slimmer… Werking: Neem 2 reeds gesorteerde arrays: 2569 13712
89
mergesort Werking: Neem 2 reeds gesorteerde arrays: En een derde… nadeel: geheugen! 2569 13712
90
mergesort Werking: 2569 13712 vergelijk
91
mergesort Werking: 2569 13712 1 Schrijf de kleinste weg
92
mergesort Werking: 2569 13712 1 Vergelijk volgende
93
mergesort Werking: 2569 13712 12 En schrijf kleinste weg…
94
mergesort Werking: 2569 13712 12 Vergelijk volgende…
95
mergesort Waar komen die 2 gesorteerde lijsten aan het begin vandaan? Antwoord: roep mergesort recursief aan, totdat je lijsten van grootte 1 hebt verkregen. 2569 13712
96
quicksort Slim algoritme Complexiteitsontwikkeling: Gebaseerd op partitionering m.b.v. Pivot
97
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6
98
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf lower naar waarde hoger dan pivot
99
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden!
100
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
101
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden
102
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Verwissel beide
103
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Verwissel beide
104
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
105
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
106
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
107
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
108
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
109
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
110
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 gevonden
111
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.