You are on page 1of 3

1 skyrius

Dijkstra algoritmas
1.1

Dijkstra algoritmo principai

Dabar pateiksime Dijkstra algoritm, pasilyt 1959 metais. Jo vykdymo eigoje yra
formuojama virni aibs poaibis S ir i likusi virni sudarinjama prioritetin
eil Q pagal d[u] didjimo tvark.
1.1.1 teorema. Tegu G = (V, E) su w : E R+ ir altiniu s. Realizavus Dijkstra
algoritm , kiekvienai u V gauname d[u] = (s, u). Sudarytas proseneli grafas
yra trumpiausi tak medis.
rodymas. I 4.1.5. lemos inome, kad d[v] > (s, v), v V . sitikinsime, kad
tuo metu, kai u imetama i Q ir raoma S, ji pasiekia (s, u). Tegu u yra pirmoji
virn, kuriai taip nra. Tuo metu, kai ji raoma S, (s, u) < d[u]. Vadinasi, u
yra pasiekiama i s. Aiku, s 6= u, todl net prie statant u, aib S nebuvo tuia.
Tuo momentu egzistuojantis trumpiausias takas s u eina i aibs S ir patenka
V S. Galime sivaizduoti situacij brinyje:

1.1 pav.: Dijkstra algoritmo veikimo iliustracija

Tas takas yra toks: s

xy

u su x S, y V S bei xy E. Gal bt,


1

eidami i y vl buvome gr S ar pasitaik, kad y = u arba s = x. Takas s

trumpiausias, kadangi x yra jau aibje S, tai d[x] = (s, x). Briaunos xy relaksacija
buvo atlikta, tad jei y = u, i 4.1.7 lemos gautume d[u] = (s, u). Prietaravimai
rodo, kad y 6= u. Pritaikome 4.1.8 lem takui s

y, einaniam per briaun xy.

Gauname d[y] = (s, y) < (s, u) < d[u].


Vadinasi, renkant minimum 4.1.7 eilutje i Q pirmiau turjo bti y, o ne u.
Prietarai rodo pirm teoremos tvirtinim. Antrasis teiginys iplaukia i 4.1.8 lemos.
Dijkstra algoritmas, kaip ir paieka platyn, i duotosios virns p randa trumpiausius kelius iki viso svorinio grafo virni. Algoritmas skirsto virnes dvi
aibes: t, iki kuri trumpiausi keliai (ir atstumai) jau inomi (jas vadinsime prijungtomis), ir vis kit.Pradioje neinomas trumpiausias kelias n iki vienos virns, iskyrus pradin p, tad paymima, kad atstumai iki i virni yra begaliniai.
Atstumas (nuo pradins) iki pradins virns jau inomas jis lygus nuliui.
Kiekvienu ingsniu algoritmas suranda dar neprijungt virn, iki kurios atstumas yra maiausias (pirmu algoritmo ingsniu tai pradin virn p, kadangi iki vis
kit virni atstumai yra begaliniai). Pasirinktoji virn prijungiama, o tuomet
atnaujinama informacija apie visas neprijungtas jos kaimynes: galbt kelias iki ios
virns dar nebuvo rastas, o jei buvo tai galbt kelias, einantis per k tik prijungtj virn iki ios kaimyns, yra trumpesnis u iki iol rastj.Taigi pirmuoju
algoritmo ingsniu prijungiama pradin virn p. Antruoju artimiausia p kaimyn. Kiekvienu ingsniu prijungiam virni atstumai sudaro nemajani sek,
kadangi vislaik bandoma prijungti kuo artimesnes virnes. ie samprotavimai intuityviai pagrindia algoritmo teisingum. Prijungdami virn, galime bti tikri,
jog rastasis atstumas yra trumpiausias, kadangi visi kiti, vliau atrasti, trumpiausi
atstumai bus tik ilgesni u .Kadangi iekoma trumpiausi keli, o ne tik j ilgi,
kiekvienai virnei isaugoma jos pirmin virn (tai virn, i kurios j ateinama
einant trumpiausiu keliu). Kol kelias iki virn nerastas, jos pirmin virn yra
neapibrta. Atnaujinant atstum iki virns, kartu paymima, i kurios virns
ja ateinama. Algoritmo vykdymo metu kiekvienos virns pirmin virn (kaip
ir trumpiausias rastas atstumas) gali ne kart pasikeisti.
emiau esaniame 1.2 pavyzdyje pateikiama Dijkstra algoritmo veikimo schema.
Graf sudaro penkios virns ir briaunos su j svoriais, pradinis virni ilgi
svoriai 0.
2

(a) Pradin situacija: trumpiausio


kelio iki virns a (pasirinktosios (b) Virn a turi dvi kaimynes b
pradins virns) ilgis lygus 0, o iki ir c; iki i virni rasti trumpesni
kit virni neinomas;

keliai

(c) I neprijungt virni irenkama ta, iki kurios atstumas trumpiausias (virn b); trumpesnio kelio iki b rasti negalima, ji prijungiama; peririmos neprijungtos b kaimyns c ir d ir pastebima, kad iki i abiej virni rasti trumpesni
keliai per virn b: iki virns d kelias anksiau nebuvo rastas, o iki virns c
buvo rastas tiesioginis kelias i a; taiau naujasis kelias per virn b yra trumpesnis

(d)

(e)

(f) Baigus vykdyti Dijkstros algoritm visos virns yra prijungtos (t. y. visos yra pasiekiamos i pradins virns) ir inomi trumpiausi atstumai iki j:
trumpiausio kelio iki virns b ilgis lygus 3, iki c 4, iki d 6, iki e 8.

1.2 pav.: Dijksta algoritmo veikimo iliustracija


3