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 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


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

Verwante presentaties


Ads door Google