Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
418 KB
Nội dung
Single-Source Shortest Paths Các đường ngắn từ đỉnh nguồn ª Bài toán đường ngắn nhất: số thuật ngữ Cho đồ thị có trọng số, có hướng G = (V, E), với hàm trọng số w : E – Trọng số đường p = v0 , v1,…, vk • w(p) = i = 1…k w(vi , vi ) p – Trọng số đường ngắn (shortest path (u, v) =từ u đến v weight) min{w(p) : u v } có đường từ u đến v t v trường hợp khác u – Đường ngắn từ u đến v đường p từ u đến v cho w(p) = (u, v) x y Các đường ngắn từ đỉnh nguồn (tiếp) ª Bài toán đường ngắn từ nguồn (Single-source shortest-paths problem): – Cho đồ thị G = (V, E) đỉnh nguồn s V – Tìm đường ngắn từ s đến đỉnh v V s Cạnh có trọng số âm ª Giả thiết: Trọng số cạnh âm – Chu trình có trọng số âm – Nếu tồn chu trình có trọng số âm đến (reachable) từ s trọng số đường ngắn không định nghóa: không đường từ s đến đỉnh nằm 4 chu trình 1là đường ngắn nhaát a s c b 3 e d 11 g h i 8 j f 6 đỉnh trọng số đường ngắn nha số từ đỉnh nguồn s Cạnh có trọng số âm (tiếp) – Nếu tồn chu trình có trọng số âm đường từ s đến v, ta định nghóa (s, v) = – Trong ví dụ sau, đỉnh h, i, j không đến từ s nên có trọng số đường ngắn (chứ không chúng nằm chu atrình có b trọng số âm) 4 1 s c d 11 3 e f g h i 8 j 6 Biểu diễn đường ngắn ª Đồ thị G = (V, E ) – Với đỉnh v, đỉnh cha (predecessor) v đỉnh khác NIL Duy trì [v], trỏ đến đỉnh cha Dùng để suy đường ngắn từ s đến v – Đồ thị G VE(predecessor subgraph) • V = {v V : [v] NIL} {s} • E= {([v], v) E : v V{s}} [v] v Biểu diễn đường ngắn (tiếp) ª Cho G = (V, E) đồ thị có hướng, có trọng số; G không chứa chu trình trọng số âm đến từ đỉnh nguồn s V Cây đường ngắn với gốc s đồ thị có hướng G’ = (V’, E’), với V’ V E’ E cho V’ tập đỉnh đến (reachable) từ s G G’ có gốc với gốc s Với v V’, đường đơn từ s đến v đường ngắn từ s đến v G Cây đường ngắn có gốc đỉnh nguồn s ï: (b) (c) hai đường ngắn có gốc đỉnh àn s đồ thị (a) u v u v 6 9 s s 7 0 5 x 11 y (a) u (c) s v x (b) 11 y x 11 y Cấu trúc đường ngắn ª Lemma 25.1 (Đường đường ngắn đường ngắn nhất) Cho – Đồ thị có trọng số, có hướng G = (V, E) với hàm trọng số w:E – p = v1 , v2 ,…, vk đường ngắn từ v1 đến vk – Với i, j mà i j k, goïi pij = vi , vi + ,…, vj đường (subpath) p từ vi đến vj v pjk pij đường ngắn từk vi đến vj v1 p1i vj vi pij Cấu trúc đường ngắn (tiếp) Chứng minh Phản chứng p’ij pjk v1 p1i vk vj vi pij 10 Tính đắn giải thuật Dijkstra ª Định lý 25.10 (Tính đắn giải thuật Dijkstra) Thực thi giải thuật Dijkstra lên đồ thị G = (V, E) có trọng số có hướng với – hàm trọng số w : E không âm – đỉnh nguồn s Khi giải thuật thực thi xong, d[u] = (s, u) cho đỉnh u V Chứng minh Sẽ chứng minh: u V, d[u] = (s, u) u đưa vào tập S sau đẳng thức trì 31 Tính đắn giải thuật Dijkstra Chứng minh (tiếp) Chứng minh phản chứng (*) Gọi u đỉnh cho d[u] (s, u) u đưa vào tập S – Phải có đường từ s đến u Vì không (s, u) = , d[u] = , d[u] = (s, u) dùng Hệ luận 25.6, mâu thuẫn! – Do có đường ngắn p từ s đến u, với s S u V S Gọi y đỉnh p cho y V S Đặt x = [y] u p2 S y s p1 x 32 Tính đắn giải thuật Dijkstra Chứng minh (tiếp) – Chứng tỏ d[y] = (s, y) u đưa vào tập S: theo (*) ta phải có d[x] = (s, x) x đưa vào S Khi cạnh (x, y) nới lỏng nên d[y] = (s, y) dùng Lemma 25.7 – Vì y trước u đường ngắn từ s đến u trọng số dương nên (s, y) (s, u) d[y] = (s, y) (s, u) u p d[u] duøng Lemma 25.5 S y s p1 x 33 Tính đắn giải thuật Dijkstra Chứng minh (tiếp) – Khi u chọn EXTRACT-MIN y Q nên d[u] d[y], bất đẳng thức : d[y] = (s, y) = (s, u) = d[u], từ d[u] = (s, u), mâu thuẫn với (*)! – Dùng Lemma 25.5 để chứng minh phần lại 34 Tính đắn giải thuật Dijkstra (tiếp) ª Hệ luận 25.11 Thực thi giải thuật Dijkstra lên đồ thị G = (V, E) có trọng số có hướng với – hàm trọng số w : E không âm – đỉnh nguồn s Khi giải thuật thực thi xong đồ thị G đường ngắn có gốc s 35 Giải thuật Bellman-Ford ª Cho G = (V, E) đồ thị có trọng số, có hướng – Hàm trọng số w : E – Đỉnh nguồn s BELLMAN-FORD(G, w, s) INITIALIZE-SINGLE-SOURCE(G, s) for i to V[G] for each edge (u, v) EG RELAX(u, v, w) for each edge (u, v) EG if d[v] d[u] w(u, v) then return FALSE return TRUE 36 Phân tích giải thuật Bellman-Ford ª Thời gian chạy: – Khởi tạo: (V) thời gian – V1 lượt, lượt O(E) thời gian – vòng lặp for dòng 5-7: O(E) thời gian Thời gian chạy tổng cộng: O(V E) 37 Thực thi giải thuật Bellman-Ford Trong lượt, thứ tự relax cạnh là: (u, v) (u, x) (u, y) (v, u) (x, v) (x, y) (y, v) (y, z) (z, u) (z, x) Caïnh (u, v) sơn xám [v] = u Ngay sau lượt đầu: Ngay trước lượt đầu: u z u z 2 v x (a) 3 4 y 2 v x (b) 3 4 y 38 Thực thi giải thuật Bellman-Ford (tiếp) u Ngay sau lượt 2: z 6 7 x Ngay sau lượt 3: z (d) 3 4 y y (c) Ngay sau lượt 4: u z 2 x 3 4 v 2 u v 2 v x (e) 3 4 2 y 39 Tính đắn giải thuật Bellman-Ford ª Lemma 25.12 Cho – Đồ thị có trọng số có hướng G = (V, E), với hàm trọng số w : E – Đỉnh nguồn s – G không chứa chu trình có trọng số âm đến từ s Khi giải thuật BELLMAN-FORD thực thi xong d[v] = (s,v) cho đỉnh v đến từ s 40 Tính đắn giải thuật Bellman-Ford (tiếp) Chứng minh Gọi v đỉnh đến từ s Gọi p = đường ngắn từ s đến v Vì p đường đơn nên k V Sẽ chứng minh: d[vi ] = (s, vi) sau lượt nới lỏng thứ i, với i = 0, ,k, đẳng thức trì sau Dùng quy nạp: – Cơ bản: d[v0 ] = (s, v0) = (vì v0 = s) – Giả thiết quy nạp: d[vi ] = (s, vi 1) sau lượt nới lỏng thứ i – Bước quy nạp: Cạnh (vi , vi) nới lỏng lượt thứ i nên d[vi ] = (s, vi) sau lượt i thời điểm sau đó, theo Lemma 25.7 Để yù laø k V vaø có V lượt nới lỏng 41 Tính đắn giải thuật Bellman-Ford (tiếp) ª Hệ luận 25.13 Cho – Đồ thị có trọng số có hướng G = (V, E), với hàm trọng số w : E – Đỉnh nguồn s Với đỉnh v V, tồn đường từ s đến v BELLMAN-FORD hoàn tất với d[v] khi thực thi G 42 Tính đắn giải thuật Bellman-Ford (tiếp) ª Định lý 25.14 (Tính đắn giải thuật Bellman-Ford) Thực thi BELLMAN-FORD lên đồ thị G = (V, E) có trọng số có hướng với – hàm trọng số w : E – đỉnh nguồn s (i) Nếu G không chứa chu trình có trọng số âm đến từ s, (1) giải thuật trả TRUE (2) d[v] = (s,v) cho đỉnh v V (3) đồ thị G đường ngắn có gốc s (ii) Nếu G chứa chu trình có trọng số âm đến từ s, giải thuật trả FALSE 43 Tính đắn giải thuật Bellman-Ford (tiếp) Chứng minh (i) Giả sử G không chứa chu trình có trọng số âm đến từ s – Nếu v đến từ s Lemma 25.12 chứng minh (2) Nếu v không đến từ s có (2) từ Hệ luận 25.6 – Lemma 25.9 với (2) chứng minh (3) – Khi giải thuật hoàn tất, ta có với cạnh (u, v): d[v] = (s,v) (s,u) + w(u, v) (từ Lemma 25.3) = d[u] + w(u, v), test dòng khiến giải thuật trả TRUE, chứng minh (1) 44 Tính đắn giải thuật Bellman-Ford Chứng minh (tiếp) (ii) Giả sử G chứa chu trình có trọng số âm đến từ s vk v0 , v k c = v0 ,…,vk với v0 = vk Vaäy i = 1…k w(vi 1, vi ) < (*) v1 Chứng minh (ii) phản chứng: ° Giả sử Bellman-Ford trả TRUE, (dòng 5-8) d[vi ] d[vi ] + w(vi 1, vi ), với i = 1,…,k Từ trên, lấy tổng, i = 1…k d[vi ] i = 1…k d[vi ] + i = 1…k w(vi , vi ) ° Vì i = 1…k d[vi ] = i = 1…k d[vi ], vaø d[vi ] < 0 # (Hệ luận 25.13), nên với # ta coù i = 1…k w(vi , vi ), mâu thuẫn với (*)! 45 ... thuật nới lỏng (tiếp) ª Các giải thuật chương gọi INITIALIZE-SINGLESOURCE sau gọi RELAX số lần để nới lỏng cạnh – Nới lỏng cách dùng để thay đổi ước lượng đường ngắn predecessors – Các giải thuật. .. u s 13 Kỹ thuật nới lỏng ª Kỹ thuật nới lỏng (relaxation) – Duy trì cho đỉnh v thuộc tính d[v] dùng làm chận cho trọng số đường ngắn từ s đến v – biến d[v] gọi ước lượng đường ngắn (shortest path... INITIALIZE-SINGLESOURCE(G, s), ta có – đẳng thức d[v] = (s, v) – đẳng thức trì thành bất biến dãy bước nới lỏng lên cạnh G 20 Các tính chất kỷ thuật nới lỏng (tiếp) ª ª Để chứng minh tính đắn giải thuật