Trường hợp ma trận trọng số không âm Thuật toán Dijkstra

Một phần của tài liệu Giáo trình toán rời rạc 2 (Trang 68 - 70)

Thuật toán Dijkstra có thể mô tả như sau:

Bước 1: Khởi tạo

Với ựỉnh v ∈ V, gọi nhãn d[v] là ựường ựi ngắn nhất từ s tới v. Ta sẽ tắnh các d[v]. Ban ựầu d[v] ựược khởi gán bằng c[s, v]. Nhãn của mỗi ựỉnh có hai trạng thái tự do hay cố ựịnh, nhãn tự do có nghĩa là có thể còn tối ưu thêm ựược nữa và nhãn cố ựịnh tức là d[v] ựã bằng ựộ dài ựường ựi ngắn nhất từ s tới v nên không thể tối ưu thêm. để làm ựiều này ta có thể dùng kỹ thuật ựánh dấu: Free[v]= 1 hay 0 tuỳ theo d[v] tự do hay cố ựịnh. Ban ựầu các nhãn ựều tự do.

Bước 2: Lặp

Bước lặp bao gồm các thao tác:

1. Cố ựịnh nhãn: Chọn trong các nhã tự do, lấy ra ựỉnh u là ựỉnh có d[u] nhỏ nhất, và cố ựịnh nhãn u.

2. Sửa nhãn: Dùng ựỉnh u, xét tất cả những ựỉnh v và sửa lại các d[v] theo công thức:

d[v]:= min(d[v], d[u]+ c[u, v])

Bước lặp sẽ kết thúc khi mà ựỉnh ựắch v ựược cố ựịnh nhãn (tìm ựược ựường ựi ngắn nhất từ s tới v); hoặc lặp lại thao tác cố ựịnh nhãn, tất cả các ựỉnh tự do ựều có nhãn là + (không tồn tại ựường ựi).

Bước 3: Kết hợp việc lưu vết ựường ựi trên từng bước sửa nhãn, thông báo ựườn ựi ngắn nhất tìm ựược hoặc cho biết không tồn tại ựường ựi (d[v]=+ ).

Vắ dụ 10.1 : Tìm ựường ựi ngắn nhất từ dỉnh 1 tới các ựỉnh còn lại cho bởi ma trận:

0 3 5 15 4 6

9 0 7 11 9 8

7 10 11 0 8 6 6 7 5 4 0 12 9 8 3 5 15 0 Giải: bước lặp ựỉnh 1 ựỉnh 2 ựỉnh 3 ựỉnh 4 ựỉnh 5 ựỉnh 6 0 0 , 1 3 ,1* 5 , 1 15 , 1 4 , 1 6 , 1 1 - - 5 , 1 14 ,1 4 , 1* 6 , 1 2 - - 5 , 1* 8 , 5 - 6 , 1 3 - - - 8 , 5 - 6 , 1* 4 - - - 8 , 5* - - 5 - - - - - -

Từ bảng trên là dò ựường ựược ựường ựi ngắn nhất như sau: + 1 ựến 3: 1→ 2 Với ựộ dài 3

+ 1 ựến 3: 1→ 3 Với ựộ dài 5 + 1 ựến 4: 1→ 5 → 4 Với ựộ dài 8 + 1 ựến 5: 1 → 5 Với ựộ dài 4 + 1 ựến 6: 1 → 6 Với ựộ dài 6.

Bài 11 Bài toán tìm ựường ựi ngắn nhất (tiếp)

Trong ựời sống, chúng ta thường gặp những tình huống như sau: ựể ựi từ ựịa ựiểm A ựến ựịa ựiểm B trong thành phố, có nhiều ựường ựi, nhiều cách ựi; có lúc ta chọn ựường ựi ngắn nhất (theo nghĩa cự ly), có lúc lại cần chọn ựường ựi nhanh nhất (theo nghĩa thời gian) và có lúc phải cân nhắc ựể chọn ựường ựi rẻ tiền nhất (theo nghĩa chi phắ), v.v...

Một phần của tài liệu Giáo trình toán rời rạc 2 (Trang 68 - 70)