Thuật toán đƣợc xây dựng trên cơ sở gán cho mỗi điểm các nhãn tạm thời. Nhãn tạm thời của các điểm cho biết cận trên của chiều dài đƣờng đi ngắn nhất từ nguồn s đến điểm đó. Nhãn của các điểm sẽ biến đổi trong các bƣớc lặp, mà ở mỗi bƣớc lặp sẽ có một nhãn tạm thời trở thành chính thức. Nếu nhãn của một điểm nào đó trở thành chính thức thì đó cũng chính là chiều dài ngắn nhất của đƣờng đi từ s đến đỉnh đó. Giải thuật của Dijkstra duy trì tập hợp các đỉnh S đã đƣợc thăm mà từ quan điểm mô hình hóa, nó tƣơng ứng chính xác với vị trí trong mạng.
Vì vậy, tại bất kỳ đỉnh nào trong giải thuật Dijkstra, tại thời điểm max v ∈
S - d(s,v). Giải thuật của Dijkstra duy trì khoảng cách tạm thời D(v) với mỗi v ∈
V, thỏa mãn bất biến sau đây. Bất biến 1 (Bất biến của Dijkstra): Với v ∈ S, D(v) = d(s,v) là khoảng cách từ s tới v trong tiểu đồ thị suy ra bởi S⋃{v}.
Giải thuật của Dijkstra Function Dijkstra(Graph, source):
D[s] = 0 prev[s] =undefined
for every vertex v ∈ V do
if v ≠ s
D(v) = ∞
prev[v] = undefined
end if
add v to Q// Tất cả các đỉnh v đều được đánh dấu là chưa thăm
end for
while Q is not empty:
u ← vertex in Q with min D[u] // Đỉnh s sẽ nằm đầu tiên trong tập Q
remove u from Q // u trở thành có nhãn cố định
for each neighbor v of u:
44
if alt<D[v]: // Đường đi ngắn hơn tới v được tìm thấy
D[v] =alt prev[v] =u end if end for end while returnD[], prev[] end function
Thời gian chạy thuật toán Dijkstra trên đồ thị có m cạnh và m đỉnh là O(n2). Do để tìm đƣờng đi nhỏ nhất tất cả các đỉnh v ∈ V phải đƣợc kiểm tra và dẫn đến thời gian chạy là O(n). Hoạt động này lặp đi lặp lại tại mỗi bƣớc của thuật toán, cho đến khi tất cả các đỉnh có nhãn cố định.
Tuy nhiên, sau mỗi bƣớc các cạnh đƣợc nới lỏng một lần, bƣớc này sẽ có thêm O(m) độ phức tạp và dẫn đến độ phức tạp cho đến khi kết thúc là O(n2 + m). Dù vậy, trong trƣờng hợp tồi nhất O(m) = O(n2), thời gian chạy vẫn là O(n2).