Asymptotisk analyse af algoritmers køretider

Relaterede dokumenter
Asymptotisk analyse af algoritmers køretider

Analyse af algoritmer

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Analyse af algoritmer. Analyse af algoritmer. Analyse af algoritmer. Køretid

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

Grundlæggende køretidsanalyse af algoritmer

Introduktion. Philip Bille

Rolf Fagerberg. Forår 2014

Datalogi C + Datastrukturer og Algoritmer

Algoritmer og Datastrukturer 1

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2015

Noter til Computerstøttet Beregning Taylors formel

Danmarks Tekniske Universitet

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0.

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2012

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Introduktion til DM507

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Asymptoter. for standardforsøgene i matematik i gymnasiet Karsten Juul

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

DM502. Peter Schneider-Kamp

Parallelle algoritmer

DM02 Kogt ned. Kokken. Januar 2006

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

Divide-and-Conquer algoritmer

Matematik opgave Projekt afkodning Zehra, Pernille og Remuss

Danmarks Tekniske Universitet

Klassisk Taylors formel

Danmarks Tekniske Universitet

Oplæg og øvelser, herunder frugt og vand Gerth Stølting Brodal

Hyperelliptisk kurve kryptografi

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

DM507 Algoritmer og datastrukturer

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

DM507 Algoritmer og datastrukturer

Polynomier. Frank Villa. 26. marts 2012

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Eksponentielle sammenhænge

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Sortering og søgning. Hægtede lister

Matematik YY Foråret Kapitel 1. Grupper og restklasseringe.

π can never be expressed in numbers. William Jones og John Machins algoritme til beregning af π

Eksponentielle funktioner

Reeksamen i Diskret Matematik

Abstrakte datatyper C#-version

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Grundlæggende Algoritmer og Datastrukturer. Hashing [CLRS, kapitel ]

Perspektiverende Datalogi Klassiske Algoritmer

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Vektorer og lineær regression

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

Vektorer og lineær regression. Peter Harremoës Niels Brock

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Potenser, rødder og logartime

Integer Factorization

Hvilket sprog er hurtigst

Inden der siges noget om komplekse tal, vil der i dette afsnit blive gennemgået en smule teori om trigonometriske funktioner.

BRP Kursusintroduktion og Java-oversigt

Noter om primtal. Erik Olsen

Eksamen i Diskret Matematik

Funktioner. 2. del Karsten Juul

Perspektiverende Datalogikursus

Undervisningsbeskrivelse

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm1: Introduction to analysis and design of algorithms - October 11, 2010

Rekursion og dynamisk programmering

Mm1: Introduction to analysis and design of algorithms - October 7, 2008

Komplekse Tal. 20. november UNF Odense. Steen Thorbjørnsen Institut for Matematiske Fag Århus Universitet

Bedste rette linje ved mindste kvadraters metode

Eksempel: Skat i år 2000

Hvad er en funktion? Funktioner og graftegning. Funktioners egenskaber. Funktioners egenskaber. f(b) y = f(x) f(a) f(a)

C R. Figur 1 Figur 2. er eksempler på kredsløbsfunktioner. Derimod er f.eks. indgangsimpedansen

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Transkript:

Asymptotisk analyse af algoritmers køretider

Analyse af køretid (RAM-modellen vs. virkeligheden) public class Linear { public static void main(string[] args) { long time = System.currentTimeMillis(); long n = Long.parseLong(args[0]); long total = 0; for(long i=1; i<=n; i++){ total = total + 1; System.out.println(total); System.out.println(System.currentTimeMillis() - time);

Analyse af køretid (RAM-modellen vs. virkeligheden) public class Linear { public static void main(string[] args) { long time = System.currentTimeMillis(); long n = Long.parseLong(args[0]); long total = 0; for(long i=1; i<=n; i++){ total = total + 1; System.out.println(total); System.out.println(System.currentTimeMillis() - time); T (n) = c 1 n + c 0

Analyse af køretid (RAM-modellen vs. virkeligheden) public class Linear { public static void main(string[] args) { long time = System.currentTimeMillis(); long n = Long.parseLong(args[0]); long total = 0; for(long i=1; i<=n; i++){ total = total + 1; System.out.println(total); System.out.println(System.currentTimeMillis() - time); T (n) = c 1 n + c 0 2.9e 06 Linear.java, plot af (målt tid)/n Linear.java ms (gennemsnit af 5 kørsler) 2.88e 06 2.86e 06 2.84e 06 x-akse: inputstørrelse n y-akse: (målt tid)/n 2.82e 06 2.8e 06 0 5e+08 1e+09 1.5e+09 2e+09 2.5e+09 3e+09 3.5e+09 4e+09 4.5e+09 n

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ total = total + 1;

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ total = total + 1; T (n) = (c 2 n + c 1 ) n + c 0 = c 2 n 2 + c 1 n + c 0

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ total = total + 1; T (n) = (c 2 n + c 1 ) n + c 0 = c 2 n 2 + c 1 n + c 0 Quadratic.java, plot af (målt tid)/n^2 4.4e 06 Quadratic.java 4.2e 06 ms/n^2 (gennemsnit af 5 kørsler) 4e 06 3.8e 06 3.6e 06 3.4e 06 3.2e 06 3e 06 x-akse: inputstørrelse n y-akse: (målt tid)/n 2 2.8e 06 2.6e 06 0 10000 20000 30000 40000 50000 60000 70000 n

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ for(long k=1; k<=n; k++){ total = total + 1;

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ for(long k=1; k<=n; k++){ total = total + 1; T (n) = ((c 3 n+c 2 ) n+c 1 ) n+c 0 = c 3 n 3 +c 2 n 2 +c 1 n+c 0

Analyse af tidsforbrug (RAM-modellen vs. virkeligheden) for(long i=1; i<=n; i++){ for(long j=1; j<=n; j++){ for(long k=1; k<=n; k++){ total = total + 1; T (n) = ((c 3 n+c 2 ) n+c 1 ) n+c 0 = c 3 n 3 +c 2 n 2 +c 1 n+c 0 1e 05 Cubic.java, plot af (målt tid)/n^3 Cubic.java 9e 06 ms/n^3 (gennemsnit af 5 kørsler) 8e 06 7e 06 6e 06 5e 06 4e 06 x-akse: inputstørrelse n y-akse: (målt tid)/n 3 3e 06 2e 06 0 200 400 600 800 1000 1200 1400 1600 1800 2000 n

Linear vs. kvadratisk vs. kubisk ms (gennemsnit af 5 kørsler) 100000 10000 1000 100 10 plot af målt tid (dobbelt-logaritmisk) Linear.java Quadratic.java Cubic.java 1 100 1000 10000 100000 1e+06 1e+07 1e+08 1e+09 1e+10 n

Multiplikative konstanter Multiplikative konstanter ligegyldige hvis voksehastighed er forskellig: f (n) = 3000n h(n) = 3n 2 g(n) = 4000n k(n) = 4n 2 1.2e+07 1e+07 3000*x 4000*x 3*x**2 4*x**2 8e+06 6e+06 4e+06 2e+06 0 0 200 400 600 800 1000 1200 1400 1600

Multiplikative konstanter Multiplikative konstanter ligegyldige hvis voksehastighed er forskellig: f (n) = 3000n h(n) = 3n 2 g(n) = 4000n k(n) = 4n 2 1.2e+07 1e+07 3000*x 4000*x 3*x**2 4*x**2 8e+06 6e+06 4e+06 2e+06 0 0 200 400 600 800 1000 1200 1400 1600 3000n < 4n 2 3000/4 < n 750 < n

Multiplikative konstanter Multiplikative konstanter ligegyldige hvis voksehastighed er forskellig: f (n) = 3000n h(n) = 3n 2 g(n) = 4000n k(n) = 4n 2 1.2e+07 1e+07 3000*x 4000*x 3*x**2 4*x**2 8e+06 6e+06 4e+06 2e+06 0 0 200 400 600 800 1000 1200 1400 1600 3000n < 4n 2 3000/4 < n 750 < n A n < B n 2 A/B < n

Asymptotisk notation Vi ønsker at sammenligne funktioners essentielle voksehastighed på en måde så der ses bort fra multiplikative konstanter. Vi ønsker for voksehastighed for funktioner sammenligninger svarende til de fem klassiske ordens-relationer: = < > De vil, af historiske årsager, blive kaldt for: O Ω Θ o ω Hvilket udtales således: Store O, Omega, Theta, lille o, lille omega Følgende definitioner har vist sig at fungere godt:

Store O Mening: f g i voksehastighed

Store Omega Mening: f g i voksehastighed

Theta Mening: f = g i voksehastighed

Lille o Mening: f < g i voksehastighed

Lille omega Mening: f > g i voksehastighed

Asymptotisk notation Man kan nemt vise at disse definitioner opfører sig som forventet af ordens-relationer. F.eks.: f (n) = o(g(n)) f (n) = O(g(n)) (jvf. x < y x y)

Asymptotisk notation Man kan nemt vise at disse definitioner opfører sig som forventet af ordens-relationer. F.eks.: f (n) = o(g(n)) f (n) = O(g(n)) (jvf. x < y x y) f (n) = Θ(g(n)) f (n) = O(g(n)) (jvf. x = y x y )

Asymptotisk notation Man kan nemt vise at disse definitioner opfører sig som forventet af ordens-relationer. F.eks.: f (n) = o(g(n)) f (n) = O(g(n)) (jvf. x < y x y) f (n) = Θ(g(n)) f (n) = O(g(n)) (jvf. x = y x y ) f (n) = O(g(n)) g(n) = Ω(f (n)) (jvf. x y y x )

Asymptotisk notation Man kan nemt vise at disse definitioner opfører sig som forventet af ordens-relationer. F.eks.: f (n) = o(g(n)) f (n) = O(g(n)) (jvf. x < y x y) f (n) = Θ(g(n)) f (n) = O(g(n)) (jvf. x = y x y ) f (n) = O(g(n)) g(n) = Ω(f (n)) (jvf. x y y x ) f (n) = o(g(n)) g(n) = ω(f (n)) (jvf. x < y y > x )

Asymptotisk notation Man kan nemt vise at disse definitioner opfører sig som forventet af ordens-relationer. F.eks.: f (n) = o(g(n)) f (n) = O(g(n)) (jvf. x < y x y) f (n) = Θ(g(n)) f (n) = O(g(n)) (jvf. x = y x y ) f (n) = O(g(n)) g(n) = Ω(f (n)) (jvf. x y y x ) f (n) = o(g(n)) g(n) = ω(f (n)) (jvf. x < y y > x ) f (n) = O(g(n)) og f (n) = Ω(g(n)) g(n) = Θ(g(n)) (jvf. x y og x y x = y )

Asymptotisk analyse De asymptotiske forhold mellem de fleste funktioner f og g kan afklares ved følgende sætninger: Hvis f (n) k > 0 for n så gælder f (n) = Θ(g(n)) g(n) Hvis f (n) 0 for n så gælder f (n) = o(g(n)) g(n)

Asymptotisk analyse De asymptotiske forhold mellem de fleste funktioner f og g kan afklares ved følgende sætninger: Hvis f (n) k > 0 for n så gælder f (n) = Θ(g(n)) g(n) Eksempler: Hvis f (n) 0 for n så gælder f (n) = o(g(n)) g(n) 20n 2 + 17n + 312 20 + 17/n + 312/n2 n 2 = 20 + 0 + 0 = 20 for n 1 1

Asymptotisk analyse De asymptotiske forhold mellem de fleste funktioner f og g kan afklares ved følgende sætninger: Hvis f (n) k > 0 for n så gælder f (n) = Θ(g(n)) g(n) Eksempler: Hvis f (n) 0 for n så gælder f (n) = o(g(n)) g(n) 20n 2 + 17n + 312 20 + 17/n + 312/n2 n 2 = 20 + 0 + 0 = 20 for n 1 1 20n 2 + 17n + 312 n 3 = 20/n + 17/n2 + 312/n 3 = 0 + 0 + 0 = 0 for n 1 1

Asymptotisk analyse Derudover er det godt at vide følgende fact fra matematik: For alle a > 0 og b > 1 gælder n a b n 0 for n

Asymptotisk analyse Derudover er det godt at vide følgende fact fra matematik: For alle a > 0 og b > 1 gælder n a b n 0 for n Dvs. ethvert polynomium er o() af enhver exponentialfunktion

Asymptotisk analyse Derudover er det godt at vide følgende fact fra matematik: For alle a > 0 og b > 1 gælder n a b n 0 for n Dvs. ethvert polynomium er o() af enhver exponentialfunktion Eksempelvis giver dette at: hvoraf ses n 100 2 n 0 for n n 100 = o(2 n )

Asymptotisk analyse Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n

Asymptotisk analyse Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n For c > 1 og d > 0, sæt N = log c (n) og b = c d. Så haves (log c n) a n d = N a (c log c (n) ) d = Na c d log c (n) = N a Na = (c d ) log c (n) (c d ) N

Asymptotisk analyse Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n For c > 1 og d > 0, sæt N = log c (n) og b = c d. Så haves (log c n) a n d = N a (c log c (n) ) d = Na c d log c (n) = og derfor fås følgende variant af reglen: N a Na = (c d ) log c (n) (c d ) N For alle a, d > 0 og c > 1 gælder (log c n) a 0 for n n d

Asymptotisk analyse Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n For c > 1 og d > 0, sæt N = log c (n) og b = c d. Så haves (log c n) a n d = N a (c log c (n) ) d = Na c d log c (n) = N a Na = (c d ) log c (n) (c d ) N og derfor fås følgende variant af reglen: For alle a, d > 0 og c > 1 gælder (log c n) a n d 0 for n Dvs. enhver logaritme (selv opløftet i enhver potens) er o() af ethvert polynomium.

Asymptotisk analyse Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n For c > 1 og d > 0, sæt N = log c (n) og b = c d. Så haves (log c n) a n d = N a (c log c (n) ) d = Na c d log c (n) = N a Na = (c d ) log c (n) (c d ) N og derfor fås følgende variant af reglen: For alle a, d > 0 og c > 1 gælder (log c n) a n d 0 for n Dvs. enhver logaritme (selv opløftet i enhver potens) er o() af ethvert polynomium. Eksempelvis giver dette at: (log n) 3 n 0.5 0 for n, hvoraf ses (log n) 3 = o(n 0.5 )

Større eksempel Disse regler forklarer at følgende funktioner er sat i stigende voksehastighed (den ene er o() af den næste): 1, log n, n, n/ log n, n, n log n, n n, n 2, n 3, n 10, 2 n

Dominerende led Bemærk at dominerende led (led med højeste voksehastighed) bestemmer samlet voksehastighed. Eksempel (figur): f (n) = 700n 2 g(n) = 7n 3 h(n) = 600n 2 + 500n + 400 k(n) = 6n 3 + 5n 2 + 4n + 3 3.5e+07 3e+07 700*x**2 600*x**2 + 500*x + 400 7*x**3 6*x**3 + 5*x**2 + 4*x + 3 2.5e+07 2e+07 1.5e+07 1e+07 5e+06 0 0 20 40 60 80 100 120 140 160

Dominerende led Bemærk at dominerende led (led med højeste voksehastighed) bestemmer samlet voksehastighed. Eksempel (figur): f (n) = 700n 2 g(n) = 7n 3 h(n) = 600n 2 + 500n + 400 k(n) = 6n 3 + 5n 2 + 4n + 3 3.5e+07 3e+07 700*x**2 600*x**2 + 500*x + 400 7*x**3 6*x**3 + 5*x**2 + 4*x + 3 2.5e+07 2e+07 1.5e+07 1e+07 5e+06 0 0 20 40 60 80 100 120 140 160 Figuren passer med beregninger:

Dominerende led 6n 3 + 5n 2 + 4n + 3 6 + 5/n + 4/n2 7n 3 = 6 + 0 + 0 = 6/7 for n 7 7 Dvs. 6n 3 + 5n 2 + 4n + 3 = Θ(7n 3 )

Dominerende led 6n 3 + 5n 2 + 4n + 3 6 + 5/n + 4/n2 7n 3 = 6 + 0 + 0 = 6/7 for n 7 7 Dvs. 6n 3 + 5n 2 + 4n + 3 = Θ(7n 3 ) 600n 2 + 500n + 400 600 + 500/n + 400/n2 700n 2 = 600 + 0 + 0 = 6/7 for n 700 700 Dvs. 600n 2 + 500n + 400 = Θ(700n 2 )

Dominerende led 6n 3 + 5n 2 + 4n + 3 6 + 5/n + 4/n2 7n 3 = 6 + 0 + 0 = 6/7 for n 7 7 Dvs. 6n 3 + 5n 2 + 4n + 3 = Θ(7n 3 ) 600n 2 + 500n + 400 600 + 500/n + 400/n2 700n 2 = 600 + 0 + 0 = 6/7 for n 700 700 Dvs. 600n 2 + 500n + 400 = Θ(700n 2 ) 600n 2 + 500n + 400 6n 3 + 5n 2 + 4n + 3 = 600/n + 500/n1 + 400/n 2 6 + 5/n 1 + 4/n 2 + 3/n 3 0 + 0 + 0 6 + 0 + 0 + 0 = 0 for n Dvs. 600n 2 + 500n + 400 = o(6n 3 + 5n 2 + 4n + 3)