De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.

Verwante presentaties


Presentatie over: "De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden."— Transcript van de presentatie:

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


Download ppt "De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden."

Verwante presentaties


Ads door Google