Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdKarolien Jacobs Laatst gewijzigd meer dan 9 jaar geleden
1
De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann 1837-1920 Edmund Landau 1877-1938
2
De O-notatie Algemene lijn: Broncode analyseren. Herhalingsfrequentie bepalen. O-notatie afleiden. Regels O-notatie respecteren.
3
Regels O-notatie
4
De O-notatie…probleempjes 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
Het Algoritme: voorwaarden Eindigheid: Een algoritme stopt na een eindig aantal instructies. Bepaaldheid: Iedere instructie wordt in een eindige hoeveelheid tijd uitgevoerd. Van iedere instructie is duidelijk wat deze doet.
7
Het Algoritme: voorwaarden Invoer: Een algoritme heeft een bepaalde invoer. Uitvoer: Een algoritme levert een bepaalde gespecificeerde uitvoer op. Effectiviteit: Iedere instructie in het algoritme dient relevant te zijn.
8
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
9
Eindigheid van algoritmen Men neme een ander algoritme: eindig(Foo) oneindig(Foo) Oneindig(Foo) eindig(Foo) Foo() if(eindig(Foo)) {blijf oneindig doorgaan} else{return}
10
Eindigheid van algoritmen Het algoritme Foo kan niet bestaan, vanwege zijn paradoxale karakter. Derhalve geldt het principe van logische contrapositie:
11
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;
12
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:
13
Soorten problemen Misschien polynomiaal: Niet deterministisch polynomiaal: Misschien te doen…..misschien niet…. Irak Israël / Palestijnen Handelsreizigersprobleem Rugzakprobleem
14
Recursie en bewijsvoering Uitdaging: zo efficiënt mogelijke software schrijven. Opdracht: Schrijf een programma dat de optelsom van alle gehele positieve getallen onder een gegeven n berekent.
15
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
16
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; }
17
Recursie en bewijsvoering Goh… Misschien geldt: Eens kijken… n 11 23 36 410 515 621 728 836 945
18
Recursie en bewijsvoering n 111 233 366 410 515 621 728 836 945
19
Recursie en bewijsvoering Hoe te bewijzen dat: Met predikatenlogica:
20
Recursie en bewijsvoering Predikaat P geldt voor getal b. Voor alle getallen groter dan b geldt: Als Predikaat P geldt voor k-1, dan geldt het ook voor k Predikaat P geldt voor alle Getallen groter of gelijk aan b.
21
Inductieve bewijsvoering Dit betekent: Bewijs de eigenschap (= het predicaat) voor een getal (b). Toon aan dat daaruit volgt dat de eigenschap ook geldt voor het volgende getal… Hoe dit te vertalen naar:
22
Inductie: Basisstap Gooi de eerste dominosteen om: Vul het getal 1 in, in de vergelijking: Eerste steen omgegooid…
23
Inductie: inductiestap Neem nu een willekeurig getal x: Doe dit ook voor de opvolger x+1:
24
Inductie: inductiestap Voor de opvolger geldt: Maar dat kan ook anders: Bouw hem op uit zijn voorganger:
25
Inductie: inductiestap Uit: Volgt dat:
26
Inductie: inductiestap We hebben nu 2 vergelijkingen voor de opvolger: En:
27
Inductie: inductiestap
28
Opvolger direct uitgeschreven: Opvolger opgebouwd uit zijn voorganger: Beide formules zijn gelijkwaardig: bewijs geleverd.
29
Het kettinkje bouwen…
30
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); }
31
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); }
32
Zien dat het zo is….
35
Voorbeeld: Bresenham Cirkels tekenen op een monitor… Onmogelijk vanwege het discrete karakter van monitoren. Derhalve: genoegen nemen met een benadering.
36
De cirkel: een definitie Een cirkel = een verzameling punten die allemaal op een gegeven afstand r liggen van een centraal punt. r y x
37
De cirkel: eigenschappen De relatie tussen een punt op de rand en het centrum: Pythagoras r
38
Een cirkel tekenen… Loop over de x- as en bereken de bijbehorende y- coördinaat op basis van de straal:
39
Een cirkel tekenen…
40
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.
41
Een cirkel tekenen… Een andere methode: poolcoördinaten. r
42
Een cirkel tekenen… Poolcoördinaten: problemen: Hoekberekening vormt een gebroken getal. Gebruik van goniometrische functies…
43
Goniometrie in een computer Goniometrische functies volgens Taylor:
44
Bresenham Een cirkel is symmetrisch… Teken 1/8 deel van de cirkel en construeer de rest volgens herhaald spiegelen.
45
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
46
Bresenham: recursie… 2 mogelijkheden voor het volgende pixel… evaluatiepunt
47
Bresenham: recursie… Hebben we getekend: Dan wordt de volgende: OF
48
Bresenham: recursie… Evalueer de cirkelfunctie op het evaluatiepunt teneinde de y- coördinaat van de opvolger te kunnen berekenen:
49
Bresenham: recursie… Evaluatiepunt binnen cirkel? Teken: Evaluatiepunt buiten cirkel? Teken:
50
Bresenham: recursie… Evalueer cirkelfunctie voor “de opvolger van de opvolger”:
51
Bresenham: recursie… Ofwel:
52
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; }
53
Recursie en de O-notatie De torens van Hanoi
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: O- notatie:
59
Recursie en de O-notatie De torens van Hanoi Alle schijven moeten via middelste paal.
60
Recursie en de O-notatie De torens van Hanoi 0 stappen
61
Recursie en de O-notatie De torens van Hanoi T(n-1) stappen
62
Recursie en de O-notatie De torens van Hanoi T(n-1) +1 stappen
63
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +1 stappen
64
Recursie en de O-notatie De torens van Hanoi 2T(n-1) +2 stappen
65
Recursie en de O-notatie De torens van Hanoi 3T(n-1) +2 stappen
66
Sorteren Bubblesort Insertionsort Arraysort Mergesort Quicksort E.v.a.
67
Sorteren Bubblesort Nogal dom algoritme… Complexiteitsontwikkeling:
68
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen
69
Bubblesort Werking: 362951148121 Vergelijk eerste 2 elementen A>B? Verwissel A<B? Doe niets
70
Bubblesort Werking: 362951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
71
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
72
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
73
Bubblesort Werking: 326951148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
74
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
75
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
76
Bubblesort Werking: 326591148121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
77
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
78
Bubblesort Werking: 326594118121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
79
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
80
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
81
Bubblesort Werking: 326594811121 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
82
Bubblesort Werking: 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
83
Bubblesort En opnieuw….(zucht…) 326594811112 Vergelijk volgende 2 elementen A>B? Verwissel A<B? Doe niets
84
mergesort Iets slimmer… Werking: Neem 2 reeds gesorteerde arrays: 2569 13712
85
mergesort Werking: Neem 2 reeds gesorteerde arrays: En een derde… nadeel: geheugen! 2569 13712
86
mergesort Werking: 2569 13712 vergelijk
87
mergesort Werking: 2569 13712 1 Schrijf de kleinste weg
88
mergesort Werking: 2569 13712 1 Vergelijk volgende
89
mergesort Werking: 2569 13712 12 En schrijf kleinste weg…
90
mergesort Werking: 2569 13712 12 Vergelijk volgende…
91
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
92
quicksort Slim algoritme Complexiteitsontwikkeling: Gebaseerd op partitionering m.b.v. Pivot
93
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6
94
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf lower naar waarde hoger dan pivot
95
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden!
96
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
97
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Gevonden
98
quicksort Werking: 311652481271 lowerupper Pivotwaarde: 6 Verwissel beide
99
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Verwissel beide
100
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
101
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
102
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
103
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot
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 gevonden
107
quicksort Werking: 316524812711 lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.