03.07.2013 Views

2. Analyse van algoritmen

2. Analyse van algoritmen

2. Analyse van algoritmen

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.

<strong>2.</strong> <strong>Analyse</strong> <strong>van</strong> <strong>algoritmen</strong><br />

Inleiding<br />

Complexiteit <strong>van</strong> <strong>algoritmen</strong><br />

Asymptotische notaties<br />

Bepalen <strong>van</strong> tijds- en geheugencomplexiteit<br />

Praktische beschouwingen<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.1/38


Efficiëntie <strong>van</strong> <strong>algoritmen</strong><br />

Wat?/Waarom?<br />

de efficiëntie <strong>van</strong> een algoritme inschatten<br />

twee <strong>algoritmen</strong> voor eenzelfde probleem<br />

vergelijken<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.2/38


Efficiëntie <strong>van</strong> <strong>algoritmen</strong><br />

Wat?/Waarom?<br />

de efficiëntie <strong>van</strong> een algoritme inschatten<br />

twee <strong>algoritmen</strong> voor eenzelfde probleem<br />

vergelijken<br />

Een mogelijkheid: experimenteel<br />

algoritme(n) implementeren als programma<br />

programma(s) uitvoeren voor een bepaalde,<br />

goed gekozen set <strong>van</strong> inputs<br />

uitvoeringstijd <strong>van</strong> programma(s) meten<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.2/38


Nadelen <strong>van</strong> experimentele benadering<br />

eventueel overbodig (programmeer)werk<br />

uiteindelijk blijft maar 1 programma over<br />

misschien voldoet geen <strong>van</strong> beide<br />

<strong>algoritmen</strong><br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.3/38


Nadelen <strong>van</strong> experimentele benadering<br />

eventueel overbodig (programmeer)werk<br />

uiteindelijk blijft maar 1 programma over<br />

misschien voldoet geen <strong>van</strong> beide<br />

<strong>algoritmen</strong><br />

mogelijk vals beeld<br />

een programma kan ‘beter geschreven’ zijn<br />

dan een ander<br />

misschien zijn testgevallen niet<br />

representatief<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.3/38


Asymptotische analyse<br />

Andere techniek<br />

zgn. ‘asymptotische analyse’<br />

theoretische studie <strong>van</strong> efficiëntie <strong>van</strong> een<br />

algoritme wanneer probleem groot wordt<br />

schattingstechniek<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.4/38


Asymptotische analyse<br />

Andere techniek<br />

zgn. ‘asymptotische analyse’<br />

theoretische studie <strong>van</strong> efficiëntie <strong>van</strong> een<br />

algoritme wanneer probleem groot wordt<br />

schattingstechniek<br />

Werkwijze<br />

uitdrukken <strong>van</strong> uitvoeringstijd in functie <strong>van</strong><br />

probleemgrootte<br />

bepalen <strong>van</strong> dominante factor in uitdrukking<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.4/38


Probleemgrootte<br />

Karakterisatie <strong>van</strong> probleem<br />

a.h.v. beperkt aantal rele<strong>van</strong>te grootheden<br />

die uitvoeringstijd beïnvloeden<br />

die maat voor om<strong>van</strong>g <strong>van</strong> probleem vormen<br />

meestal afhankelijk <strong>van</strong> grootte <strong>van</strong> input<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.5/38


Probleemgrootte<br />

Karakterisatie <strong>van</strong> probleem<br />

a.h.v. beperkt aantal rele<strong>van</strong>te grootheden<br />

die uitvoeringstijd beïnvloeden<br />

die maat voor om<strong>van</strong>g <strong>van</strong> probleem vormen<br />

meestal afhankelijk <strong>van</strong> grootte <strong>van</strong> input<br />

Voorbeelden<br />

sorteren <strong>van</strong> rij <strong>van</strong> n getallen<br />

verwerken <strong>van</strong> n getallen in [0,k]<br />

berekenen <strong>van</strong> n beduidende cijfers <strong>van</strong> π<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.5/38


Tijdscomplexiteit<br />

Inschatten <strong>van</strong> uitvoeringstijd<br />

uitdrukken als het aantal uitgevoerde<br />

elementaire bewerkingen (stappen)<br />

in functie <strong>van</strong> probleemgrootte n<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.6/38


Tijdscomplexiteit<br />

Inschatten <strong>van</strong> uitvoeringstijd<br />

uitdrukken als het aantal uitgevoerde<br />

elementaire bewerkingen (stappen)<br />

in functie <strong>van</strong> probleemgrootte n<br />

Theoretisch model (sequentiële uitvoering)<br />

standaard instructieset (optelling, . . . )<br />

elke basisinstructie kost 1 tijdseenheid<br />

integers hebben vast formaat<br />

RAM geheugen heeft onbeperkte capaciteit<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.6/38


Theoretisch model<br />

Tekortkomingen<br />

basisinstructies niet exact dezelfde tijd<br />

vermenigvuldigen duurder dan optellen<br />

I/O trager dan berekeningen<br />

evt. vertragingen door geheugenstructuur<br />

andere factoren, vb. kwaliteit <strong>van</strong> compiler,<br />

specificaties <strong>van</strong> computer<br />

worden niet beschouwd in theoretisch model<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.7/38


Voorbeeld grootste<br />

Bepalen <strong>van</strong> grootste element <strong>van</strong> rij<br />

Input: rij elementen (a0,a2,...,an−1)<br />

Output: waarde g <strong>van</strong> grootste element<br />

1: g ← a0<br />

2: for i from 1 to n − 1 do<br />

3: if ai > g then<br />

4: g ← ai<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.8/38


Voorbeeld grootste<br />

Bepalen <strong>van</strong> grootste element <strong>van</strong> rij<br />

Input: rij elementen (a0,a2,...,an−1)<br />

Output: waarde g <strong>van</strong> grootste element<br />

1: g ← a0<br />

2: for i from 1 to n − 1 do<br />

3: if ai > g then<br />

4: g ← ai<br />

Uitvoeringstijd<br />

probleemgrootte n = aantal elementen in rij<br />

T(n) = c1n + c2 (constanten c1, c2)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.8/38


Asymptotische analyse<br />

Uitvoeringstijd<br />

uitgedrukt als aantal bewerkingen in functie<br />

<strong>van</strong> probleemgrootte n<br />

Asymptotische analyse<br />

belangrijk is gedrag <strong>van</strong> functie voor grote n<br />

orde <strong>van</strong> toename <strong>van</strong> functie<br />

hoe functie stijgt naarmate n toeneemt<br />

enkel stijgende functies<br />

reden: voor kleine n is ook uitvoeringstijd<br />

klein, welk algoritme ook gebruikt wordt<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.9/38


Werken met asymptotische notatie<br />

Informeel<br />

verwaarlozen constanten<br />

100n = Θ(n)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.10/38


Werken met asymptotische notatie<br />

Informeel<br />

verwaarlozen constanten<br />

100n = Θ(n)<br />

verwaarlozen lagere-ordetermen in veelterm<br />

n 3 + 10n 2 + 400n + 8000 = Θ(n 3 )<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.10/38


Werken met asymptotische notatie<br />

Informeel<br />

verwaarlozen constanten<br />

100n = Θ(n)<br />

verwaarlozen lagere-ordetermen in veelterm<br />

n 3 + 10n 2 + 400n + 8000 = Θ(n 3 )<br />

Intuïtieve verklaring<br />

lagere-ordetermen worden insignificant voor<br />

grote n<br />

voorbeeld: voor n = 1000<br />

n 3 + 10n 2 + 400n + 8000 = 1 010 408 000<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.10/38


Asymptotische notaties<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.11/38


Asymptotische notaties<br />

Asymptotische notatie<br />

vergelijken gedrag op ∞ <strong>van</strong> 2 functies f en g<br />

functies f(n) en g(n) gedefinieerd op N<br />

onderstellen dat f en g asymptotisch<br />

niet-negatief<br />

immers, voorstellen <strong>van</strong> uitvoeringstijden<br />

Verscheidene asymptotische notaties<br />

O-notatie, Ω-notatie, Θ-notatie o-notatie,<br />

ω-notatie<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.12/38


O-notatie<br />

Definitie<br />

f asymptotisch naar boven begrensd door g<br />

f(n) = O(g(n)) ⇔<br />

∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ f(n) ≤ cg(n)<br />

Betekenis<br />

f(n) is naar boven begrensd door een<br />

veelvoud <strong>van</strong> g(n), voor voldoende grote n<br />

orde <strong>van</strong> toename <strong>van</strong> f is kleiner dan of<br />

gelijk aan orde <strong>van</strong> toename <strong>van</strong> g<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.13/38


Ω-notatie<br />

Definitie<br />

f asymptotisch naar onder begrensd door g<br />

f(n) = Ω(g(n)) ⇔<br />

∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ cg(n) ≤ f(n)<br />

Betekenis<br />

f(n) is naar onder begrensd door een<br />

veelvoud <strong>van</strong> g(n), voor voldoende grote n<br />

orde <strong>van</strong> toename <strong>van</strong> f is groter dan of gelijk<br />

aan orde <strong>van</strong> toename <strong>van</strong> g<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.14/38


Θ-notatie<br />

Definitie<br />

f en g hebben hetzelfde asymptotische<br />

gedrag<br />

f(n) = Θ(g(n)) ⇔<br />

f(n) = O(g(n)) ∧ f(n) = Ω(g(n)) ⇔<br />

∃c1,c2,n0 > 0, ∀n ≥ n0 :<br />

c1g(n) ≤ f(n) ≤ c2g(n)<br />

Betekenis<br />

orde <strong>van</strong> toename <strong>van</strong> f is dezelfde als orde<br />

<strong>van</strong> toename <strong>van</strong> g<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.15/38


o-notatie<br />

Definitie<br />

f niet-scherp asymptotisch naar boven<br />

begrensd door g<br />

f(n) = o(g(n)) ⇔<br />

f(n) = O(g(n)) ∧ f(n) = Θ(g(n)) ⇔<br />

∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ f(n) < cg(n)<br />

Betekenis<br />

orde <strong>van</strong> toename <strong>van</strong> f is strikt kleiner dan<br />

orde <strong>van</strong> toename <strong>van</strong> g<br />

f(n) wordt insignificant tegenover g(n) voor<br />

grote n Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.16/38


ω-notatie<br />

Definitie<br />

f niet-scherp asymptotisch naar beneden<br />

begrensd door g<br />

f(n) = ω(g(n)) ⇔<br />

f(n) = Ω(g(n)) ∧ f(n) = Θ(g(n)) ⇔<br />

∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ cg(n) < f(n)<br />

Betekenis<br />

orde <strong>van</strong> toename <strong>van</strong> f is strikt groter dan<br />

orde <strong>van</strong> toename <strong>van</strong> g<br />

g(n) wordt insignificant tegenover f(n) voor<br />

grote n Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.17/38


Rekenregels<br />

1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />

⇒ f(n) = Θ(h(n))<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.18/38


Rekenregels<br />

1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />

⇒ f(n) = Θ(h(n))<br />

<strong>2.</strong> f(n) = Θ(k × g(n)), voor constante k<br />

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

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.18/38


Rekenregels<br />

1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />

⇒ f(n) = Θ(h(n))<br />

<strong>2.</strong> f(n) = Θ(k × g(n)), voor constante k<br />

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

3. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />

⇒ f1(n) + f2(n) = Θ(max(g1(n),g2(n)))<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.18/38


Rekenregels<br />

1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />

⇒ f(n) = Θ(h(n))<br />

<strong>2.</strong> f(n) = Θ(k × g(n)), voor constante k<br />

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

3. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />

⇒ f1(n) + f2(n) = Θ(max(g1(n),g2(n)))<br />

4. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />

⇒ f1(n) × f2(n) = Θ(g1(n) × g2(n))<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.18/38


Rekenregels<br />

1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />

⇒ f(n) = Θ(h(n))<br />

<strong>2.</strong> f(n) = Θ(k × g(n)), voor constante k<br />

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

3. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />

⇒ f1(n) + f2(n) = Θ(max(g1(n),g2(n)))<br />

4. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />

⇒ f1(n) × f2(n) = Θ(g1(n) × g2(n))<br />

(analoog voor andere notaties)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.18/38


Bepalen <strong>van</strong> tijds- en<br />

geheugencomplexiteit<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.19/38


Voorbeeld 1<br />

Java-code<br />

int som=0;<br />

for ( int i=1; i


Voorbeeld 2<br />

Java-code<br />

int som=0;<br />

for ( int i=1; i


Voorbeeld 2 (vervolg)<br />

Java-code<br />

int som=0;<br />

for ( int i=1; i


Voorbeeld 3<br />

Opgelet!<br />

niet elke for-lus heeft tijd Θ(n)<br />

Java-code<br />

int som=0;<br />

for ( int i=1; i


Voorbeeld met array<br />

Java-code<br />

int som=0;<br />

for ( int i=0; i


Kost <strong>van</strong> array-bewerking<br />

Opvragen <strong>van</strong> array-element a[i]?<br />

array is aaneengesloten blok in geheugen<br />

plaats i-de component is te berekenen<br />

zij x beginadres <strong>van</strong> blok<br />

zij b aantal bytes per component<br />

dan: adres a[i] = x + b × i<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.25/38


Kost <strong>van</strong> array-bewerking<br />

Opvragen <strong>van</strong> array-element a[i]?<br />

Dus<br />

array is aaneengesloten blok in geheugen<br />

plaats i-de component is te berekenen<br />

zij x beginadres <strong>van</strong> blok<br />

zij b aantal bytes per component<br />

dan: adres a[i] = x + b × i<br />

kost opvragen a[i] is onafhankelijk <strong>van</strong> i<br />

bewerking vraagt constante tijd<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.25/38


Geheugencomplexiteit: voorbeelden<br />

Array met n getallen<br />

elke component neemt b bytes in<br />

G(n) = Θ(n)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.26/38


Geheugencomplexiteit: voorbeelden<br />

Array met n getallen<br />

elke component neemt b bytes in<br />

G(n) = Θ(n)<br />

Vriendschapsgraaf<br />

voor n personen bijhouden wie met wie<br />

bevriend is<br />

bvb. n × n tabel A = ai,j<br />

ai,j = 1 als i bevriend met j, anders 0<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.26/38


Geheugencomplexiteit: voorbeelden<br />

Array met n getallen<br />

elke component neemt b bytes in<br />

G(n) = Θ(n)<br />

Vriendschapsgraaf<br />

voor n personen bijhouden wie met wie<br />

bevriend is<br />

bvb. n × n tabel A = ai,j<br />

ai,j = 1 als i bevriend met j, anders 0<br />

G(n) = Θ(n 2 )<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.26/38


Praktische<br />

beschouwingen<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.27/38


Functies voor de uitvoeringstijd<br />

Veelvoorkomende functies<br />

lineaire orde <strong>van</strong> toename (n)<br />

kwadratische orde <strong>van</strong> toename (n 2 )<br />

kubische orde <strong>van</strong> toename (n 3 )<br />

logaritmische orde <strong>van</strong> toename (log n)<br />

n log n orde <strong>van</strong> toename<br />

exponentiële orde <strong>van</strong> toename (2 n )<br />

Hoe verhouden functies zich tot elkaar?<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.28/38


Vergelijken <strong>van</strong> <strong>algoritmen</strong><br />

Probleemstelling<br />

meerdere <strong>algoritmen</strong> voor zelfde probleem P<br />

Theoretische analyse<br />

algoritme A1: Θ(n 3 )<br />

algoritme A2: Θ(n 2 )<br />

algoritme A3: Θ(n log n)<br />

algoritme A4: Θ(n)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.29/38


Experimentele resultaten<br />

Metingen in ms<br />

A4 A3 A2 A1<br />

n Θ(n) Θ(n log n) Θ(n 2 ) Θ(n 3 )<br />

10 0.018 0.17 0.15 0.35<br />

100 0.15 <strong>2.</strong>5 13 171<br />

1 000 1.5 35 1 265 151 730<br />

10 000 15 434 128 435 —<br />

100 000 147 5 396 — —<br />

1 000 000 1 594 60 476 — —<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.30/38


Experimenten analyseren<br />

Conclusies<br />

voor kleine n: alle <strong>algoritmen</strong> bruikbaar<br />

voor n > 1000: Θ(n 3 ) algoritme traag<br />

voor n > 10000: Θ(n 2 ) algoritme traag<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.31/38


Experimenten analyseren<br />

Conclusies<br />

voor kleine n: alle <strong>algoritmen</strong> bruikbaar<br />

voor n > 1000: Θ(n 3 ) algoritme traag<br />

voor n > 10000: Θ(n 2 ) algoritme traag<br />

Verschil in orde <strong>van</strong> toename<br />

Θ(n): als n × 10, dan ook tijd ×10<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.31/38


Experimenten analyseren<br />

Conclusies<br />

voor kleine n: alle <strong>algoritmen</strong> bruikbaar<br />

voor n > 1000: Θ(n 3 ) algoritme traag<br />

voor n > 10000: Θ(n 2 ) algoritme traag<br />

Verschil in orde <strong>van</strong> toename<br />

Θ(n): als n × 10, dan ook tijd ×10<br />

Θ(n 2 ): als n × 10, dan tijd ×100<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.31/38


Experimenten analyseren<br />

Conclusies<br />

voor kleine n: alle <strong>algoritmen</strong> bruikbaar<br />

voor n > 1000: Θ(n 3 ) algoritme traag<br />

voor n > 10000: Θ(n 2 ) algoritme traag<br />

Verschil in orde <strong>van</strong> toename<br />

Θ(n): als n × 10, dan ook tijd ×10<br />

Θ(n 2 ): als n × 10, dan tijd ×100<br />

Θ(n 3 ): als n × 10, dan tijd ×1000<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.31/38


Traagstijgend logaritme<br />

Θ(n log n) stijgt iets sneller dan Θ(n)<br />

als n × 10, dan tijd ca. ×12<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.32/38


Traagstijgend logaritme<br />

Θ(n log n) stijgt iets sneller dan Θ(n)<br />

als n × 10, dan tijd ca. ×12<br />

Verschil in orde <strong>van</strong> toename<br />

lineaire algoritme is sneller, zelfs bij<br />

inefficiënte implementatie <strong>van</strong> Θ(n) algo.<br />

optimale implementatie <strong>van</strong> Θ(n 2 ) algo.<br />

dus: eerst algoritme proberen versnellen, dan<br />

pas implementatie optimaliseren<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.32/38


Lineaire complexiteit<br />

Lineaire functies: <strong>van</strong> de vorm cn<br />

voorgesteld door rechte lijnen<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.33/38


Lineaire complexiteit<br />

Lineaire functies: <strong>van</strong> de vorm cn<br />

voorgesteld door rechte lijnen<br />

Kenmerkende eigenschap<br />

lineaire orde <strong>van</strong> toename<br />

bij toenemende n, neemt uitvoeringstijd toe in<br />

dezelfde verhouding<br />

bvb. als n verdubbelt, verdubbelt tijd<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.33/38


Lineaire complexiteit<br />

Lineaire functies: <strong>van</strong> de vorm cn<br />

voorgesteld door rechte lijnen<br />

Kenmerkende eigenschap<br />

lineaire orde <strong>van</strong> toename<br />

bij toenemende n, neemt uitvoeringstijd toe in<br />

dezelfde verhouding<br />

bvb. als n verdubbelt, verdubbelt tijd<br />

Merk op<br />

algoritme met tijd Θ(n) is meestal goed<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.33/38


Kwadratische complexiteit<br />

Kwadratische functies: leidende term in n 2<br />

stijgen sneller dan lineaire functies<br />

grotere orde <strong>van</strong> toename dan lineaire fties<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.34/38


Kwadratische complexiteit<br />

Kwadratische functies: leidende term in n 2<br />

stijgen sneller dan lineaire functies<br />

grotere orde <strong>van</strong> toename dan lineaire fties<br />

Merk op<br />

voor kleine n is kwadratische tijd soms beter<br />

dan lineaire, afhankelijk <strong>van</strong> constante, bvb.<br />

voor n < 5 is 10n > 2n 2<br />

voor n < 10 is 20n > 2n 2<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.34/38


Kwadratische complexiteit<br />

Kwadratische functies: leidende term in n 2<br />

stijgen sneller dan lineaire functies<br />

grotere orde <strong>van</strong> toename dan lineaire fties<br />

Merk op<br />

voor kleine n is kwadratische tijd soms beter<br />

dan lineaire, afhankelijk <strong>van</strong> constante, bvb.<br />

voor n < 5 is 10n > 2n 2<br />

voor n < 10 is 20n > 2n 2<br />

maar er is steeds punt waarop kwadratische<br />

tijd slechter wordt<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.34/38


Logaritmische en n log n complex.<br />

Logaritmische functies: stijgen zeer traag<br />

bvb. log 2(1 000 000) ≈ 20<br />

Θ(log n) <strong>algoritmen</strong> meestal zeer goed<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.35/38


Logaritmische en n log n complex.<br />

Logaritmische functies: stijgen zeer traag<br />

bvb. log 2(1 000 000) ≈ 20<br />

Θ(log n) <strong>algoritmen</strong> meestal zeer goed<br />

n log n functies<br />

stijgen sneller dan lineaire en trager dan<br />

kwadratische functies<br />

maar iets slechter dan Θ(n) en veel beter dan<br />

Θ(n 2 )<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.35/38


Voorbeeld: schaakspel<br />

Legende<br />

uitvinder schaakspel mocht een wens doen<br />

hij wenste rijstkorrels op schaakbordvakjes<br />

en de koning ging failliet. . .<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.36/38


Voorbeeld: schaakspel<br />

Legende<br />

uitvinder schaakspel mocht een wens doen<br />

hij wenste rijstkorrels op schaakbordvakjes<br />

en de koning ging failliet. . .<br />

1 2 4 8 16 32 64<br />

...<br />

??<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.36/38


Exponentiële functies<br />

Aantal rijstkorrels op laatste vakje?<br />

is 2 63<br />

Hoeveel is 2 63 ?<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.37/38


Exponentiële functies<br />

Aantal rijstkorrels op laatste vakje?<br />

is 2 63<br />

Hoeveel is 2 63 ?<br />

2 10 = 1024 is ongeveer 10 3<br />

2 63 = (2 10 ) 6 × 2 3 is ongeveer 8 × 10 18<br />

Hoeveel is 10 18 ?<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.37/38


Exponentiële functies<br />

Aantal rijstkorrels op laatste vakje?<br />

is 2 63<br />

Hoeveel is 2 63 ?<br />

2 10 = 1024 is ongeveer 10 3<br />

2 63 = (2 10 ) 6 × 2 3 is ongeveer 8 × 10 18<br />

Hoeveel is 10 18 ?<br />

10 18 : #graankorrels geproduceerd op aarde<br />

10 12 : jaarlijkse wereldgraanproductie<br />

(website: “The World of Big Numbers”)<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.37/38


Exponentiële complexiteit<br />

Exponentiële functies: stijgen zeer snel<br />

bvb. 2 63 ≈ 10 18<br />

algoritme met exponentiële tijd is veel te duur!<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.38/38


Exponentiële complexiteit<br />

Exponentiële functies: stijgen zeer snel<br />

bvb. 2 63 ≈ 10 18<br />

algoritme met exponentiële tijd is veel te duur!<br />

Definities<br />

algoritme is efficiënt wanneer uitvoeringstijd<br />

een polynomiale functie is<br />

probleem is handelbaar als er een efficiënt<br />

algoritme voor bestaat<br />

Cursus Algoritmen en Datastructuren voor Geomatica (2008–2009) – p.38/38

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

Saved successfully!

Ooh no, something went wrong!