Algoritmul Dijkstra (în cazul matricei de ponderare non-negativ)

Algoritmul cel mai eficient pentru rezolvarea problemei cel mai scurt (s-t) -path a dat inițial Dijkstra. Această metodă se bazează pe atribuirea de noduri și nodurile temp ale mărcii dă limita superioară a lungimea căii pentru acest vârf. mărcile Valorile reduse treptat prin unele proceduri iterative, iar la fiecare iterație pas devine constantă reperele temp. Acesta din urmă indică faptul că eticheta nu este o limită superioară, și dă lungimea exactă calea cea mai scurtă de la s la vârful în cauză.

Algoritmul Dijkstra Descriere:

Pasul 1. Setați și ia în considerare acest lucru un semn permanent. Pune toate aceste note și ia în considerare temporară. Pune.

Pasul 2: Pentru toate. tagging care suprapunerile de schimbare de timp, în conformitate cu următoarea expresie:

Pasul 3. Dintre toate vârfurile cu marcaje de timp pentru a găsi unul pentru care.

Pasul 4. Citiți marca sus și a pus constantă.

1. În cazul în care. este lungimea calea cea mai scurtă. În cazul în care. mergeți la pasul 2 (în cazul căii de căutare de la s la t.)

2. În cazul în care toate nodurile sunt marcate ca fiind permanente, aceste note oferă cele mai scurte lungimi de cale. În cazul în care unele mărci sunt omitere temporare la pasul 2 (în cazul căilor de căutare de la s la toate celelalte noduri).

, Căile însele pot fi obținute folosind o procedură recursivă folosind raportul (1.2) imediat ce lungimea celor mai scurte căi de la s a fi găsit. Deoarece nodul imediat precedent din partea de sus, în cel mai scurt drum de la s la. apoi pentru fiecare nod nod corespunzător poate fi găsit ca unul dintre nodurile rămase, pentru care

Dacă cel mai scurt drum de la s la orice nod este singura, arcul cel mai scurt drum pentru a forma un copac direcționat cu rădăcină s. Dacă există mai multe „cel mai scurt“ căi de la s la oricare alt nod, apoi la un anumit raport fix din partea superioară (2) este îndeplinită pentru mai mult de un nod. În acest caz, alegerea poate fi fie aleatoare (dacă aveți nevoie de unul mai scurt drum între s și), sau astfel încât se ocupă cu toate arc. incluse în oricare dintre cele mai scurte cai, și în care mulțimea tuturor arcelor nu formează copac orientate, iar numărul total, numit de bază în raport cu s.

Luați în considerare graficul G, prezentat în Fig. 1.1, în cazul în care fiecare muchie neorientat este privită ca o pereche de arce orientate în sens opus de greutate egale. Ponderarea matricea C este prezentată mai jos.

Vreau să găsesc toate cele mai scurte căi de la vârf la toate celelalte noduri. Marcajul permanent va fi prevăzut cu un semn +, notele rămase sunt considerate a fi temporare.

Pasul 5. Mergeți la pasul 2.

Pasul 2 - Nu toate mărcile de timp, așa rezultă din (1.1) obținem

Pasul 5. Toate vârfurile au semne permanente. Sfârșitul algoritmului. Marks obținute prin algoritmul prezentat în Fig. 1.2 (c).

Ne găsim calea cea mai scurtă dintre vârful și vârful de pornire. secvențial, (1.2). Astfel, presupunând. Ne găsim în partea de sus. imediat înainte de calea cea mai scurtă de la. vârf trebuie să satisfacă relația

Doar un vârf este. În continuare, se aplică al doilea raport de timp (1,2), luând; Obținem de top. imediat înainte de calea cea mai scurtă de la. satisface Vertex

Doar un vârf este, prin urmare, cea mai scurtă cale de a mânca.

- baze de date, oferind toate cele mai scurte căi de la. Este un copac arătat prin linii groase din Fig. 1.2 (c).

Fig. 1.2. (A) Semnele de la sfârșitul prima iterație. (B) marchează sfârșitul pasului 2 pentru a 2-a repetare. (C) finale vârfurilor mărcii și - bază.