Cho do thi co huong co trong so G=(V,E) voi n dinh va m canh, moi canh (u,v) co trong so w(u,v)≥0.
Cho dinh nguon s, tim duong di ngan nhat tu s toi tat ca cac dinh con lai. Goi d[v] la do dai duong di ngan nhat tu s toi v.
Cong thuc relax (noi long) la co so cua thuat toan:
\[
d[v] = \min\bigl(d[v],\; d[u] + w(u, v)\bigr)
\]
Neu duong di qua u roi toi v ngan hon duong di hien tai toi v, ta cap nhat d[v].
Input Graph
Algorithm
Thuat toan Dijkstra hoat dong theo nguyen tac tham lam (greedy): tai moi buoc, chon dinh u chua xu ly co d[u] nho nhat,
danh dau u la da xu ly (settled), roi relax tat ca canh ke (u,v). Dung priority queue (hang doi uu tien) de chon u
hieu qua trong O(logV). Dieu kien: trong so canh phai khong am (w≥0).
Step 1 / 13
Step 1 / 13
Khoi tao: dat d[A]=0 (dinh nguon), cac dinh con lai d=∞. Dua A vao priority queue.
Step 2 / 13
Settle A. Relax canh A→B (trong so 4): d[B]=min(∞,0+4)=4.
Step 3 / 13
Relax canh A→C (trong so 2): d[C]=min(∞,0+2)=2. Hoan tat xu ly A. Dinh co d nho nhat trong queue la C voi d[C]=2.
Step 4 / 13
Pop C (key =2) tu priority queue. Settle C – day la khoang cach ngan nhat chinh xac vi moi trong so deu khong am.
Step 5 / 13
Relax canh C→B (trong so 1): d[B]=min(4,2+1)=3. Duong vong A→C→B ngan hon canh truc tiep A→B.
Step 6 / 13
Relax canh C→D (trong so 3): d[D]=min(∞,2+3)=5. Tam thoi – co the tim duong ngan hon qua B.
Step 7 / 13
Relax canh C→E (trong so 5): d[E]=min(∞,2+5)=7. Tam thoi. Hoan tat xu ly C.
Step 8 / 13
Pop B (key =3). Settle B. Queue con lai: D=5, E=7.
Step 9 / 13
Relax canh B→D (trong so 7): d[D]=min(5,3+7)=5. Khong cap nhat – duong qua C van ngan hon. Hoan tat xu ly B.
Step 10 / 13
Pop D (key =5). Settle D. Queue con lai: E=7.
Step 11 / 13
Relax canh D→E (trong so 1): d[E]=min(7,5+1)=6. Cap nhat! Duong A→C→D→E ngan hon A→C→E.
Step 12 / 13
Pop E (key =6). Settle E. Priority queue rong – tat ca dinh da duoc xu ly.
Step 13 / 13
Hoan tat! Khoang cach ngan nhat: d=[0,3,2,5,6]. Cay duong di ngan nhat: A→C, C→B, C→D, D→E. Cac canh dim khong thuoc cay SPT.
Complexity
Voi priority queue (binary heap), do phuc tap cua Dijkstra la O((V+E)logV):
moi dinh duoc push/pop dung mot lan (O(VlogV)), moi canh duoc relax dung mot lan voi thao tac decrease-key (O(ElogV)).
Neu dung Fibonacci heap, do phuc tap giam xuong O(VlogV+E).
Luu y: Dijkstra chi dung khi trong so canh khong am. Neu co canh am, dung Bellman-Ford (O(VE)) hoac SPFA.