03.07.2013 Views

Grafen en algoritmen - Combinatorische algoritmen en ...

Grafen en algoritmen - Combinatorische algoritmen en ...

Grafen en algoritmen - Combinatorische algoritmen en ...

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>Graf<strong>en</strong></strong> <strong>en</strong> algoritm<strong>en</strong><br />

Inleiding tot algoritm<strong>en</strong><br />

Algoritmische complexiteit<br />

Voorstell<strong>en</strong> van graf<strong>en</strong><br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.1/29


Inleiding tot algoritm<strong>en</strong><br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.2/29


E<strong>en</strong> puzzel<br />

U2 concert<br />

hoogst<strong>en</strong>s 2 person<strong>en</strong> tegelijk overstek<strong>en</strong><br />

1 zaklamp, meeg<strong>en</strong>om<strong>en</strong> door persoon<br />

wandelsnelheid:<br />

Bono: 1 minuut om over te stek<strong>en</strong><br />

Edge: 2 minut<strong>en</strong> om over te stek<strong>en</strong><br />

Adam: 5 minut<strong>en</strong> om over te stek<strong>en</strong><br />

Larry: 10 minut<strong>en</strong> om over te stek<strong>en</strong><br />

17 minut<strong>en</strong> totale tijd beschikbaar<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.3/29


E<strong>en</strong> puzzel (2)<br />

Vrag<strong>en</strong><br />

Bepaal e<strong>en</strong> oplossing voor het probleem<br />

Geef e<strong>en</strong> algem<strong>en</strong>e oplossingsmethode<br />

Waarom geeft Microsoft dergelijke opgave?<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.4/29


E<strong>en</strong> raadspelletje<br />

Hoger-lager<br />

X kiest getal x tuss<strong>en</strong> 1 <strong>en</strong> n<br />

Y doet e<strong>en</strong> gok y, X geeft feedback:<br />

“hoger” (x > y); “lager” (x < y);<br />

“gerad<strong>en</strong>” (x = y)<br />

herhaal totdat gerad<strong>en</strong><br />

Opgave<br />

ontwerp strategie voor Y<br />

formuleer strategie<br />

in zo weinig mogelijk stapp<strong>en</strong> rad<strong>en</strong><br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.5/29


Raadspelletje (2)<br />

Formulering in pseudocode<br />

Input: getal n > 1, te rad<strong>en</strong> 1 ≤ x ≤ n<br />

Output: strategie voor rad<strong>en</strong> van x<br />

1: Stel x ← n <strong>en</strong> x ← 1<br />

2: while nog niet gerad<strong>en</strong> do<br />

3: Stel y ← (x + x)/2<br />

4: if y = x th<strong>en</strong><br />

5: gerad<strong>en</strong>!<br />

6: else if y < x th<strong>en</strong><br />

7: Stel x ← y<br />

8: else<br />

9: Stel x ← y<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.6/29


Raadspelletje (3)<br />

Correctheid van strategie<br />

bijhoud<strong>en</strong> interval [x,x] dat te zoek<strong>en</strong> x bevat<br />

bij begin: [1,n]<br />

in elke stap: verklein<strong>en</strong> van interval<br />

er geldt: voor willekeurige y ∈ [x,x]<br />

als y < x, dan x ∈ [x,y]<br />

als y > x, dan x ∈ [y,x]<br />

hier nem<strong>en</strong> we: midd<strong>en</strong> van interval<br />

verderzoek<strong>en</strong> in gereduceerd interval<br />

interval wordt uiteindelijk triviaal<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.7/29


Raadspelletje (4)<br />

Aantal stapp<strong>en</strong> voor rad<strong>en</strong> van x ∈ [1, 512]?<br />

hoogst<strong>en</strong>s 9 stapp<strong>en</strong><br />

Argum<strong>en</strong>tatie<br />

in elke stap “halveert” l<strong>en</strong>gte van interval<br />

aantal stapp<strong>en</strong> vooraleer l<strong>en</strong>gte 1?<br />

Algeme<strong>en</strong><br />

512 → 256 → 128 → 64 → 32 → 16 → 8 → 4 → 2 → 1<br />

merk op: 512 = 2 9 ; of ook: 9 = log 2 512<br />

rad<strong>en</strong> x ∈ [1,n] in hoogst<strong>en</strong>s ⌈log 2 n⌉ stapp<strong>en</strong><br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.8/29


Raadspelletje (5)<br />

Toepassing: binaire zoekmethode<br />

opzoek<strong>en</strong> in gesorteerde data<br />

Uitbreiding<br />

onderstel bov<strong>en</strong>gr<strong>en</strong>s interval niet gek<strong>en</strong>d<br />

strategie?<br />

aantal stapp<strong>en</strong>?<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.9/29


Voorbeeld<br />

Probleem<br />

gegev<strong>en</strong>: e<strong>en</strong> rij getall<strong>en</strong><br />

gevraagd: bepaal getal dat meeste voorkomt<br />

in deze rij<br />

Vrag<strong>en</strong><br />

mogelijke strategieën?<br />

welke is de beste strategie?<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.10/29


Algoritmische complexiteit<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.11/29


Algoritmische complexiteit<br />

Asymptotische analyse<br />

theoretische studie van efficiëntie van e<strong>en</strong><br />

algoritme wanneer probleem groot wordt<br />

schattingstechniek<br />

Werkwijze<br />

uitdrukk<strong>en</strong> van uitvoeringstijd in functie van<br />

probleemgrootte<br />

bepal<strong>en</strong> van dominante factor in uitdrukking<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.12/29


Probleemgrootte<br />

Karakterisatie van probleem<br />

a.h.v. beperkt aantal relevante groothed<strong>en</strong><br />

die uitvoeringstijd beïnvloed<strong>en</strong><br />

die maat voor omvang van probleem vorm<strong>en</strong><br />

meestal afhankelijk van grootte van input<br />

Voorbeeld<strong>en</strong><br />

sorter<strong>en</strong> van rij van n getall<strong>en</strong><br />

verwerk<strong>en</strong> van n getall<strong>en</strong> in [0,k]<br />

berek<strong>en</strong><strong>en</strong> van n beduid<strong>en</strong>de cijfers van π<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.13/29


Tijdscomplexiteit<br />

Inschatt<strong>en</strong> van uitvoeringstijd<br />

uitdrukk<strong>en</strong> als het aantal uitgevoerde<br />

elem<strong>en</strong>taire bewerking<strong>en</strong> (stapp<strong>en</strong>)<br />

in functie van probleemgrootte n<br />

Theoretisch model (sequ<strong>en</strong>tiële uitvoering)<br />

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

elke basisinstructie kost 1 tijdse<strong>en</strong>heid<br />

integers hebb<strong>en</strong> vast formaat<br />

RAM geheug<strong>en</strong> heeft onbeperkte capaciteit<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.14/29


Asymptotische notaties<br />

Asymptotische notatie<br />

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

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

onderstell<strong>en</strong> dat f <strong>en</strong> g asymptotisch<br />

niet-negatief<br />

immers, voorstell<strong>en</strong> van uitvoeringstijd<strong>en</strong><br />

Verscheid<strong>en</strong>e asymptotische notaties<br />

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

ω-notatie<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.15/29


O-notatie<br />

Definitie<br />

f asymptotisch naar bov<strong>en</strong> begr<strong>en</strong>sd door g<br />

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

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

Betek<strong>en</strong>is<br />

f(n) is naar bov<strong>en</strong> begr<strong>en</strong>sd door e<strong>en</strong><br />

veelvoud van g(n), voor voldo<strong>en</strong>de grote n<br />

orde van to<strong>en</strong>ame van f is kleiner dan of<br />

gelijk aan orde van to<strong>en</strong>ame van g<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.16/29


Ω-notatie<br />

Definitie<br />

f asymptotisch naar onder begr<strong>en</strong>sd door g<br />

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

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

Betek<strong>en</strong>is<br />

f(n) is naar onder begr<strong>en</strong>sd door e<strong>en</strong><br />

veelvoud van g(n), voor voldo<strong>en</strong>de grote n<br />

orde van to<strong>en</strong>ame van f is groter dan of gelijk<br />

aan orde van to<strong>en</strong>ame van g<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.17/29


Θ-notatie<br />

Definitie<br />

f <strong>en</strong> g hebb<strong>en</strong> 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 />

Betek<strong>en</strong>is<br />

orde van to<strong>en</strong>ame van f is dezelfde als orde<br />

van to<strong>en</strong>ame van g<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.18/29


o-notatie<br />

Definitie<br />

f niet-scherp asymptotisch naar bov<strong>en</strong><br />

begr<strong>en</strong>sd 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 />

Betek<strong>en</strong>is<br />

orde van to<strong>en</strong>ame van f is strikt kleiner dan<br />

orde van to<strong>en</strong>ame van g<br />

f(n) wordt insignificant teg<strong>en</strong>over g(n) voor<br />

grote n Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.19/29


ω-notatie<br />

Definitie<br />

f niet-scherp asymptotisch naar b<strong>en</strong>ed<strong>en</strong><br />

begr<strong>en</strong>sd 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 />

Betek<strong>en</strong>is<br />

orde van to<strong>en</strong>ame van f is strikt groter dan<br />

orde van to<strong>en</strong>ame van g<br />

g(n) wordt insignificant teg<strong>en</strong>over f(n) voor<br />

grote n Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.20/29


Werk<strong>en</strong> met asymptotische notatie<br />

Asymptotisch gedrag van f <strong>en</strong> g vergelijk<strong>en</strong><br />

bepaal lim<br />

n→∞<br />

Mogelijkhed<strong>en</strong><br />

f(n)<br />

g(n)<br />

limiet is nul: f(n) = o(g(n))<br />

limiet is +∞: f(n) = ω(g(n))<br />

limiet is constante = 0: f(n) = Θ(g(n))<br />

limiet bestaat niet: ge<strong>en</strong> conclusie via<br />

limietregel<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.21/29


Rek<strong>en</strong>regels<br />

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

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

2. 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 />

(te bewijz<strong>en</strong> via definities)<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.22/29


Werk<strong>en</strong> met asymptotische notatie<br />

Informeel<br />

verwaarloz<strong>en</strong> constant<strong>en</strong><br />

100n = Θ(n)<br />

verwaarloz<strong>en</strong> lagere-ordeterm<strong>en</strong> in veelterm<br />

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

Intuïtieve verklaring<br />

lagere-ordeterm<strong>en</strong> word<strong>en</strong> insignificant voor<br />

grote n<br />

voorbeeld: voor n = 1000<br />

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

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.23/29


Standaardfuncties<br />

Polynomiale functie<br />

leid<strong>en</strong>de term bepaalt orde van to<strong>en</strong>ame<br />

Logaritmische functie<br />

stijgt trager dan elke polynomiale functie<br />

Expon<strong>en</strong>tiële functie<br />

stijgt sneller dan elke polynomiale functie<br />

Faculteit, Fibonacci-getall<strong>en</strong><br />

stijg<strong>en</strong> minst<strong>en</strong>s expon<strong>en</strong>tieel<br />

(te bewijz<strong>en</strong> via limietregel)<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.24/29


Voorbeeld: schaakspel<br />

Leg<strong>en</strong>de<br />

uitvinder schaakspel mocht e<strong>en</strong> w<strong>en</strong>s do<strong>en</strong><br />

hij w<strong>en</strong>ste rijstkorrels op schaakbordvakjes<br />

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

1 2 4 8 16 32 64<br />

...<br />

??<br />

Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.25/29


Expon<strong>en</strong>tië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 <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.26/29


Vergelijk<strong>en</strong> van algoritm<strong>en</strong><br />

Probleemstelling<br />

meerdere algoritm<strong>en</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 <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.27/29


Experim<strong>en</strong>tele resultat<strong>en</strong><br />

Meting<strong>en</strong> 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 2.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 <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.28/29


Experim<strong>en</strong>t<strong>en</strong> analyser<strong>en</strong><br />

Conclusies<br />

voor kleine n: alle algoritm<strong>en</strong> bruikbaar<br />

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

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

Verschil in orde van to<strong>en</strong>ame<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 <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.29/29

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

Saved successfully!

Ooh no, something went wrong!