26.01.2014 Views

Slides om asymptotisk analyse

Slides om asymptotisk analyse

Slides om asymptotisk analyse

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Analyse af algoritmers køretider


Analyse af køretid (RAM-modellen vs. virkeligheden)<br />

public class Linear {<br />

public static void main(String[] args) {<br />

}<br />

long time = System.currentTimeMillis();<br />

long n = Long.parseLong(args[0]);<br />

long total = 0;<br />

for(long i=1; i


Analyse af køretid (RAM-modellen vs. virkeligheden)<br />

public class Linear {<br />

public static void main(String[] args) {<br />

}<br />

long time = System.currentTimeMillis();<br />

long n = Long.parseLong(args[0]);<br />

long total = 0;<br />

for(long i=1; i


Analyse af køretid (RAM-modellen vs. virkeligheden)<br />

public class Linear {<br />

public static void main(String[] args) {<br />

}<br />

long time = System.currentTimeMillis();<br />

long n = Long.parseLong(args[0]);<br />

long total = 0;<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Analyse af tidsforbrug (RAM-modellen vs. virkeligheden)<br />

for(long i=1; i


Linear vs. kvadratisk vs. kubisk<br />

ms (gennemsnit af 5 kørsler)<br />

100000<br />

10000<br />

1000<br />

100<br />

10<br />

plot af målt tid (dobbelt-logaritmisk)<br />

Linear.java<br />

Quadratic.java<br />

Cubic.java<br />

1<br />

100 1000 10000 100000 1e+06 1e+07 1e+08 1e+09 1e+10<br />

n


Multiplikative konstanter<br />

Multiplikative konstanter ligegyldige hvis voksehastighed er forskellig:<br />

f (n) = 1200n g(x) = 0.15n 2<br />

4e+07<br />

3.5e+07<br />

1200*x<br />

0.15*x**2<br />

3e+07<br />

2.5e+07<br />

2e+07<br />

1.5e+07<br />

1e+07<br />

5e+06<br />

0<br />

0 2000 4000 6000 8000 10000 12000 14000 16000


D<strong>om</strong>inerende led<br />

D<strong>om</strong>inerende led bestemmer voksehastighed:<br />

f (n) = 1200n g(x) = 0.15n 2<br />

h(n) = 900n + 20000n 0.5 +125 k(n) = 0.1n 2 + 5x 1.5 + 5x + 10x 0.5 + 25<br />

4e+07<br />

3.5e+07<br />

3e+07<br />

1200*x<br />

900*x + 20000*x**0.5 + 125<br />

0.15*x**2<br />

0.1*x**2 + 5*x**1.5 + 5*x + 10 * x**0.5 + 25<br />

2.5e+07<br />

2e+07<br />

1.5e+07<br />

1e+07<br />

5e+06<br />

0<br />

0 2000 4000 6000 8000 10000 12000 14000 16000


Asymptotisk notation<br />

Vi ønsker at sammenligne funktioners essentielle voksehastighed på en<br />

måde så der ses bort fra multiplikative konstanter og ikke-d<strong>om</strong>inerende<br />

led.<br />

Vi ønsker for voksehastighed for funktioner analoger til alle fem klassiske<br />

ordens-relationer:<br />

≤ ≥ = < ><br />

De vil, af historiske årsager, blive kaldt for:<br />

O Ω Θ o ω<br />

Hvilket udtales således:<br />

“Store O”, “Omega”, “Theta”, “lille o”, “lille <strong>om</strong>ega”<br />

Følgende definitioner har vist sig at fungere godt:


Store O<br />

Mening: f ≤ g i voksehastighed


Store Omega<br />

Mening: f ≥ g i voksehastighed


Theta<br />

Mening: f = g i voksehastighed


Lille o<br />

Mening: f < g i voksehastighed


Lille <strong>om</strong>ega<br />

Mening: f > g i voksehastighed


Asymptotisk <strong>analyse</strong><br />

De <strong>asymptotisk</strong>e forhold mellem de fleste funktioner f og g kan afklares<br />

ved følgende sætninger:<br />

f (n)<br />

lim = c > 0 ⇒ f (n) = Θ(g(n))<br />

n→∞ g(n)<br />

Eksempler:<br />

f (n)<br />

lim = 0 ⇒ f (n) = o(g(n))<br />

n→∞ g(n)<br />

20n 2 + 17n + 312 20 + 17/n + 312/n 2<br />

lim<br />

n→∞ n 2 = lim<br />

= 20<br />

n→∞ 1<br />

20n 2 + 17n + 312 20/n + 17/n 2 + 312/n 3<br />

lim<br />

n→∞ n 3 = lim<br />

= 0<br />

n→∞ 1


Asymptotisk <strong>analyse</strong><br />

Derudover er det godt at vide følgende:<br />

lim<br />

n→∞<br />

n a<br />

= 0 for alle a > 0 og b > 1<br />

bn (Dette kan f.eks. vises ved at bruge l’Hôspitals regel fra MM501 i alt<br />

⌈a⌉ gange). For c > 1 og d > 1, sæt n = log c (N) og b = c d . Så fås<br />

følgende variant:<br />

(log<br />

lim c N) a<br />

N→∞ N d = 0 for alle a > 0 og c, d > 1<br />

Dvs. enhvert polyn<strong>om</strong>ium er o() af enhver exponentialfunktion, og enhver<br />

logaritme (selv opløftet i enhver potens) er o() af enhvert polyn<strong>om</strong>ium.<br />

Eksempelvis giver dette at:<br />

n 100<br />

lim<br />

n→∞ 2 n = 0 ⇒ n 100 = o(2 n (log n) 3<br />

) og lim<br />

n→∞ n 0.5 = 0 ⇒ (log n) 3 = o(n 0.5 )

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!