6. Bố cục của đề tài
2.4.2. Thuật toán tìm đường đi ngắn nhất liên tiếp (Successive shortest Path)
2.4.2.1. Tư tưởng thuật toán
Thuật toán tìm đường đi ngắn nhất liên tiếp xuất phát từ một giả thiết tối ưu và duy trì điều kiện tối ưu của giả thiết đó.
2.4.2.2. Mô tả thuật toán
Để mô tả thuật toán này, trước hết chúng ta tìm hiểu khái niệm luồng giả. Một
luồng giả là một hàm x: A R+ chỉ thỏa mãn các ràng buộc không âm và khả năng
thông qua, nó không cần thỏa mãn các ràng buộc cân bằng khối lượng. Với mọi luồng giả f, ta định nghĩa độ mất cân bằng của đỉnh i như sau:
( , ) ( , ) i i ji ij i j E j i E e b f f Với i V
Nếu ei > 0 với đỉnh i nào đó, ta nói ei là mức vượt quá của đỉnh i. Nếu ei <0, ta
gọi –ei là mức thiếu hụt của đỉnh. Chúng ta gọi một đỉnh i có ei = 0 là cân bằng. Gọi E
và D là các tập hợp các đỉnh vượt quá và thiếu hụt trong đồ thị. Chú ý rằng: 0 i i i V i V e b Vì vậy: i i i V i D e e
Do đó, nếu đồ thị chứa một đỉnh vượt quá thì nó cũng phải chứa một đỉnh thiếu hụt. Đồ thị thặng dư tương ứng với một luồng giả được định nghĩa giống như chúng ta
định nghĩa đồ thị thặng dư cho một luồng.
Bổ đề 2.2: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối
ưu về chi phí rút gọn đối với các khả năng (của đỉnh) nào đó. Gọi vector d là
khoảng cách đường đi ngắn nhất từ đỉnh s đến tất cả các đỉnh khác trong đồ thị thặng
dư G(f) với pij là độ dài của cung (i, j), ta có các tính chất sau:
(1) Luồng giả f cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn đối với
các khả năng của đỉnh rút gọn ' = - d.
(2) Các chi phí rút gọn pij với tất cả các cung (i, j) trên đường đi ngắn nhất từ
đỉnh s đến mọi đỉnh khác.
Bổ đề 2.3: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối ưu về chi phí rút gọn và ta đạt được f’ từ f bằng cách gửi luồng theo một đường đi ngắn nhất từ đỉnh s đến một số đỉnh k khác thì f’ cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn.
Trong thuật toán tìm đường đi ngắn nhất liên tiếp, khả năng của các đỉnh đóng vai trò rất quan trọng, chúng ta dùng chúng để giữ cho độ dài các cung không âm giúp giải quyết bài toán đường đi ngắn nhất một cách hiệu quả.
Thuật toán tìm đường đi ngắn nhất liên tiếp được mô tả như sau:
Xuất phát từ một luồng tối ưu giả f = 0 trên đồ thị, khi đó ta phải vi phạm ràng buộc cân bằng khối lượng tại các đỉnh, ở mỗi một bước lặp ta tìm một chu trình ngắn nhất từ nguồn đến đích và tăng đơn vị vận chuyển trên chu trình này, khi các điều kiện về cân bằng khối lượng thỏa mãn bài toán kết thúc với một luồng tối ưu tìm được.
2.4.2.3. Các bước thực hiện thuật toán
Giả code:
begin
f: = 0 và : = 0;
ei:= bi với i V ;
Khởi tạo tập hợp E:= {i: ei>0} và D:= {i: ei<0);
while E NULL do
Chọn một đỉnh k E, l D;
Xác định khoảng cách đường đi ngắn nhất dj từ đỉnh s đến tất cả
P biểu thị đường đi ngắn nhất từ đỉnh k đến đỉnh l;
Cập nhật : = - d; := min[ek, -el, min{rij:(i, j) P}];
Tăng đơn vị luồng theo đường đi P;
Cập nhật f, G(f), E, D và các chi phí rút gọn;
end; end;
Chứng minh tính đúng đắn của thuật toán: Để khởi tạo chúng ta đặt x = 0 là một
luồng khả thi. Với luồng giả f = 0, G(f) = G. Chú ý rằng lời giải này cùng với = 0
thỏa mãn các điều kiện tối ưu về chi phí rút gọn vì pij = pij > 0 với mọi cung (i, j)
trong đồ thị G(f). thì chi phí của tất cả các cung là không âm.Ta quan sát thấy khi vẫn còn đỉnh có độ mất cân bằng khác 0 thì cả E và D phải khác NULL vì tổng các độ vượt quá bằng tổng các mức thiếu hụt. Vì vậy cho đến khi tất cả các đỉnh đều cân bằng thì thuật toán luồng có thể xác định một đỉnh vượt quá k và một đỉnh thiếu l. Giả thiết 4 chỉ ra rằng đồ thị thặng dư chứa một đường đi có hướng từ đỉnh k đến mọi đỉnh khác bao gồm cả đỉnh l. Do đó khoảng cách đường đi ngắn nhất d được định nghĩa tốt.
Ví dụ minh họa
pịj,cij
Hình 2.3. Minh họa thuật toán đường đi ngắn nhất liên tiếp 2.4.2.4. Độ phức tạp thuật toán
Mỗi vòng lặp của thuật toán giải một bài toán đường đi ngắn nhất với chiều dài cung không âm và giảm độ vượt quá của một số đỉnh (đồng thời cũng giảm mức thiếu hụt của một số đỉnh). Do đó, nếu C là cận trên của khả năng cung lớn nhất của các đỉnh, thuật toán sẽ kết thúc sau nhiều nhất nC vòng lặp. Nếu S(n, m, P) là thời gian cần thiết để giải bài toán đường đi ngắn nhất với độ dài cung không âm thì độ phức tạp tổng cộng của thuật toán này là O(nCS(n, m, nP)). Chú ý rằng chúng ta dùng nP thay vì P trong biểu thức này vì chi phí trong đồ thị thặng dư bị chặn bởi nP.