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

Slides:



Advertisements
Verwante presentaties
H3 Tweedegraads Verbanden
Advertisements

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Programmeren met Alice
Datastructuren Quicksort
Hoofdstuk 8: Recursie.
Een manier om problemen aan te pakken
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
Project D2: Kempenland Sander Verkerk Jeffrey van de Glind
Automatisch Redeneren in de praktijk
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:
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
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 2 Cees Witteveen.
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
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
TirPrs06: Wachttijdtheorie & simulatietechniek
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Informatie beoordelen If else Switch En Wiskunde.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Gerandomiseerde algoritmes
Wiskunde G3 Samenvatting H2: Parabolen
Recursie in de wiskunde
Gameprogrammeren: Keuzeopdrachten
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Herhalingen
Gameprogrammeren: Recursie
Wiskunde A of wiskunde B?.
Small Basic Console deel 2
De grafiek van een lineair verband is ALTIJD een rechte lijn.
Slim tellen.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Tellen met kaarten.
Slim tellen.
Tellen met kaarten.
Voorkennis Wiskunde Les 7 Hoofdstuk 2/3: §2.5, 3.1 en 3.2.
Raden, regels en redeneren Groep 7 en 8
Software Development fundamentals
Meetkunde Verzamelingen Klas 8.
Python – For loop + strings
Transcript van de presentatie:

De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann Edmund Landau

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

Regels O-notatie

De O-notatie…probleempjes 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.

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.

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.

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 Men neme een ander algoritme: eindig(Foo)  oneindig(Foo) Oneindig(Foo)  eindig(Foo) Foo() if(eindig(Foo)) {blijf oneindig doorgaan} else{return}

Eindigheid van algoritmen Het algoritme Foo kan niet bestaan, vanwege zijn paradoxale karakter. Derhalve geldt het principe van logische contrapositie:

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;

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 van 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 predikatenlogica:

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.

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:

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.

Het kettinkje bouwen…

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

Zien dat het zo is….

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:

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 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: O- notatie:

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