1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng lý thuyết đồ thị chương 7 ts lê nhật duy

19 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 364,01 KB

Nội dung

Chương 7: Bài tốn tìm đường ngắn Nội dung I Giới thiệu II Thuật toán Ford-Bellman III Thuật toán Dijkstra IV Thuật toán Floyd Chương – Bài tốn tìm đường ngắn Lý thuyết đồ thị I Giới thiệu ™Xét đồ thị có hướng, có trọng số G=(V, E) , if (u , v) ∉ E ⎧∞ TrongSo(u , v) = ⎨ ⎩a (u , v), if (u , v) ∈ E Với a(u, v) ∈ R ™Nếu dãy v0,v1,…,vp đường G độ dài định nghĩa: p DoDai ( v0 , v1 , , v p ) = ∑ a ( vi −1 , vi ) i =1 Chương – Bài tốn tìm đường ngắn I Giới thiệu ™Bài toán đường ngắn ƒ Giả sử có nhiều đường từ v0 đến vp: Đường ngắn đường có tổng trọng số cung nhỏ ƒ Đường từ đỉnh • Ford-Bellman • Dijkstra ƒ Đường từ đỉnh • Floyd Chương – Bài tốn tìm đường ngắn Nội dung I Giới thiệu II Thuật toán Ford-Bellman III Thuật toán Dijkstra IV Thuật tốn Floyd Chương – Bài tốn tìm đường ngắn Lý thuyết đồ thị II Thuật tốn Ford-Bellman ™ Thuật tốn Ford-Bellman dùng để tìm đường ngắn từ đỉnh s đến tất đỉnh lại đồ thị ™ Được sử dụng cho đồ thị khơng có chu trình âm Cho đồ thị có hướng, có trọng số G=(V, E) Trọng số cạnh G tính sau: TrongSo(u, v) = ∞ cung (u, v) ∉ E TrongSo(u, v) = a(u, v) cung (u, v) ∈ E Thuật tốn tìm đường ngắn d(v) từ đỉnh s đỉnh v, v ∈ V: + Xét u V Nếu d(u) + TrongSo(u, v) < d(v) ta thay d(v) = d(u) + TrongSo(u, v) + Quá trình lặp lại khơng thể có giá trị d(v) tốt Chương – Bài tốn tìm đường ngắn II Thuật tốn Ford-Bellman ™Cài đặt thuật tốn ƒ Đầu vào: • Đồ thị có hướng G=(V,E) với n đỉnh • s ∈ V đỉnh xuất phát • a[u,v], u,v ∈ V ma trận trọng số ƒ Đầu : • Khoảng cách từ s đến tất đỉnh cịn lại d[v], v∈V • Truoc[v], v ∈ V đỉnh trước v đường ngắn từ s đến v Chương – Bài tốn tìm đường ngắn II Thuật toán Ford-Bellman void Ford_Bellman() { for (v ∈ V) /* Khởi tạo d Truoc */ { d[v] = a[s,v]; Truoc[v] = s; } d[s] = 0; for (k = 1; k < n-1; k++) for (v ∈ V \ {s}) for ( u ∈ V) if (d[v] > d[u] + a[u,v] ) { d[v] = d[u] + a[u,v] ; Truoc[v] = u; } } /* Độ phức tạp thuật toán O(n3) */ Chương – Bài tốn tìm đường ngắn II Thuật tốn Ford-Bellman ™ Ví dụ k d[5], Truoc[5] d[4], Truoc[4] d[3], Truoc[3] ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ d[2], Truoc[2] 3, ∞, ∞, 1, 3, 4, 4, 1, -1, 4, 4, 1, -1, 3, 4, 1, -1, 3, 4, 1, Chương – Bài tốn tìm đường ngắn ∞ ∞ -5 ∞ ∞ Nội dung I Giới thiệu II Thuật toán Ford-Bellman III Thuật toán Dijkstra IV Thuật toán Floyd Chương – Bài tốn tìm đường ngắn 10 Lý thuyết đồ thị III Thuật toán Dijkstra ™ Thuật toán Dijkstra dùng để tìm đường ngắn từ đỉnh s đến đỉnh lại đồ thị ™ Được sử dụng cho đồ thị khơng có cung trọng số âm ™ Thuật tốn ƒ Đầu vào • Đồ thị có hướng G=(V,E) với n đỉnh • s ∈ V đỉnh xuất phát • a[u,v], u,v ∈ V ma trận trọng số ƒ Đầu • Khoảng cách từ s đến tất đỉnh lại d[v], v ∈ V • Truoc[v], v ∈ V đỉnh trước v đường ngắn từ s đến v Chương – Bài tốn tìm đường ngắn 11 III Thuật toán Dijkstra void Dijkstra;{ for (v ∈ V) /* Khởi tạo d Truoc */ { d[v] = a[s,v]; Truoc[v] = s; } d[s] = 0; T = V \ {s}; while (T != ∅ ) { Tìm u ∈ T cho d(u) = { d(z): z ∈ T } T = T \ {u}; /* Cố định nhãn u */ for (v ∈ T) if (d[v] > d[u] + a[u,v] ) then { d[v] = d[u] + a[u,v] ; Truoc[v] = u; } } } /* Độ phức tạp thuật toán O(n2) */ Chương – Bài toán tìm đường ngắn 12 III Thuật tốn Dijkstra ™ Ví dụ T 2, 3, 4, ∞ ∞ ∞ Đỉnh 1, ∞,1 ∞, 7, 2, 5, 7, 4, 6, 4, E ∅ ∞ ∞ ∞ ∞ Đỉnh 3, 4, Đỉnh ∞ ∞ ∞ ∞ ∞ Đỉnh 6, 1, Chương – Bài tốn tìm đường ngắn 2, 13 4, 6, ∞ ∞ ∞ ∞ Nội dung I Giới thiệu II Thuật toán Ford-Bellman III Thuật toán Dijkstra IV Thuật tốn Floyd Chương – Bài tốn tìm đường ngắn 14 Lý thuyết đồ thị IV Thuật tốn Floyd ™Tìm đường ngắn tất cặp đỉnh đồ thị ™Thuật toán ƒ Với đỉnh k đồ thị xét theo thứ tự từ đến n, xét cặp đỉnh u, v Ta tìm đường ngắn từ u đến v theo công thức: a(u, v) = (a(u, v), a(u, k) + a(k, v)) Chương – Bài tốn tìm đường ngắn 15 IV Thuật toán Floyd ™Cài đặt ƒ Đầu vào • Đồ thị cho ma trận trọng số: a[i, j], i, j = 1, 2, …, n ƒ Đầu ra: Hai ma trận • Ma trận đường ngắn cặp đỉnh: d[i, j], i, j = n d[i, j] độ dài đường ngắn từ i đến j • Ma trận ghi nhận đường p[i, j], i, j = n p[i, j] ghi nhận đỉnh trước đỉnh j đường ngắn từ i đến j Chương – Bài tốn tìm đường ngắn 16 IV Thuật toán Floyd void Floyd;{ for (i = 1; i

Ngày đăng: 25/07/2023, 16:10