Berekening van de Orde Van een Algoritme

Slides:



Advertisements
Verwante presentaties

Advertisements

Versiebeheer Repository Invantive Producer Afstudeerstage Wouter Vos 1.
Hoe werkt een rekenmachine?
Algoritmen en Datastructuren (ALDAT)
Programmeren met Alice
Les 4 BEIJUM IN DE TIJD VAN BURGERS EN STOOMMACHINES
Een paar programma’s met een aantal basisprincipes.
Lijsten in de -calculus Een lijst [E 1, E 2,..., E n ] kan in de -calculus voorgesteld worden als z.((z E 1 ) z.((z E 2 )... z.((z E n ) nil)...) met nil.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Samenvatting Newton H2(elektr.)
Reductiemachine Functionele talen en dus de -calculus, worden vaak geïmplementeerd door een reductiemachine. De elementaire stap is een reductie, en de.
Les 4 BEIJUM IN DE TIJD VAN BURGERS EN STOOMMACHINES
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Assenstelsels en het plotten van Functies in LOGO
Gegevensverwerving en verwerking
Inferentie voor regressie
Prof.dr.ir. Bart ter Haar Romeny
Inleidend probleem Data structuur (hiërarchie van classes)
Functies als Getallen Jan Martin Jansen.
-calculus.
1 Complexiteit Bij motion planning is er sprake van drie typen van complexiteit –Complexiteit van de obstakels (aantal, aantal hoekpunten, algebraische.
Indeling Inleiding op PRM-planners & Medial Axis Retraction van configuraties op de Medial Axis Verbetering van retraction Verbetering van sampling Expliciete.
Hoofdstuk 7 verplicht… Keuze.
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
vwo D Samenvatting Hoofdstuk 12
Datastructuren Sorteren, zoeken en tijdsanalyse
Sorteeralgoritmen. Sorteren: aanpak 1 Hoe ga je een rij getallen sorteren met PC? Sorteren door selectie (= selection sort): Zoek de kleinste waarde Sorteer.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
Deltion College Engels
Experimentele kans javascript.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
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.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
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.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
GUI & classes Een Gui in een class steken en het object gebruiken.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Budg€t Fun.
Milo van der Zee
All-Pairs Shortest paths
Datastructuren voor graafrepresentatie
Minimum Opspannende Bomen
Programmeren met Reeksen
Gameprogrammeren: Objecten en geheugen
Recursie in de wiskunde
Natuurkunde-project Typ hier de titel van je project Jouw naam
Spelenderwijs en ontdekkend leren
-calculus versus Scheme
Modderdorp UNPLUGGED Bron: csunplugged.org.
Methodisch handelen Week 1. Methodisch handelen Week 1.
SQL Les February 2019.
Tellen met kaarten.
Tellen met kaarten.
Onderzoekend leren in de natuurwetenschappen
Naam Functie, organisatie Calibri MT 28
Software Development fundamentals
Gameprogrammeren: Arrays
[Voer de titel van de overtuigende toespraak hier in]
Transcript van de presentatie:

Berekening van de Orde Van een Algoritme De Orde van een algoritme is het aantal operaties dat wordt uitgevoerd bij uitvoering van dit algoritme Als men een schatting wil bekomen van de tijd nodig om een algoritme uit te voeren drukt men dit uit in functie van de input. De orde is een maat voor de complexiteit van een algoritme (onafhankelijk van hardware configuration of programming language) f(n) is O(g(n)) als er 2 positieve constanten K en n0 bestaan zodanig dat f(n) <= Kg(n)  n >= n0.

Voorbeeld 1 Een eenvoudige Scheme-functie: Operatoren : if -- null? Cons -- a-fun -- car my-map -- cdr (define (my-map a-fun a-list) (if (null? a-list) a-list (cons (a-fun (car a-list)) (my-map (cdr a-list)))))

Voorbeeld van functie a-fun : a-fun ==> (lambda (x) (+ x 2)) ==> 1 operatie a-fun ==> (lambda (x) (+ x (* 2 x))) ==> 2 operaties a-fun ==> (define (f x) (if (< x 0) 0 (+ x (f (- x 1))))) ==> het aantal operaties hangt van x af. Voor het voorbeeld zullen we ervan uitgaan dat a-fun uit 1 operatie bestaat.

Berekening van de Orde vanaf het Algoritme Input : waarde van a-list ‘() ‘(1) ‘(1 2) … ‘(1 2 … n) Aantal operaties : 2 7 + 2 ==> 9 7 + 7 + 2 ==> 16 … n * 7 + 2 Het aantal operaties groeit met n = lengte van de lijst ==> O(n)

Berekening van de Orde met Simulaties Als er geen pure iteratieve operatoren (bv. Do, repeat, maar ook append, reverse…) wordt gebruikt in de body van mijn Scheme functie, staat de Orde van het geassocieerd algoritme in direct verband met het aantal recursieve oproepen van de functie. => goed bekijk welke type functies worden gebruikt. Men kan in dit geval de Orde van het algoritme bepalen door enkel naar het aantal recursieve stappen ervan te gaan kijken

Ik voeg een counter toe en herschrijf my-map zodat de counter wordt geincrementeerd elke keer dat een recursieve oproep is gedaan. (define counter 0) (define (my-map a-fun a-list) (define (recur a-list) (set! counter (+ counter 1)) (if (null? a-list) a-list) (cons (a-fun (car a-list)) (recur (cdr a-list))))) (set! counter 0) (recur a-list) (display counter))

Simulaties Input : waarde van a-list ‘() ‘(1) ‘(1 2) ‘(1 2 3) … ‘(1 2 … 20) Waarde van Counter : 1 2 3 4 … 21

Groeit de rekentijd wel met n? Om dat te kunnen zien, moet de deling van het aantal recursieve oproep door n naar een constante gaan voor n groot genoeg: n = 1 ==> 2/1 = 2 n = 2 ==> 3/2 = 1.5 n = 3 ==> 4/3 = 1.3333… … n = 20 ==> 21/20 ~ 1 Als n   (het aantal recursieve oproepen / n)  1 (= constante) ==> O(n)

Voorbeeld 2

Resultaten (sim-orde 20 (lambda (x growth) (/ x (expt 1 Resultaten (sim-orde 20 (lambda (x growth) (/ x (expt 1.6181 growth)))) 1 ==> counter : 1 counter / 1.62 ^ n : 0.618008775724615 2 ==> counter : 3 counter / 1.62 ^ n : 1.14580454061791 3 ==> counter : 5 counter / 1.62 ^ n : 1.18019543561164 4 ==> counter : 9 counter / 1.62 ^ n : 1.31286804530063 5 ==> counter : 15 counter / 1.62 ^ n : 1.35227328894035 ... 18=> counter : 8361 counter / 1.62 ^ n : 1.4459783199783 [Garbage collecting... 44K of 512K] 19=> counter : 13529 counter / 1.62 ^ n : 1.44598536339877 20=> counter : 21891 counter / 1.62 ^ n : 1.44596720541673 done Als n   (het aantal recursieve oproepen / 1.6181^n)  1,4459.. (= constante) ==> O(~1.62n)

Dominantieregels O(1) < O (log2n) < O(n) < O(n log2n) < O(n2) < O(n3) < O(2n) < O(10n)

Opdracht Bereken de Orde van een scheme-Functie “length” die de lengte van een lijst bepaalt. Doe de berekening op de twee wijzen (m.a.w. vanaf het algoritme en door simulaties). Men kan een polynoom voorstellen door middel van een Vector (cf Grimaldi pg 307 Oef 5) Schrijf je eigen functie (power x n) die xn berekent. Schrijf ook een functie die de waarde van een polynoom p(x) berekent met behulp van power. Bereken de Orde van polynoom op de twee wijzen (vergeet geen rekening te houden met de Orde van power) Implementeer ook de manier beschreven in Grimaldi (pg 308 Oef 6). Die dus geen gebruik maakt van power om de waarde van een polynoom p(x) te berekenen. Bereken de Orde ervan. Welke van de twee functies is optimaal?