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

Rolf Fagerberg. Forår 2014

Rolf Fagerberg. Forår 2015

Introduktion til DM507

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2013

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Grundlæggende køretidsanalyse af algoritmer

Introduktion. Philip Bille

Rolf Fagerberg. Forår 2012

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

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

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Algoritmer og Datastrukturer 1

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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.

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Noter til Computerstøttet Beregning Taylors formel

DM507 Algoritmer og datastrukturer

Datalogi C + Datastrukturer og Algoritmer

Selvstudium 1, Diskret matematik

DM502. Peter Schneider-Kamp

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.

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Sortering af information er en fundamental og central opgave.

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

BRP Sortering og søgning. Hægtede lister

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

Parallelle algoritmer

Danmarks Tekniske Universitet

DM02 Kogt ned. Kokken. Januar 2006

DM507 Algoritmer og datastrukturer

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Sortering. Eksempel: De n tal i sorteret orden

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Pointen med Differentiation

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

Divide-and-Conquer algoritmer

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

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

Polynomier. Frank Villa. 26. marts 2012

Danmarks Tekniske Universitet

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

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

Datastrukturer (recap)

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

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

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

Sortering af information er en fundamental og central opgave.

Sortering. Eksempel: De n tal i sorteret orden

Perspektiverende Datalogi Klassiske Algoritmer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

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

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

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

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

Datastrukturer (recap)

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Køreplan Matematik 1 - FORÅR 2005

Klassisk Taylors formel

Perspektiverende Datalogikursus

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

BRP Kursusintroduktion og Java-oversigt

Hyperelliptisk kurve kryptografi

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

Integer Factorization

Kapitel 7 Matematiske vækstmodeller

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

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

Perspektiverende Datalogikursus

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

Abstrakte datatyper C#-version

Archimedes Princip. Frank Nasser. 12. april 2011

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 )?

Differentiation af Potensfunktioner

Analyse af ombytningspuslespil

Transkript:

Asymptotisk analyse af algoritmers køretider

Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål: Løser algoritmen opgaven (er den korrekt)? Er algoritmen effektiv (hvad er køretiden)? Vi fokuserer her på det andet spørgsmål.

Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål: Løser algoritmen opgaven (er den korrekt)? Er algoritmen effektiv (hvad er køretiden)? Vi fokuserer her på det andet spørgsmål. Recall: I vores analyse er en algoritmes køretid antallet af basale operationer, som den udfører i RAM-modellen (for worst case input). Dette antal operationer er en voksende funktion f (n) af inputstørrelsen.

Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål: Løser algoritmen opgaven (er den korrekt)? Er algoritmen effektiv (hvad er køretiden)? Vi fokuserer her på det andet spørgsmål. Recall: I vores analyse er en algoritmes køretid antallet af basale operationer, som den udfører i RAM-modellen (for worst case input). Dette antal operationer er en voksende funktion f (n) af inputstørrelsen. Vi vil først undersøge hvor godt teoretiske analyser i RAM-modellen ser ud til at passer med algoritmers observerede køretid på virkelige computere.

Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål: Løser algoritmen opgaven (er den korrekt)? Er algoritmen effektiv (hvad er køretiden)? Vi fokuserer her på det andet spørgsmål. Recall: I vores analyse er en algoritmes køretid antallet af basale operationer, som den udfører i RAM-modellen (for worst case input). Dette antal operationer er en voksende funktion f (n) af inputstørrelsen. Vi vil først undersøge hvor godt teoretiske analyser i RAM-modellen ser ud til at passer med algoritmers observerede køretid på virkelige computere. Vi vil derefter gennemgå et redskab (asymptotisk analyse) til at sammenligne f (n) for forskellige algoritmer. Målet er at vi kan grovsortere algoritmer efter voksehastigheden af deres køretider, så vi kan undgå at implementere dem, som ikke har en chance for at være hurtigst.

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

Analyse af tidsforbrug: RAM-modellen vs. virkeligheden Konklusion: Det ser ud til at analyser i RAM-modellen forudser den rigtige køretid ret godt, i hvert fald for de afprøvede eksempler.

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 Man ser at funktionerne n, n 2, n 3 står for meget forskellige effektiviter.

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 Man ser at funktionerne n, n 2, n 3 står for meget forskellige effektiviter. I analysen optræder i virkeligheden en del konstanter (som vi typisk har svært ved at kende præcist), f.eks. c 1 n + c 0. Mon disse betyder noget? 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

Voksehastighed Vi ønsker at sammenligne funktioners essentielle voksehastighed på en måde så der ses bort fra multiplikative konstanter. Denne sammenligning skal bruges til at lave en grovsortering af algoritmer inden vi laver implementationsarbejde. For antag at to algoritmer A og B har voksehastigheder, som gør at køretiden for algoritme B altid (for store nok n) vil blive større end køretiden for algoritme A, uanset hvilke multiplikative konstanter, der er i udtrykkene for voksehastigheder. Så vil der som regel ikke være nogen pointe i at implementere algoritme B. Ingen tuning af koden vil kunne få den til at vinde over algoritme A (for store n).

Voksehastighed Vi ønsker at sammenligne funktioners essentielle voksehastighed på en måde så der ses bort fra multiplikative konstanter. Denne sammenligning skal bruges til at lave en grovsortering af algoritmer inden vi laver implementationsarbejde. For antag at to algoritmer A og B har voksehastigheder, som gør at køretiden for algoritme B altid (for store nok n) vil blive større end køretiden for algoritme A, uanset hvilke multiplikative konstanter, der er i udtrykkene for voksehastigheder. Så vil der som regel ikke være nogen pointe i at implementere algoritme B. Ingen tuning af koden vil kunne få den til at vinde over algoritme A (for store n). Arbejdsprincip: Sammenlign først voksehastigheder af algoritmer, og implementer normalt kun den med laveste voksehastigheder. For to algoritmer med samme voksehastighed, implementer begge og mål køretider.

Asymptotisk notation Så vi ønsker et værktøj til at sammenligne funktioners essentielle voksehastighed på en måde så der ses bort fra multiplikative konstanter.

Asymptotisk notation Så vi ønsker et værktøj til at sammenligne funktioners essentielle voksehastighed på en måde så der ses bort fra multiplikative konstanter. Mere præcist: 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 i praksis 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 i praksis 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 i praksis 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 i praksis 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 i praksis 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 i praksis 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 i praksis Regel fra sidste slide: For alle a > 0 og b > 1 gælder na b n 0 for n

Asymptotisk analyse i praksis 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 i praksis 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 i praksis 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 i praksis 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)