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

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

Đ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

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan