03.07.2013 Views

Gretige algoritmen - caagt

Gretige algoritmen - caagt

Gretige algoritmen - caagt

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

wat zijn gretige <strong>algoritmen</strong><br />

toepassingen in grafentheorie<br />

minimale-kost opspannende bomen<br />

(Kruskal, Prim)<br />

kortste gewogen pad (Dijkstra)<br />

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


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

Wat zijn gretige <strong>algoritmen</strong>?<br />

in elke stap “lokaal” optimale keuze maken<br />

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


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

Wat zijn gretige <strong>algoritmen</strong>?<br />

in elke stap “lokaal” optimale keuze maken<br />

Voorbeeld<br />

wisselgeld teruggeven<br />

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


Minimale-kost<br />

opspannende bomen<br />

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


Wegennetwerk aanleggen<br />

Probleemstelling<br />

gegeven: n steden<br />

voor elk paar steden Si en Sj: kost om<br />

rechtstreekse weg tussen Si en Sj aan te<br />

leggen<br />

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


Wegennetwerk aanleggen<br />

Probleemstelling<br />

gegeven: n steden<br />

voor elk paar steden Si en Sj: kost om<br />

rechtstreekse weg tussen Si en Sj aan te<br />

leggen<br />

definitie: A bereikbaar uit B als<br />

ofwel A en B rechtstreeks verbonden,<br />

ofwel bestaan er tussenliggende steden<br />

X1,...Xk, zodat A–X1, X1–X2, . . . , Xk–B<br />

rechtstreekse verbindingen zijn<br />

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


Wegennetwerk aanleggen<br />

Probleemstelling (vervolg)<br />

gevraagd: aanleggen wegennetwerk, zo dat:<br />

elke stad bereikbaar uit elke andere stad<br />

zo goedkoop mogelijk<br />

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


Wegennetwerk aanleggen<br />

Probleemstelling (vervolg)<br />

gevraagd: aanleggen wegennetwerk, zo dat:<br />

elke stad bereikbaar uit elke andere stad<br />

zo goedkoop mogelijk<br />

Grafentheoretisch probleem<br />

minimale-kost opspannende boom (MST)<br />

Gekende <strong>algoritmen</strong>: Kruskal / Prim<br />

gretige <strong>algoritmen</strong> die optimale oplossing<br />

geven<br />

correctheid te bewijzen<br />

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


Minimale-kost opspannende boom<br />

Algoritme van Kruskal<br />

telkens kleinste boog toevoegen, op<br />

voorwaarde dat nog steeds acyclisch<br />

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


Minimale-kost opspannende boom<br />

Algoritme van Kruskal<br />

telkens kleinste boog toevoegen, op<br />

voorwaarde dat nog steeds acyclisch<br />

Algoritme van Prim<br />

voorlopige boom telkens uitbreiden met<br />

kleinste boog die top uit boom verbindt met<br />

top buiten boom<br />

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


Algoritme van Kruskal<br />

Input: gewogen graaf G = (V,E) met n toppen<br />

en m bogen<br />

Output: bogenverzameling ET van MST T<br />

van G<br />

1: sorteer E zo dat w(ei1 ) ≤ · · · ≤ w(eim )<br />

2: ET ← ∅<br />

3: k ← 0<br />

4: while |ET | < n − 1 do<br />

5: k ← k + 1<br />

6: if 〈ET ∪ {eik }〉 is acyclisch then<br />

7: ET ← ET ∪ {eik }<br />

8: return ET<br />

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


Algoritme van Kruskal<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Kruskal levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

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


Algoritme van Kruskal<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Kruskal levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

Efficiënte implementatie<br />

hoe controleren dat toevoegen van boog een<br />

cykel zou vormen?<br />

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


Algoritme van Kruskal<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Kruskal levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

Efficiënte implementatie<br />

hoe controleren dat toevoegen van boog een<br />

cykel zou vormen?<br />

Complexiteit<br />

totale kost Θ(m log n + n 2 )<br />

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


Algoritme van Prim<br />

Input: gewogen graaf G = (V,E) met n toppen<br />

en m bogen<br />

Output: bogenverzameling ET van MST T<br />

van G<br />

1: zij x0 willekeurige top van G<br />

2: VT ← {x0}; ET ← ∅<br />

3: while |ET | < n − 1 do<br />

4: zij e ′ = x ′ y ′ een boog zo dat w(e ′ ) =<br />

min{w(e) | e = xy,x ∈ VT,y ∈ V \ VT }<br />

5: VT ← VT ∪ {y ′ }<br />

6: ET ← ET ∪ {e ′ }<br />

7: return ET<br />

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


Algoritme van Prim<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Prim levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

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


Algoritme van Prim<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Prim levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

Complexiteit van eenvoudige implementatie<br />

kost Θ(nm)<br />

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


Algoritme van Prim<br />

Stelling: correctheid van gretige strategie<br />

algoritme van Prim levert minimale-kost<br />

opspannende boom voor samenhangende<br />

gewogen graaf<br />

Complexiteit van eenvoudige implementatie<br />

kost Θ(nm)<br />

Efficiënte implementatie<br />

gebruikt prioriteitswachtlijn<br />

kost reduceren tot Θ(m log n)<br />

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


Algoritme van Dijkstra<br />

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


Kortste gewogen pad<br />

Probleemstelling<br />

gegeven: graaf G = (V,E), starttop v ∈ V<br />

G is gewogen graaf<br />

enkel niet-negatieve booggewichten<br />

voor elke top w ∈ V , kortste pad van v naar w<br />

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


Algoritme van Dijkstra<br />

Werking<br />

werkt via labeling strategie<br />

toppen krijgen voorlopig label, d.i.<br />

bovengrens voor afstand<br />

in elke stap: top met kleinste voorlopig label<br />

definitief gelabeld + labels buren evt.<br />

aangepast<br />

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


Algoritme van Dijkstra<br />

Werking<br />

werkt via labeling strategie<br />

toppen krijgen voorlopig label, d.i.<br />

bovengrens voor afstand<br />

in elke stap: top met kleinste voorlopig label<br />

definitief gelabeld + labels buren evt.<br />

aangepast<br />

Opmerkingen<br />

gretig algoritme<br />

geeft correct antwoord (te bewijzen)<br />

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


Pseudocode Dijkstra<br />

Input: gewogen G met n toppen, u0 ∈ V (G)<br />

(booggewichten zijn niet-negatief !)<br />

Output: ∀v ∈ V (G), gewogen d(u0,v), en<br />

voorganger p(v) op evt. kortste u0-v-pad<br />

1: S ← {u0}; S ← V (G) − {u0}<br />

2: l(u0) ← 0; l(v) ← ∞, ∀v ∈ V (G) − {u0}<br />

3: for all i from 0 to n − 1 do<br />

4: {(A) Aanpassen labels}<br />

5: for all v ∈ S waarvoor uiv ∈ E(G) do<br />

6: if l(v) > l(ui) + w(uiv) then<br />

7: l(v) ← l(ui) + w(uiv)<br />

8: p(v) ← ui<br />

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


Pseudocode Dijkstra (2)<br />

1: for all i from 0 to n − 1 (vervolg) do<br />

2: {(B) Bepalen volgende top}<br />

3: bepaal lmin ← min{l(v)|v ∈ S}<br />

4: zij vj ∈ S een top met l(vj) = lmin<br />

5: d(u0,vj) ← l(vj)<br />

6: ui+1 ← vj<br />

7: {(C) Aanpassen S en S}<br />

8: S ← S ∪ {ui+1}; S ← S \ {ui+1}<br />

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


Correctheid van algoritme van Dijkstra<br />

bewijs door inductie<br />

bewijs dat l(ui+1) = d(u0,ui+1)<br />

l(ui+1)<br />

= min{l(v)|v ∈ Si}<br />

= min{l(u) + w(uv)|u ∈ Si,v ∈ Si,uv ∈ E(G)}<br />

= min{d(u0,u) + w(uv)|u ∈ Si,v ∈ Si,uv ∈ E(G)<br />

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


Complexiteit<br />

Complexiteit eenvoudige implementatie<br />

kost Θ(n 2 )<br />

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


Complexiteit<br />

Complexiteit eenvoudige implementatie<br />

kost Θ(n 2 )<br />

Voor efficiënte implementatie<br />

gebruik prioriteitswachtlijn om voorlopig<br />

gelabelde toppen bij te houden<br />

immers: in elke stap hieruit kleinste label te<br />

selecteren<br />

kost herleiden tot Θ(m log n)<br />

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

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

Saved successfully!

Ooh no, something went wrong!