1.4. Một số giải thuật định tuyến điển hình 1. Giói thiệu
1.4.2. Thuật toán tìm đường ngắn nhất
Bài toán tìm đường đi ngắn nhất trong số các con đường tồn tại giữa hai điểm đã được giải quyết từ lâu và thuần tuý là toán học. Các giải thuật đó có thể áp dụng vào kỹ thuật chọn đường trong mạng với một ít thay đổi với bối cảnh ứng dụng. Sau đây sẽ trình bày hai giải thuật điển hình.
Thuật toán Dijkstra
Bài toán đặt ra là: tìm con đường có giá (độ dài) cực tiểu từ một node nào đó (node nguồn) tới một node khác trong mạng (node đích). Giá ở đây là giá trị của các đại lượng như trễ trung bình, khoảng cách vật lý, số node phải đi qua.v.v...Ta dùng giá ở đây là để xét bài toán tổng quát. Giải thuật Dykstra sẽ từng bước kiến thiết một cây đường
“ngắn nhất”, có gốc tại node nguồn, cho tới khi node xa nhất trong mạng đã được đưa vào. Ở bước thứ k, các con đường “ngắn” nhất của k node gần nguồn nhất sẽ được tính.
Các node đó được định nghĩa thuộc một tập ẩ .
Gọi: d(i j) là “độ dài” của đường nối hai node i và j, d(i j) =00 nếu đường nối đó không tồn tại.
ẩ k là tập họp tạo thành bởi k+1 phần tử: nguồn và k node gần nguồn nhất sau k bước thực hiện thuật giải.
Dk(n) là “độ dài” từ nguồn tới node n theo con đường ngắn nhất bao hàm trong ẩ k.
Xét tổng quát, giả sử node 1 là node nguồn. Đe tính các con đường ngắn nhất từ node 1 tới các node còn lại của mạng, ta có các bước sau:
Bước 0 (khởi động) ẩO= {1}
DO(v)= d(l,v), V không thuộc ẩ 0 Bước k (tính và cập nhật) ẩk=ẩk-iu {w}
trong đó w thoã mãn biểu thức Dk-l(w)=minDk-l(v), với mọi V không thuộc ẩ k-1 Dk(v)=min[Dk-l(v), Dk-l(w) +d(w,v)], V không thuộc ẩ k.
Thuật toán sẽ dừng lại khi tất cả các node đã nằm trong ẩ .
Dưới đây ta sẽ xét một ví dụ với mạng có 6 node và yêu cầu là phải thiết lập một cây đường đi ngắn nhất từ node 1 tới các node còn lại.
Hình 1.4. Mô hình mạng 6 node
Mạng trong ví dụ như hình 1.4, trong đó những con số ghi cạnh các đường nối các node biểu thị giá của từng cặp node kề nhau và nối với nhau
ẩ ode 2 ẩ ode 3
Hình 1.5. Cây đường đi ngắn nhất sau khi chọn đường Áp dụng thuật toán trên ta được cây đường đi ngắn nhất được biểu diễn trong hình 1.4.
Ta thấy rằng, giải thuật ở trên sử dụng thông tin tổng thể của mạng tại mỗi node, vì thể nó thích hợp cho kỹ thuật chọn đường tập trung.
Bảng mô tả thuật toán tìm đường ngắn nhất cho node 1 như sau:
Sau khi đã thực hiện chọn đường ngắn nhất xong, tại node 1 bảng chọn đường sẽ có dạng như dưới đây:
Bảng 1.2: Bảng chọn đường tại node 1
Dưới đây sẽ tiếp tục giới thiệu một thuật toán tìm đường ngắn nhất. Thuật toán này phù hợp với dạng chọn đường kiểu phân tán.
Thuât toán Bellman-Ford
Thuật toán này cũng gồm hai phần: bước khởi đầu và bước lặp cho tới khi tính xong các tuyến đường dẫn. Sự khác biệt với thuật toán đã trình bày là ở chỗ thay vì coi nút 1 là nút nguồn thì lại coi nó là nút đích, đồng thời từ tất cả các nút khác ta tìm đường dẫn ngắn nhất tới đích 1 này. Trong bảng chọn tuyến ta sẽ chỉ ra khoảng cách (đây cũng
Bảng 1.1: Các bước thực hiện thuật toánDỊỊkstra
Bước Tập N D(2) D(3) D(4) D(5) D(6)
0 {1} 2 5 1 00 00
1 {1,4} 2 4 1 2 00
2 {1,4,5} 2 3 1 2 4
3 {1,2,4,5} 2 3 1 2 4
4 {1,2,3,4,5} 2 3 1 2 4
5 {1,2,3,4,5,6} 2 3 1 2 4
Đích Nút tiếp theo
2 2
3 4
4 4
5 4
6 4
chỉ là giá trị trọng số trừu tượng để mô tả giá của tuyến truyền) từ nút bất kỳ tới nút 1 và nút lân cận để truyền tới đích 1 theo tuyến ngắn nhất. Việc tạo bảng chọn tuyến sử dụng thuật toán này đòi hỏi phải lặp đi lặp lại cho từng nút một, và cuối cùng thì ghi tất cả vào trong một tập các nhãn cho từng nút, mỗi nhãn có thông tin chọn tuyến (nút tiếp theo) và khoảng cách tới đích cuối cùng.
Mỗi nút V có nhãn (n, D(v)), với D(v) là giá trị hiện thời của khoảng cách ngắn nhất từ nút đó tới đích, còn n là số hiệu của nút tiếp theo trên đường dẫn ngắn nhất tạm thời.
1. Bước thứ nhất
Coi nút 1 là nút đích, đặt D(v) = 0 và gán (., oo) cho tất cả các nút khác.
2. Bước lặp: dán nhãn khoảng cách cho các nút còn lại Với từng nút khác 1 ta thực hiện như sau:
Thay D(v) bởi giá trị hiện thời D(w) với từng nút lân cận w để tính giá trị D(w) + l(w, v) và thực hiện phép toán
D(v) = min [D(w] + l(w, v)] (1.1)
Sau đó, gán nhãn mới của V bằng cách thay n bởi nút lân cận tưomg ứng với biểu thức (1.1) tính được và thay giá trị mới tìm được vào D(v).
Với mạng ví dụ như hình 1.2, ta thiết lập bảng các vòng thực hiện sau:
Sau hai vòng lặp, các giá trị nhãn trở nên bất biến, có nghĩa rằng thuật toán đã được thực hiện xong. Như vậy, trong vòng 1 nhận thấy nút 2 là “gần nhất” đối với nút 1, giá thành mới của nó là D(v) = D(l) + 1(1,2) = 2, và nhãn của nó chuyển thành
(1.2) . Chuyển tới nút 3, ta có thể chọn hoặc D(2) + 1(2,3) =5 hoặc D(l) + 1(1,3) = 5;
giả sử ta chọn D(l) + 1(1,3) thì nhãn mới của nó là (1,5) (ta cũng có thể chọn D(2) + Bảng 1.3: Các bước thực hiện thuật toán Bellman-Ford
Vòng Nút đích /Nhãn 2 3 4 5 6
0 1 c,00) (•, °0) (•, °0) (•,°°) (•, °0)
1 1 (1,2) (1,5) (1,1) (4,2) (5,4)
2 1 (1,2) (5, 3) (1,1) (4,2) (5,4)
1(2,3) vì kết quả cuối cùng như nhau). Ở vòng lặp thứ hai,ta có thể thay tại nút 3 nhãn mới vì giá trị tối thiểu mới là D(w) + l(w, 3) = D(5) +1(5,3) = 3, do vậy nhãn của nó là (5.3) . Từ đó trở đi, các giá trị không thay đổi nên quá trình có thể coi là hoàn thành.
Nếu ta xây dựng sơ dồ cây trên cơ sở các kết quả nhận được thì ta có mô hình của hình 2.4b, với nút 1 là gốc.