Privacy Policy Cookie Policy Terms and Conditions Kortstepadalgoritme - Wikipedia

Kortstepadalgoritme

Het kortstepadalgoritme (ook bekend als Dijkstra's algoritme) is een graaf-algoritme bedacht door Edsger Dijkstra. Gegeven een gerichte graaf G waarin de afstand tussen ieder tweetal verbonden punten van G ten minste 0 bedraagt, rekent het algoritme voor een bepaalde beginknoop g_b \in G de kortste afstand uit tot alle punten van G. Toepassingen van dit algoritme zijn onder meer bij verkeersmodellen, route-navigatiesystemen en telecommunicatie.

[bewerk] De basis

Het algoritme is gebaseerd op de opmerking dat de afstand (de lengte van het kortste pad) tussen ieder tweetal punten v en w van een gerichte graaf G als volgt berekend kan worden:

Zij d(x) \! de afstand tussen v en x, voor x een punt van G.
Zij N_w = \{y \in G | y \rightarrow w\}, de verzameling van punten y die direct verbonden zijn met w (via een tak van y naar w).
Zij gew(y,w) \! het gewicht van de tak tussen twee direct met elkaar verbonden knopen y en w.
De afstand van v naar w is d(w) = min \{d(y) + gew(y,w) | y \in N_w\}, het minimum van de som van de afstand van v naar een punt y in N plus de directe afstand van dat punt naar w. Oftewel - weinig verrassend - als de som van alle directe afstanden in een pad minimaal is, dan is de totale lengte van dat pad (die som dus) minimaal.
Verder definiëren we M_v = \{y \in G | v \rightarrow y\}, de verzameling van punten y die direct verbonden zijn met v (via een tak van v naar y).

[bewerk] Het algoritme

Het algoritme is eigenlijk een veralgemening van de basis van hierboven. Het algoritme verdeelt de punten van G in drie verzamelingen:

A: de verzameling van punten waarvan de kortste afstand tot gb berekend is
X: de verzameling van punten waarnaar er al wel een pad bekend is vanuit gb, maar niet noodzakelijk het kortste
V(G) - A - X: de overige punten van V (deze verzameling wordt niet bijgehouden in het algoritme en heeft dus geen naam)

Hiervoor geldt uiteraard dat A \cap X = \emptyset, A en X hebben geen punten gemeen.

Daarnaast bestaat er een array d(v), geïndiceerd met de punten v van G. Voor elk punt g \in G wordt dit array door het algoritme dusdanig gevuld dat aan het eind geldt d(g) = de lengte van het kortste pad van gb naar g.

Initieel geldt

  • A = {gb}
  • X = M_{g_b}
  • d(gb) = 0
  • \forall {g \in X} : d(g) = gew(g_b,g)
  • \forall {g \in V(G) - X - A} : d(g) = \infty

Het algoritme herhaalt nu de volgende stappen totdat X de lege verzameling wordt (op dat moment zijn er geen bereikbare punten meer over, vanuit gb:

  1. Kies uit X het punt x met de minimale waarde van d(x); dit is de eindwaarde van d(x) voor dat punt. Immers, d(x) heeft de waarde van de lengte van het kortste pad naar x vanuit gb dat we tot nu toe gezien hebben. Ieder ander pad naar x moet over x lopen en is dus langer, omdat alle kanten een positieve lengte hebben.
  2. Omdat d(x) definitief is, verplaatsen we x van X naar A. Voor alle punten z die bereikbaar zijn vanuit x en die nog niet in A zitten, doen we het volgende:
    1. Zit z nog niet in X, dan voegen we het punt aan X toe. Onze eerste schatting voor de afstand tussen gb en z is dan d(x) + gew(x,z) -- deze waarde plaatsen we in d(z)
    2. Zit z al wel in X, dan passen we de schatting in d(z) aan -- de nieuwe waarde is het minimum van de lengte van het nieuw-gevonden pad naar z (d(x) + gew(x,z)) en de lengte van het kortste pad naar z dat we al gevonden hadden.

Zodra dit algoritme afloopt (en dat doet het, want V(G) is eindig en iedere stap verplaatst een element van X naar A), dan is d(v) gevuld met de afstanden van gb naar alle punten die vanuit dit beginpunt bereikbaar zijn. Is d(w) oneindig voor een w \in V(G), dan is dat punt w niet bereikbaar vanuit gb.

[bewerk] Algoritme in pseudocode

In pseudocode ziet het algoritme er als volgt uit:

 forall v IN V(G) do d(v) = infinity llarof
 ;
 A := {g_b}
 ;
 d(a) := 0
 ;
 X := empty_set
 ;
 forall z : z IN M_(g_b) do 
   X := X UNION {z}
   ;
   d(z) := gew(g_b,z)
 llarof
 ; {X en d zijn nu geïnitialiseerd}
 while not(X = empty_set) do
   {X is nog niet leeg}
   y : (y IN X) AND (d(y) = MIN {d(y)'|y' IN X}
   {y is dus het element van x met de laagste waarde van d(v) -- dit is de definitieve 
    waarde van d(y)}
   A := A UNION {y}
   ;
   X := X - {y}
   ; {y is nu verplaatst van X naar A}
   forall z: z IN M_(y) AND not (z IN A) do 
     if not (z IN X) then
        begin
           X := X UNION {z} 
           d(z) := d(y) + gew(y,z)
        end
     else {dus z in X} d(z) := MIN{d(z), d(y) + gew(y,z)}
     fi
   llarof
 elihw
 
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu