|
© h.hofstede (h.hofstede@hogeland.nl)
|
|
De kortste route.
- Dijkstra's Algoritme- |
|
|
|
|
Een gewogen graaf is
een graaf waarvan aan de verbindingslijnen getallen zijn verbonden. Je
zou het kunnen zien als de afstanden in kilometers.
Een interessante vraagt is dan natuurlijk "Wat is de kortste
afstand tussen A en B?"
Nou heeft de Nederlander Edsger Dijkstra daar al in 1959 een slimme
methode voor bedacht. En die heet dan ook sindsdien Dijkstra's
Algoritme. Je komt het trouwens ook wel tegen onder de naam
driekleuren-algoritme, omdat er steeds drie soorten knooppunten zijn:
huidige, bezochte en niet-bezochte.
Het algoritme werkt als volgt: |
|
|
|
|
A. |
Geef de beginknoop
voorlopig afstand 0 (dat noemen we de huidige knoop) en
alle andere knopen voorlopige afstand ∞
(die noemen we niet-bezochte knopen).
|
B. |
Bekijk alle directe
buren van de huidige knoop. Voor elk van die knopen kun je twee
afstanden vinden:
1. de voorlopige afstand die er al bij staat
2. de voorlopige afstand van de huidige knoop plus de lengte van
de verbindingslijn vanaf de huidige knoop naar deze
Kies de kortste afstand van beiden. Dat wordt de nieuwe voorlopige
afstand van deze knoop. |
C. |
Als je alle
buurknopen hebt gehad wordt de huidige knoop nu een
bezochte knoop.
Kies als nieuwe huidige knoop de knoop met de kleinste voorlopige
afstand.
Ga weer naar stap B. |
|
|
|
|
Voorbeeldje: |
|
|
|
|
|
|
|
|
|
In deze plaatjes 1 tm
10 zie je hoe je het in zijn werk gaat. De groene knoop is de huidige,
de rode zijn bezochte knopen, de zwarte zijn niet-bezochte knopen. De
blauwe getallen geven de lengte van de verbindingslijn, de rode getallen
geven de voorlopige kortste afstand tot de knoop. |
|
|
|
|
1. |
Kies A als
startknoop, geef die afstand 0, en
alle anderen afstand ∞ |
2. |
De buren B, C, D
krijgen afstanden 6, 5, 4. |
3. |
A wordt een bezochte
knoop, D wordt de huidige knoop. E wordt 4
+ 4 = 8.
C zou 4 + 2
= 6 worden, maar dat is meer dan
5 dus C blijft
5. |
4. |
D wordt een bezochte
knoop, C wordt de huidige knoop. G wordt 5
+ 5 = 10,
F wordt 5 +
4 = 9,
B zou 5 + 3
= 8 worden, maar is al
6, dus blijft
6. |
5. |
C wordt een bezochte
knoop, B wordt de huidige knoop. F wordt
6 + 2
= 8, H wordt
6 + 7
= 13 |
6. |
B wordt bezochte
knoop, E wordt de huidige knoop. I wordt
8 + 7 =
15. G zou
8 + 3
= 11 worden, maar is al
10 dus blijft
10. |
7. |
E wordt bezochte
knoop, F wordt huidige knoop. H wordt 8
+ 4 = 12.
G zou 8 + 3
= 11 worden, maar is al
10 dus blijft
10. |
8. |
F wordt bezochte
knoop, G wordt huidige knoop. I wordt 10
+ 3 = 13.
H zou 10 +
5 = 15 worden, maar is al
12, dus blijft
12. |
9. |
G wordt bezochte
knoop, H wordt huidige knoop. I zou 12
+ 8 = 18
worden, maar is al 13, dus blijft
13. |
10. |
KLAAR! |
|
|
|
|
Op deze manier vind
je van alle andere knopen de minimale afstand tot knoop A. Merk
nog even op dat je niet vindt welke route die afstand oplevert.
Als je die "beste routes" ook wilt weten kun je elke keer
als je het getal van een knoop verandert de verbindingslijn die dat
oplevert kleuren, en de eventuele anderen die al gekleurd zijn weer
zwart maken.
Hieronder geeft dat de groene optimale routes (ga zelf maar na). |
|
|
|
|
|
|
|
|
|
OPGAVEN |
|
|
|
|
1. |
Zoek met behulp van
Dijkstra's algoritme de kortste verbinding tussen A en B in de graaf
hiernaast. |
|
|
|
|
|
2. |
Zoek met behulp van
Dijkstra's algoritme de kortste verbinding tussen A en B in de graaf
hiernaast. |
|
|
|
|
|
|
|
|
|
© h.hofstede (h.hofstede@hogeland.nl)
|