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

Slides:



Advertisements
Verwante presentaties
H3 Tweedegraads Verbanden
Advertisements

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Datastructuren Quicksort
Hoofdstuk 8: Recursie.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
Automatisch Redeneren in de praktijk
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Fibonacci & Friends Met dank aan Gerard Tel.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Inleiding Adaptieve Systemen
vwo A Samenvatting Hoofdstuk 12
Omtrekshoeken Stelling van de constante hoek:
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 5 Cees Witteveen.
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
Hogere wiskunde Limieten college week 4
ribwis1 Toegepaste wiskunde – Exponentiele functies Lesweek 5
WIS21.
Vwo C Samenvatting Hoofdstuk 15. Formules en de GR Met de GR kun je bijzonderheden van formules te weten komen. Eerst plot je de grafiek. Gebruik eventueel.
Tweedegraadsfuncties
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 4.
Klik ergens op het witte deel van deze pagina om verder te gaan
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
TU Delft Groep Parallelle en Gedistribueerde Systemen Fundamentele Informatica IN3120 Cees Witteveen Parallelle en Gedistribueerde Systemen Faculteit EWI,
H4 Differentiëren.
H2 Lineaire Verbanden.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Verbanden JTC’07.
B vwo vwo B - 11e editie tweede fase Jan Dijkhuis, Roeland Hiele
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.
1 Datastructuren Quicksort College 3. 2 Vorige keren  O-notaties  Sorteren: insertion sort, bubble sort  Kosten (n 2 ) tijd in het slechtste geval.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Docentinstructie: Het is aan te bevelen de eerste dia’s klassikaal te tonen en met uitleg te bespreken. Als na zes dia’s een korte demo van Celsius/Fahrenheit.
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Recursie…. De Mandelbrot Fractal De werking… De verzameling natuurlijke getallen… 0 ∞-∞
Recursie: het cirkel algoritme van Bresenham
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann Edmund Landau
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Gerandomiseerde algoritmes
Wiskunde G3 Samenvatting H2: Parabolen
Meest voorkomende vragen bij examenteksten.
Berekening van de Orde Van een Algoritme
Recursie in de wiskunde
Gameprogrammeren: Herhalingen
Gameprogrammeren: Recursie
Wiskunde A of wiskunde B?.
Keuzevoorlichting havo wiskunde AB.
2. Tweedegraadsfuncties en vergelijking cirkel
Small Basic Console deel 2
De grafiek van een lineair verband is ALTIJD een rechte lijn.
Slim tellen.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Modderdorp UNPLUGGED Bron: csunplugged.org.
Nim, een strategisch spelletje
Tellen met kaarten.
Slim tellen.
Tellen met kaarten.
Voorkennis Wiskunde Les 7 Hoofdstuk 2/3: §2.5, 3.1 en 3.2.
Meetkunde Verzamelingen Klas 8.
Transcript van de presentatie:

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

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

Regels O-notatie

De O-notatie Wat nu? if(iets==1) {schrijf 1 keer weg;} else{ for(int i=0;i<n;i++) { schrijf weg; }

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.

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

Eindigheid van algoritmen Algoritme dat zichzelf analyseert: eindig(algoritme)  oneindig(algoritme) Oneindig(algoritme)  eindig(algoritme) Algoritme() if(eindig(algoritme) {blijf oneindig doorgaan} else{return}

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;

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!

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:

Soorten problemen Misschien polynomiaal: Niet deterministisch polynomiaal: Misschien te doen…..misschien niet…. Irak Israël / Palestijnen Handelsreizigersprobleem Rugzakprobleem

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.

Recursie en bewijsvoering Schrijf een programma dat de optelsom van alle gehele positieve getallen onder een gegeven n berekent. Functie(5) levert: =15 Functie(8) levert: =36

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

Recursie en bewijsvoering Goh…. Misschien geldt: Eens kijken… n

Recursie en bewijsvoering n

Recursie en bewijsvoering Hoe te bewijzen dat: Met predicatenlogica:

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:

Inductie: Basisstap Gooi de eerste dominosteen om: Vul het getal 1 in, in de vergelijking: Eerste steen omgegooid…

Inductie: inductiestap Neem nu een willekeurig getal x: Doe dit ook voor de opvolger x+1:

Inductie: inductiestap Voor de opvolger geldt: Maar dat kan ook anders: Bouw hem op uit zijn voorganger:

Inductie: inductiestap Uit: Volgt dat:

Inductie: inductiestap We hebben nu 2 vergelijkingen voor de opvolger: En:

Inductie: inductiestap

Opvolger direct uitgeschreven: Opvolger opgebouwd uit zijn voorganger: Beide formules zijn gelijkwaardig: bewijs geleverd

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); }

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); }

Voorbeeld: Bresenham Cirkels tekenen op een monitor… Onmogelijk vanwege het discrete karakter van monitoren. Derhalve: genoegen nemen met een benadering.

De cirkel: een definitie Een cirkel = een verzameling punten die allemaal op een gegeven afstand r liggen van een centraal punt. r y x

De cirkel: eigenschappen De relatie tussen een punt op de rand en het centrum: Pythagoras r

Een cirkel tekenen… Loop over de x- as en bereken de bijbehorende y- coördinaat op basis van de straal:

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.

Een cirkel tekenen… Een andere methode: poolcoördinaten. r

Een cirkel tekenen… Poolcoördinaten: problemen: Hoekberekening vormt een gebroken getal. Gebruik van goniometrische functies…

Goniometrie in een computer Goniometrische functies volgens Taylor:

Een cirkel tekenen: Bresenham Een cirkel is symmetrisch… Teken 1/8 deel van de cirkel en construeer de rest volgens herhaald spiegelen.

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

Bresenham: recursie… 2 mogelijkheden voor het volgende pixel… evaluatiepunt

Bresenham: recursie… Hebben we getekend: Dan wordt de volgende: OF

Bresenham: recursie… Evalueer de cirkelfunctie op het evaluatiepunt teneinde de y- coördinaat van de opvolger te kunnen berekenen:

Bresenham: recursie… Evaluatiepunt binnen cirkel? Teken: Evaluatiepunt buiten cirkel? Teken:

Bresenham: recursie… Evalueer cirkelfunctie voor “de opvolger van de opvolger”:

Bresenham: recursie… Ofwel:

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

Recursie en de O-notatie De torens van Hanoi

Recursie en de O-notatie De torens van Hanoi Stappen: 0

Recursie en de O-notatie De torens van Hanoi Stappen: 1

Recursie en de O-notatie De torens van Hanoi Stappen: 2

Recursie en de O-notatie De torens van Hanoi Stappen: 3

Recursie en de O-notatie De torens van Hanoi Stappen: 4

Recursie en de O-notatie De torens van Hanoi Stappen: 5

Recursie en de O-notatie De torens van Hanoi Stappen: 6

Recursie en de O-notatie De torens van Hanoi Stappen: 7

Recursie en de O-notatie De torens van Hanoi 0 stappen

Recursie en de O-notatie De torens van Hanoi T(n-1) stappen

Recursie en de O-notatie De torens van Hanoi T(n-1)+1 stappen

Recursie en de O-notatie De torens van Hanoi 2T(n-1)+1 stappen

Recursie en O-notatie Recurrente betrekking: Wat is van deze betrekking de complexiteitsontwikkeling?

Recursie en O-notatie Verband: Dit is te herschrijven middels introductie van een nieuwe functie:

Recursie en O-notatie Substitueren:

Recursie en O-notatie Verdubbeling bij iedere stap; Dit levert:

Recursie en O-notatie Verdubbeling bij iedere stap; Dit levert:

Recursie en de O-notatie De torens van Hanoi Alle schijven moeten via middelste paal.

Recursie en de O-notatie De torens van Hanoi 0 stappen

Recursie en de O-notatie De torens van Hanoi T(n-1) stappen

Recursie en de O-notatie De torens van Hanoi T(n-1) +1 stappen

Recursie en de O-notatie De torens van Hanoi 2T(n-1) +1 stappen

Recursie en de O-notatie De torens van Hanoi 2T(n-1) +2 stappen

Recursie en de O-notatie De torens van Hanoi 3T(n-1) +2 stappen

Sorteren Bubblesort Insertionsort Arraysort Mergesort Quicksort E.v.a.

Sorteren Bubblesort Nogal dom algoritme… Complexiteitsontwikkeling:

Bubblesort Werking: Vergelijk eerste 2 elementen

Bubblesort Werking: Vergelijk eerste 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort Werking: Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

Bubblesort En opnieuw….(zucht…) Vergelijk volgende 2 elementen A>B?  Verwissel A<B?  Doe niets

mergesort Iets slimmer… Werking: Neem 2 reeds gesorteerde arrays:

mergesort Werking: Neem 2 reeds gesorteerde arrays: En een derde…  nadeel: geheugen!

mergesort Werking: vergelijk

mergesort Werking: Schrijf de kleinste weg

mergesort Werking: Vergelijk volgende

mergesort Werking: En schrijf kleinste weg…

mergesort Werking: Vergelijk volgende…

mergesort Waar komen die 2 gesorteerde lijsten aan het begin vandaan? Antwoord: roep mergesort recursief aan, totdat je lijsten van grootte 1 hebt verkregen

quicksort Slim algoritme Complexiteitsontwikkeling: Gebaseerd op partitionering m.b.v. Pivot

quicksort Werking: lowerupper Pivotwaarde: 6

quicksort Werking: lowerupper Pivotwaarde: 6 Zoek vanaf lower naar waarde hoger dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Gevonden!

quicksort Werking: lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Gevonden

quicksort Werking: lowerupper Pivotwaarde: 6 Verwissel beide

quicksort Werking: lowerupper Pivotwaarde: 6 Verwissel beide

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 Ga verder: Zoek vanaf lower waarde groter dan pivot

quicksort Werking: lowerupper Pivotwaarde: 6 gevonden

quicksort Werking: lowerupper Pivotwaarde: 6 Zoek vanaf upper naar waarde kleiner dan pivot