Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdTobias Lambrechts Laatst gewijzigd meer dan 8 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 0 stappen
47
Recursie en de O-notatie De torens van Hanoi T(n-1) stappen
48
Recursie en de O-notatie De torens van Hanoi T(n-1)+1 stappen
49
Recursie en de O-notatie De torens van Hanoi 2T(n-1)+1 stappen
50
Recursie en O-notatie Recurrente betrekking: O- notatie:
51
Recursie en de O-notatie De torens van Hanoi Alle schijven moeten via middelste paal.
52
Recursie en de O-notatie De torens van Hanoi 0 stappen
53
Recursie en de O-notatie De torens van Hanoi T(n-1) stappen
54
Recursie en de O-notatie De torens van Hanoi T(n-1) +1 stappen
55
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +1 stappen
56
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +2 stappen
57
Recursie en de O-notatie De torens van Hanoi 3T(n-1) +2 stappen
58
Sorteren Bubblesort Insertionsort Arraysort Mergesort Quicksort E.v.a.
59
Sorteren Bubblesort Nogal dom algoritme… Complexiteitsontwikkeling:
60
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen
61
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen A>B? Verwissel A<B? Doe niets
62
Bubblesort Werking: 362951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
63
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
64
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
65
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
66
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
67
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
68
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
69
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
70
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
71
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
72
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
73
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
74
Bubblesort Werking: 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
75
Bubblesort En opnieuw….(zucht…) 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
76
mergesort Iets slimmer… Werking: Neem 2 reeds gesorteerde arrays: 2569 13712
77
mergesort Werking: Neem 2 reeds gesorteerde arrays: En een derde… nadeel: geheugen! 2569 13712
78
mergesort Werking: 2569 13712 vergelijk
79
mergesort Werking: 2569 13712 1 Schrijf de kleinste weg
80
mergesort Werking: 2569 13712 1 Vergelijk volgende
81
mergesort Werking: 2569 13712 12 En schrijf kleinste weg…
82
mergesort Werking: 2569 13712 12 Vergelijk volgende…
83
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
84
quicksort Slim algoritme Complexiteitsontwikkeling: Gebaseerd op partitionering m.b.v. Pivot
85
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6
86
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf lower naar waarde hoger dan pivot
87
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden!
88
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
89
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden
90
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Verwissel beide
91
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Verwissel beide
92
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
93
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
94
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
95
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
96
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
97
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
98
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 gevonden
99
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.