De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann 1837-1920 Edmund Landau 1877-1938.

Verwante presentaties


Presentatie over: "De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann 1837-1920 Edmund Landau 1877-1938."— Transcript van de presentatie:

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

33

34

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


Download ppt "De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann 1837-1920 Edmund Landau 1877-1938."

Verwante presentaties


Ads door Google