1. Trang chủ
  2. » Cao đẳng - Đại học

Bài toán đường đi ngắn nhất

78 233 1

Đ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 78
Dung lượng 1,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 1 Chương 5 BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤTNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 2 Nội dung 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 3 5.1. Bài toán đường đi ngắn nhất Cho đơn đồ thị có hướng G = (V,E) với hàm trọng số w: E  R (w(e) được gọi là độ dài hay trọng số của cạnh e) Độ dài của đường đi P = v1  v2  …  vk là số Đường đi ngắn nhất từ đỉnh u đến đỉnh v là đường đi có độ dài ngắn nhất trong số các đường đi nối u với v. Độ dài của đường đi ngắn nhất từ u đến v còn được gọi là khoảng cách từ u tới v và ký hiệu là (u,v). 1 1 1 ( ) ( , ) k i i i w P w v v    Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 4 Ví dụ path s s,a s,a,b s,a,b,c s,a,d s,a,b,e s,a,b,e,f weight 0 3 4 6 6 6 9 s a b c d e f Cho đồ thị có trọng số G = (V, E), và đỉnh nguồn sV, hãy tìm đường đi ngắn nhất từ s đến mỗi đỉnh còn lại. a s b e f d c 3 3 5 1 2 2 2 4 1 6 5 3 đỉnh nguồnNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 5 Các ứng dụng thực tế Giao thông (Transportation) Truyền tin trên mạng (Network routing) (cần hướng các gói tin đến đích trên mạng theo đường nào?) Truyền thông (Telecommunications) Speech interpretation (best interpretation of a spoken sentence) Điều khiển robot (Robot path planning) Medical imaging Giải các bài toán phức tạp hơn trên mạng ...Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 6 Các dạng bài toán ĐĐNN 1. Bài toán một nguồn một đích: Cho hai đỉnh s và t, cần tìm đường đi ngắn nhất từ s đến t. 2. Bài toán một nguồn nhiều đích: Cho s là đỉnh nguồn, cần tìm đường đi ngắn nhất từ s đến tất cả các đỉnh còn lại. 3. Bài toán mọi cặp: Tìm đường đi ngắn nhất giữa mọi cặp đỉnh của đồ thị.  Đường đi ngắn nhất theo số cạnh BFS.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 7 Nhận xét Các bài toán được xếp theo thứ tự từ đơn giản đến phức tạp Hễ có thuật toán hiệu quả để giải một trong ba bài toán thì thuật toán đó cũng có thể sử dụng để giải hai bài toán còn lạiNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 8 Giả thiết cơ bản Nếu đồ thị có chu trình âm thì độ dài đường đi giữa hai đỉnh nào đó có thể làm nhỏ tuỳ ý: 18 a b e c d 2 3 5 5 Giả thiết: Đồ thị không chứa chu trình độ dài âm (gọi tắt là chu trình âm) Xét đường đi từ a đến e: P: a (d  b c d)  e w(P) = 710  ∞, khi  + ∞Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 9 Trọng số âm 6 0 3 5 11 1    3 5 2 3 7 8 4 4 6 3 s a c e b d f g   2  8 3 h j i chu trình âm không đạt tới được từ s đỉnh nguồn Độ dài của đường đi ngắn nhất có thể là  hoặc – .Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 10 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 11 Các tính chất của ĐĐNN Tính chất 1. Đường đi ngắn nhất luôn có thể tìm trong số các đường đi đơn. • CM: Bởi vì việc loại bỏ chu trình độ dài không âm khỏi đường đi không làm tăng độ dài của nó. Tính chất 2. Mọi đường đi ngắn nhất trong đồ thị G đều đi qua không quá n1 cạnh, trong đó n là số đỉnh. • Như là hệ quả của tính chất 1 u v C w(C)  0Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 12 Các tính chất của ĐĐNN Tính chất 3: Giả sử P = ‹v 1, v2, …, vk› là đđnn từ v1 đến vk. Khi đó, Pij = ‹vi, vi+1, …, vj› là đđnn từ vi đến vj, với 1  i  j  k. (Bằng lời: Mọi đoạn đường con của đường đi ngắn nhất đều là đường đi ngắn nhất) CM. Phản chứng. Nếu Pij không là đđnn từ vi đến vj, thì tìm được P’ ij là đường đi từ vi đến vj thoả mãn w(P’ij) < w(Pij). Khi đó gọi P’ là đường đi thu được từ P bởi việc thay đoạn Pij bởi P’ij, ta có w(P’) < w(P) ? v1 v k P’ ij P ij v j v iNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 13 Hệ quả: Giả sử P là đđnn từ s tới v, trong đó P = s u v. Khi đó δ(s, v) = δ(s, u) + w(u, v). Các tính chất của ĐĐNN p Tính chất 4: Giả sử s  V. Đối với mỗi cạnh (u,v)  E, ta có δ(s, v)  δ(s, u) + w(u,v). Ký hiệu: δ(u, v) = độ dài đđnn từ u đến v (gọi là khoảng cách từ u đến v)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 14 Đường đi ngắn nhất xuất phát từ một đỉnh SingleSource Shortest PathsNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 15 Biểu diễn đường đi ngắn nhất d(v) = độ dài đường đi từ s đến v ngắn nhất hiện biết (cận trên cho độ dài đường đi ngắn nhất thực sự). p(v) = đỉnh đi trước v trong đường đi nói trên (sẽ sử dụng để truy ngược đường đi từ s đến v) . Các thuật toán tìm đường đi ngắn nhất làm việc với hai mảng: Khởi tạo (Initialization) for v  V(G) do dv   pv  NIL ds  0Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 16 Giảm cận trên (Relaxation) Sử dụng cạnh (u, v) để kiểm tra xem đường đi đến v đã tìm được có thể làm ngắn hơn nhờ đi qua u hay không. s z v u p(v) s z v u p(v) dv > du + w(u, v) Relax(u, v) if dv > du + w(u, v) then dv  du + w(u, v) pv  u Các thuật toán tìm đđnn khác nhau ở số lần dùng các cạnh và trình tự duyệt chúng để thực hiện giảm cận .Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 17 Nhận xét chung  ViÖc cµi ®Æt c¸c thuËt to¸n ®îc thÓ hiÖn nhê thñ tôc g¸n nh·n: • Mçi ®Ønh v sÏ cã nh·n gåm 2 thµnh phÇn (dv, pv). Nh·n sÏ biÕn ®æi trong qu¸ tr×nh thùc hiÖn thuËt to¸n NhËn thÊy r»ng ®Ó tÝnh kho¶ng c¸ch tõ s ®Õn t, ë ®©y, ta ph¶i tÝnh kho¶ng c¸ch tõ s ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i cña ®å thÞ. HiÖn nay vÉn cha biÕt thuËt to¸n nµo cho phÐp t×m ®®nn nhÊt gi÷a hai ®Ønh lµm viÖc thùc sù hiÖu qu¶ h¬n nh÷ng thuËt to¸n t×m ®®nn tõ mét ®Ønh ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 18 Nội dung 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Thuật toán FordBellman Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 19 Richard Bellman 19201984 Lester R. Ford, Jr. 1927~Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 20 Thuật toán FordBellman ThuËt to¸n Ford Bellman t×m ®êng ®i ng¾n nhÊt tõ ®Ønh s ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i cña ®å thÞ. ThuËt to¸n lµm viÖc trong trêng hîp träng sè cña c¸c cung lµ tuú ý. Gi¶ thiÕt r»ng trong ®å thÞ kh«ng cã chu tr×nh ©m. §Çu vµo: §å thÞ G=(V,E) víi n ®Ønh x¸c ®Þnh bëi ma trËn träng sè wu,v, u,v  V, ®Ønh nguån s  V; §Çu ra: Víi mçi v  V • dv = (s, v); • pv ®Ønh ®i tríc v trong ®®nn tõ s ®Õn v.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 21 Mô tả thuật toán procedure Ford_Bellman; begin for v  V do begin ( Khëi t¹o ) dv := ws,v ; pv:=s; end; ds:=0; ps:=s; for k := 1 to n2 do ( n = |V| ) for v  V {s} do for u  V do if dv > du + wu,v then begin dv := du + wu,v ; pv := u ; end; end;Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 22 Nhận xét TÝnh ®óng ®¾n cña thuËt to¸n cã thÓ chøng minh trªn c¬ së nguyªn lý tèi u cña quy ho¹ch ®éng. §é phøc t¹p tÝnh to¸n cña thuËt to¸n lµ O(n3). Cã thÓ chÊm døt vßng lÆp theo k khi ph¸t hiÖn trong qu¸ tr×nh thùc hiÖn hai vßng lÆp trong kh«ng cã biÕn dv nµo bÞ ®æi gi¸ trÞ. ViÖc nµy cã thÓ x¶y ra ®èi víi k < n2, vµ ®iÒu ®ã lµm t¨ng hiÖu qu¶ cña thuËt to¸n trong viÖc gi¶i c¸c bµi to¸n thùc tÕ.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 23 Ví dụ 0     6 8 2 7 3 4 7 5 9 2 s t y x z Source: s Trình tự duyệt cạnh để giảm cận: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 24 Lần 1 0 7  6  6 8 2 7 3 4 7 5 9 2 s t y x z dy = 7 py = s dt = 6 pt = sNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 25 Lần 2 0 7 2 6 11 6 8 2 7 3 4 7 5 9 2 s t y x z Relax (t, x), (t, y), (t, z), (x, t). dx = 11 px = t dz = 2 pz = tNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 26 Lần 2 (tiếp) 0 7 2 6 4 6 8 2 7 3 4 7 5 9 2 s t y x z Relax (y, x), (y, z), (z, x), (z, s), (z, s), (s, t), (s, y). dx = 4 px = yNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 27 Lần 3 0 7 2 2 4 6 8 2 7 3 4 7 5 9 2 s t y x z dt = 2 pt = xNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 28 Lần 4 0 7 2 2 4 6 8 2 7 3 4 7 5 9 2 s t y x z dz = 2 pz = t (không đổi)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 29 Nhận xét §èi víi ®å thÞ tha tèt h¬n lµ sö dông danh s¸ch kÒ Ke (v), v  V, ®Ó biÓu diÔn ®å thÞ, khi ®ã vßng lÆp theo u cÇn viÕt l¹i díi d¹ng for u  Ke(v) do if dv > du + wu,v then begin dv := du + wu,v ; pv := u ; end; ThuËt to¸n cã ®é phøc t¹p O(n.m).Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 30 Nội dung 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 31 Thuật toán Dijkstra  Trong trêng hîp träng sè trªn c¸c cung lµ kh«ng ©m, thuËt to¸n do Dijkstra ®Ò nghÞ h÷u hiÖu h¬n rÊt nhiÒu so víi thuËt to¸n FordBellman.  ThuËt to¸n ®îc x©y dùng dùa trªn thủ tục gán nhãn. Thoạt tiên nh·n của các đỉnh là t¹m thêi. ë mçi mét bíc lÆp cã mét nh·n t¹m thêi trë thµnh nh·n cè ®Þnh. NÕu nh·n cña mét ®Ønh u trë thµnh cè ®Þnh th× du sÏ cho ta ®é dµi cña ®®nn tõ ®Ønh s ®Õn u. Thuật toán kết thúc khi nhãn của tất cả các đỉnh trở thành cố định. Edsger W.Dijkstra (19302002)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 32 Thuật toán Dijkstra  §Çu vµo: §å thÞ cã híng G=(V,E) víi n ®Ønh, s  V lµ ®Ønh xuÊt ph¸t, wu,v, u,v  V ma trËn träng sè;  Gi¶ thiÕt: wu,v  0, u, v  V.  §Çu ra: Víi mçi v  V • dv = (s, v); • pv ®Ønh ®i tríc v trong ®®nn tõ s ®Õn v.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 33 Thuật toán Dijkstra procedure Dijkstra; begin for v  V do begin ( Khëi t¹o ) dv := ws,v ; pv:=s; end; ds := 0; S := {s}; ( S – tËp ®Ønh cã nh·n cè ®Þnh ) T := V {s}; ( T lµ tËp c¸c ®Ønh cã nh·n t¹m thêi ) while T   do ( Bíc lÆp ) begin T×m ®Ønh u  T tho¶ m·n du = min{ dz : z  T}; T := T {u}; S:= S  {u}; ( Cè ®Þnh nh·n cña ®Ønh u ) for v  T do ( G¸n nh·n l¹i cho c¸c ®Ønh trong T ) if dv > du + wu,v then begin dv := du + wu,v ; pv := u ; end; end; end; Tập S: Chỉ cần cho chứng minh định lýNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 34 Thuật toán Dijkstra  Chó ý: NÕu chØ cÇn t×m ®êng ®i ng¾n nhÊt tõ s ®ªn t th× cã thÓ chÊm døt thuËt to¸n khi ®Ønh t trë thµnh cã nh·n cè ®Þnh. §Þnh lý 1. ThuËt to¸n Dijkstra t×m ®îc ®êng ®i ng¾n nhÊt tõ ®Ønh s ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i trªn ®å thÞ sau thêi gian O(n2).  CM: Rõ ràng thời gian tính là O(n2)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 35 Chứng minh tính đúng đắn của Thuật toán Dijkstra Ta sẽ CM với mỗi v  S, d(v) = (s, v). • Qui nạp theo |S|. • Cơ sở qui nạp: Với |S| = 1, rõ ràng là đúng. • Chuyển qui nạp:  giả sử thuật toán Dijkstra bổ sung v vào S  d(v) là độ dài của một đường đi từ s đến v  nếu d(v) không là độ dài đđnn từ s đến v, thì gọi P là đđnn từ s đến v  P phải sử dụng cạnh ra khỏi S, chẳng hạn (x, y)  khi đó d(v)> (s, v) giả thiết = (s, x) + w(x, y) + (y, v) tính chất 3  (s, x) + w(x, y) (y, v) là không âm = d(x) + w(x, y) giả thiết quy nạp  d(y) theo thuật toán vì thế thuật toán Dijkstra phải chọn y thay vì chọn v ? S s y v x PNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 36 Ví dụ Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 Khởi tạo 0, 1 1, 1 , 1 , 1 , 1 , 1 1 6, 2 3, 2 , 1 8, 2 2 4, 4 7, 4 8, 2 3 6, 3 5, 3 4 6, 3 5 Tìm đường đi ngắn nhất từ đỉnh 1 đến tất cả các đỉnh còn lại 1 1 2 2 1 10 7 5 4 3 2 1 3 4 6 5 2Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 37 Cây đường đi ngắn nhất Tập cạnh {(p(v), v): vV {s} } tạo thành cây có gốc tại đỉnh nguồn s được gọi là cây đđnn xuất phát từ đỉnh s. 1 1 2 2 1 10 7 5 3 4 2 1 3 4 6 5 2 1 4 3 5 6 • Các cạnh màu đỏ tạo thành cây đđnn xuất phát từ đỉnh 1 • Số màu đỏ viết bên cạnh mỗi đỉnh là độ dài đường đi ngắn nhất từ 1 đến nó.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 38 Nội dung 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 39 Đường đi trong đồ thị không có chu trình Shortest Paths In Directed Acyclic GraphsNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 40 Đường đi trong đồ thị không có chu trình Mét trêng hîp riªng cña bµi to¸n ®êng ®i ng¾n nhÊt gi¶i ®îc nhê thuËt to¸n víi ®é phøc t¹p tÝnh to¸n O(n2), ®ã lµ bµi to¸n trªn ®å thÞ kh«ng cã chu tr×nh (cßn träng sè trªn c¸c cung cã thÓ lµ c¸c sè thùc tuú ý). KÕt qu¶ sau ®©y lµ c¬ së ®Ó x©y dùng thuËt to¸n nãi trªn: §Þnh lý 2. Gi¶ sö G lµ ®å thÞ kh«ng cã chu tr×nh. Khi ®ã c¸c ®Ønh cña nã cã thÓ ®¸nh sè sao cho mçi cung cña ®å thÞ chØ híng tõ ®Ønh cã chØ sè nhá h¬n ®Õn ®Ønh cã chØ sè lín h¬n, nghÜa lµ mçi cung cña nã cã thÓ biÓu diÔn díi d¹ng (vi, vj), trong ®ã i < j .Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 41 Thuật toán đánh số đỉnh  Tríc hÕt nhËn thÊy r»ng: Trong ®å thÞ kh«ng cã chu tr×nh bao giê còng t×m ®îc ®Ønh cã b¸n bËc vµo b»ng 0. Thùc vËy, b¾t ®Çu tõ ®Ønh v 1 nÕu cã cung ®i vµo nã tõ v2 th× ta l¹i chuyÓn sang xÐt ®Ønh v 2. NÕu cã cung tõ v3 ®i vµo v2, th× ta l¹i chuyÓn sang xÐt v3, ... Do ®å thÞ lµ kh«ng cã chu tr×nh nªn sau mét sè h÷u h¹n lÇn chuyÓn nh vËy ta ph¶i ®i ®Õn ®Ønh kh«ng cã cung ®i vµo.  ThuËt to¸n ®îc x©y dùng dùa trªn ý tëng rÊt ®¬n gi¶n sau: Tho¹t tiªn, t×m c¸c ®Ønh cã b¸n bËc vµo b»ng 0. Râ rµng ta cã thÓ ®¸nh sè chóng theo mét thø tù tuú ý b¾t ®Çu tõ 1. TiÕp theo, lo¹i bá khái ®å thÞ nh÷ng ®Ønh ®· ®îc ®¸nh sè cïng c¸c cung ®i ra khái chóng, ta thu ®îc ®å thÞ míi còng kh«ng cã chu tr×nh, vµ thñ tôc ®îc lÆp l¹i víi ®å thÞ míi nµy. Qu¸ tr×nh ®ã sÏ ®îc tiÕp tôc cho ®Õn khi tÊt c¶ c¸c ®Ønh cña ®å thÞ ®îc ®¸nh sè.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 42 Thuật toán đánh số đỉnh  §Çu vµo: §å thÞ cã híng G=(V,E) víi n ®Ønh kh«ng chøa chu tr×nh ®îc cho bëi danh s¸ch kÒ Ke(v), v  V.  §Çu ra: Víi mçi ®Ønh v  V chØ sè NR v tho¶ m·n: Víi mäi cung (u, v) cña ®å thÞ ta ®Òu cã NRu < NRv.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 43 Thuật toán đánh số đỉnh procedure Numbering; begin for v  V do Vaov := 0; for u  V do ( TÝnh Vaov = b¸n bËc vµo cña v ) for v  Ke(u) do Vaov := Vaov + 1 ; QUEUE :=  ; for v  V do if Vaov = 0 then QUEUE  v ; num := 0; while QUEUE   do begin u  QUEUE ; num := num + 1 ; NRu := num ; for v  Ke(u) do begin Vaov := Vaov 1 ; if Vaov = 0 then QUEUE  v ; end; end; end;Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 44 Thuật toán đánh số đỉnh Râ rµng trong bíc khëi t¹o ta ph¶i duyÖt qua tÊt c¶ c¸c cung cña ®å thÞ khi tÝnh b¸n bËc vµo cña c¸c ®Ønh, v× vËy ë ®ã ta tèn cì O(m) phÐp to¸n, trong ®ã m lµ sè cung cña ®å thÞ. TiÕp theo, mçi lÇn ®¸nh sè mét ®Ønh, ®Ó thùc hiÖn viÖc lo¹i bá ®Ønh ®· ®¸nh sè cïng víi c¸c cung ®i ra khái nã, chóng ta l¹i duyÖt qua tÊt c¶ c¸c cung nµy. Suy ra ®Ó ®¸nh sè tÊt c¶ c¸c ®Ønh cña ®å thÞ chóng ta sÏ ph¶i duyÖt qua tÊt c¶ c¸c cung cña ®å thÞ mét lÇn n÷a. VËy ®é phøc t¹p cña thuËt to¸n lµ O(m).Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 45 Thuật toán tìm đđnn trên đồ thị không có chu trình  Do cã thuËt to¸n ®¸nh sè trªn, nªn khi xÐt ®å thÞ kh«ng cã chu tr×nh ta cã thÓ gi¶ thiÕt lµ c¸c ®Ønh cña nã ®îc ®¸nh sè sao cho mçi cung chØ ®i tõ ®Ønh cã chØ sè nhá ®Õn ®Ønh cã chØ sè lín h¬n.  ThuËt to¸n t×m ®êng ®i ng¾n nhÊt tõ ®Ønh nguån v1 ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i trªn®å thÞ kh«ng cã chu tr×nh  §Çu vµo: §å thÞ G=(V, E), trong ®ã V={ v1, v2, ... , vn }. §èi víi mçi cung (vi, vj)  E, ta cã i < j. §å thÞ ®îc cho bëi danh s¸ch kÒ Ke(v) , v  V.  §Çu ra: Kho¶ng c¸ch tõ v1 ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i ®îc ghi trong m¶ng dvi, i = 2, 3, ..., nNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 46 Thuật toán tìm đđnn trên đồ thị không có chu trình procedure Critical_Path; begin dv1 := 0; for j:=1 to n do dvj :=∞; for vj  Kev1 do dvj := w(v1, vj) ; for j:= 2 to n do for v  Kevj do dv := min ( dv, dvj + w(vj, v) ) ; end;  §é phøc t¹p tÝnh to¸n cña thuËt to¸n lµ O(m), do mçi cung cña ®å thÞ ph¶i xÐt qua ®óng mét lÇn.Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 47 Ví dụ  0     r s t u v w 5 2 7 –1 –2 6 1 3 2 4 Cần tìm đường đi ngắn nhất từ s đến tất cả các đỉnh đạt đến được từ nóNguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 48 Ví dụ  0     r s t u v w 5 2 7 –1 –2 6 1 3 2 4Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 49 Ví dụ  0 2 6   r s t u v w 5 2 7 –1 –2 6 1 3 2 4Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 50 Ví dụ  0 2 6 6 4 r s t u v w 5 2 7 –1 –2 6 1 3 2 4Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 51 Ví dụ  0 2 6 5 4 r s t u v w 5 2 7 –1 –2 6 1 3 2 4Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 52 Ví dụ  0 2 6 5 3 r s t u v w 5 2 7 –1 –2 6 1 3 2 4Nguyễn Đức Nghĩa Comp 122, Fall 2003 Singlesource SPs 53 Ví dụ  0 2 6 5 3 r s t u v w 5 2 7 –1 –2 6 1 3 2 4 Kết quả: Cây đường đi ngắn nhất từ s thể hiện bởi các cung màu đỏNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 54 Ứng dụng: PERT  X©y dùng ph¬ng ph¸p gi¶i bµi to¸n ®iÒu khiÓn viÖc thùc hiÖn nh÷ng dù ¸n lín, gäi t¾t lµ PERT (Project Evaluation and Review Technique) hay CDM (Critical path Method). ViÖc thi c«ng mét c«ng tr×nh lín ®îc chia ra lµm n c«ng ®o¹n, ®¸nh sè tõ 1 ®Õn n. Cã mét sè c«ng ®o¹n mµ viÖc thùc hiÖn nã chØ ®îc tiÕn hµnh sau khi mét sè c«ng ®o¹n nµo ®ã ®· hoµn thµnh. §èi víi mçi c«ng ®o¹n i biÕt ti lµ thêi gian cÇn thiÕt ®Ó hoµn thµnh nã (i = 1, 2,..., n).Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 55 Ứng dụng: PERT  C¸c d÷ liÖu víi n = 8 ®îc cho trong b¶ng sau ®©y Công đoạn ti Các công đoạn phải hoàn thành trước nó 1 15 Không có 2 30 1 3 80 Không có 4 45 2, 3 5 124 4 6 15 2, 3 7 15 5, 6 8 19 5Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 56 Ứng dụng: PERT  Bµi to¸n PERT: Gi¶ sö thêi ®iÓm b¾t ®Çu tiÕn hµnh thi c«ng c«ng tr×nh lµ 0. H·y t×m tiÕn ®é thi c«ng c«ng tr×nh (chØ râ mçi c«ng ®o¹n ph¶i ®îc b¾t ®Çu thc hiÖn vµo thêi ®iÓm nµo) ®Ó cho c«ng tr×nh ®îc hoµn thµnh xong trong thêi ®iÓm sím nhÊt cã thÓ ®îc.  Ta cã thÓ x©y dùng ®å thÞ cã híng n ®Ønh biÓu diÔn rµng buéc vÒ tr×nh tù thùc hiÖc c¸c c«ng viÖc nh sau: • Mçi ®Ønh cña ®å thÞ t¬ng øng víi mét c«ng viÖc. • NÕu c«ng viÖc i ph¶i ®îc thùc hiÖn tríc c«ng ®o¹n j th× trªn ®å thÞ cã cung (i,j), träng sè trªn cung nµy ®îc g¸n b»ng tiNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 57 Thuật toán PERT  Thªm vµo ®å thÞ 2 ®Ønh 0 vµ n+1 t¬ng øng víi hai sù kiÖn ®Æc biÖt: • ®Ønh sè 0 t¬ng øng víi c«ng ®o¹n LÔ khëi c«ng, nã ph¶i ®îc thùc hiÖn tríc tÊt c¶ c¸c c«ng ®o¹n kh¸c, vµ • ®Ønh n+1 t¬ng øng víi c«ng ®o¹n C¾t b¨ng kh¸nh thµnh c«ng tr×nh, nã ph¶i thùc hiÖn sau tÊt c¶ c¸c c«ng ®o¹n, • víi t0 = tn+1 = 0 (trªn thùc tÕ chØ cÇn nèi ®Ønh 0 víi tÊt c¶ c¸c ®Ønh cã b¸n bËc vµo b»ng 0 vµ nèi tÊt c¶ c¸c ®Ønh cã b¸n bËc ra b»ng 0 víi ®Ønh n+1). Gäi ®å thÞ thu ®îc lµ G.  Râ rµng bµi to¸n ®Æt ra dÉn vÒ bµi to¸n t×m ®êng ®i dµi nhÊt tõ ®Ønh 0 ®Õn tÊt c¶ c¸c ®Ønh cßn l¹i trªn ®å thÞ G.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 58 Thuật toán PERT  Do ®å thÞ G kh«ng chøa chu tr×nh, nªn ®Ó gi¶i bµi to¸n ®Æt ra cã thÓ ¸p dông thuËt to¸n Critical_Path trong ®ã chØ cÇn ®æi to¸n tö min thµnh to¸n tö max.  KÕt thóc thuËt to¸n, ta thu ®îc dv lµ ®é dµi ®êng ®i dµi nhÊt tõ ®Ønh 0 ®Õn ®Ønh v.  Khi ®ã dv cho ta thêi ®iÓm sím nhÊt cã thÓ b¾t ®Çu thùc hiÖn c«ng ®o¹n v, nãi riªng dn+1 lµ thêi ®iÓm sím nhÊt cã thÓ c¾t b¨ng kh¸nh thµnh, tøc lµ thêi ®iÓm sím nhÊt cã thÓ hoµn thµnh toµn bé c«ng tr×nh.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 59 PERT: Ví dụ minh hoạ  Qui bài toán PERT về tìm đường đi dài nhất trên đồ thị không có chu trình 30 30 80 80 15 0 15 45 4 1 3 2 4 6 5 0 0 9 7 8 4 15 19 0 125 129 80 80 15 0 129 148 0Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 60 Nội dung 5.1. Bài toán đường đi ngắn nhất (ĐĐNN) 5.2. Tính chất của ĐĐNN, Giảm cận trên 5.3. Thuật toán BellmanFord 5.4. Thuật toán Dijkstra 5.5. Đường đi ngắn nhất trong đồ thị không có chu trình 5.6. Thuật toán FloydWarshalNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 61 ĐƯỜNG ĐI NGẮN NHẤT GIỮA MỌI CẶP ĐỈNH AllPairs Shortest PathsNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 62 Đường đi ngắn nhất giữa mọi cặp đỉnh Bài toán Cho đồ thị G = (V, E), với trọng số trên cạnh e là w(e), đối với mỗi cặp đỉnh u, v trong V, tìm đường đi ngắn nhất từ u đến v. Đầu ra ma trận: phần tử ở dòng u cột v là độ dài đường đi ngắn nhất từ u đến v. Cho phép có trọng số âm Giả thiết: Đồ thị không có chu trình âm. Đầu vào: ma trận trọng số.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 63 Ví dụ 2 1 5 3 4 3 4 8 2 5 1 6 7 4 Đầu vào 0 3 8  4  0  1 7  4 0   2  5 0     6 0 n  n ma trận W = (w ) với ij w = 0 nếu i = j w (i, j) nếu i  j (i, j)  E ij  còn lạiNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 64 Tiếp 2 1 5 3 4 3 4 8 2 5 1 6 7 4 0 1 3 2 4 3 0 4 1 1 7 4 0 5 3 2 1 5 0 2 8 5 1 6 0 5 4 1 Đường đi: 1 5 4 3 2 4 1 5 Đầu ra = – 4 + 6 – 5 + 4Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 65 Thuật toán FloydWarshall d = độ dài đường đi ngắn nhất từ i đến j sử dụng các đỉnh trung gian ij trong tập đỉnh { 1, 2, …, m }. (m) i m  m ...  m j Khi đó độ dài đường đi ngắn nhất từ i đến j là dij (n)Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 66 Công thức đệ qui tính d(h) dij (0) = wij i j d (h) ( = min ( d h1) ( , d h1) ( + d h1)) nếu h  1 ij ij ih hj i j h d(h1) ij d(h1) ih d (h1) hjNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 67 Thuật toán FloydWarshall FloydWarshall(n, W) D(0)  W for k  1 to n do for i  1 to n do for j  1 to n do d  min (d , d + d ) return D(n) (k) (k1) (k1) (k1) Thời gian tính (n3) ij ij ik kjNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 68 Xây dựng đường đi ngắn nhất Predecessor matrix P = (p ij (k)) : đường đi ngắn nhất từ i đến j chỉ qua các đỉnh trung gian trong {1, 2, …, k}. i, nếu (i, j)  E NIL, nếu (i, j)  E p = (k) ij p nếu d  d + d ij ij (k1) ik kj (k1) (k1) (k1) p( kj k1) trái lại (k) i j k pij = (0) i p j (k) ijNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 69 Ví dụ 1 3 2 4 4 5 1 3 6 2 D(0) 0 3 5   0 1 6   0 2 4   0 P (0) NIL 1 1 NIL NIL NIL 2 2 NIL NIL NIL 3 4 NIL NIL NIL D(1) 0 3 5  0 1 6   0 2 4 7 9 0 P (1) NIL 1 1 NIL NIL NIL 2 2 NIL NIL NIL 3 4 1 1 NIL Có thể sử dụng 1 là đỉnh trung gian:Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 70 Ví dụ (tiếp) D (2) 0 3 4 9  0 1 6   0 2 4 7 8 0 P (2) NIL 1 2 2 NIL NIL 2 2 NIL NIL NIL 3 4 1 2 NIL D 0 3 4 6  0 1 3   0 2 4 7 8 0 (3) P (3) NIL NIL NIL 1 2 2 33 NIL NIL NIL 3 4 1 2 NIL D(4) 0 3 4 7 0 1 36 6 9 0 2 4 7 8 0 P (4) NIL 1 2 3 4 NIL 2 3 4 1 NIL 3 4 1 2 NILNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 71 Ví dụ (tiếp) 3 1 2 1 2 2 2 1 1 1 3 3 3 3 4 4 4 3 3 3 1 4 1 2 2 2 2 4 4 3Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 72 Thuật toán FloydWarshall FloydWarshall(n, W) D  W for k  1 to n do for i  1 to n do for j  1 to n do d ij  min (dij , dik + dkj) return D Thời gian tính (n3) Nguyễn Đức Nghĩa 200742 Allpairs distance 73 Robert W. Floyd, 19362001  Born in New York, Floyd finished school at age 14. At the University of Chicago, he received a Bachelors degree in liberal arts in 1953 (when still only 17) and a second Bachelors degree in physics in 1958.  Becoming a computer operator in the early 1960s, he began publishing many noteworthy papers and was appointed an associate professor at Carnegie Mellon University by the time he was 27 and became a full professor at Stanford University six years later. He obtained this position without a Ph.D.  Turing Award, 1978.Nguyễn Đức Nghĩa 200742 Allpairs distance 74 Stephen Warshall  1935 – 2006  Proving the correctness of the transitive closure algorithm for boolean circuit. • (Wikipedia) There is an interesting anecdote about his proof that the transitive closure algorithm, now known as Warshalls algorithm, is correct. He and a colleague at Technical Operations bet a bottle of rum on who first could determine whether this algorithm always works. Warshall came up with his proof overnight, winning the bet and the rum, which he shared with the loser of the bet. Because Warshall did not like sitting at a desk, he did much of his creative work in unconventional places such as on a sailboat in the Indian Ocean or in a Greek lemon orchard.Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 75 Questions?Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 76 Bao đóng truyền ứng (Transitive Closure) Bao đóng truyền ứng của đồ thị G = (V, E) là G = (V, E) sao cho (i, j)  E iff có đường đi từ i đến j trên G. 5 4 3 2 1 1 4 3 5 2 G: G:Nguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 77 Thuật toán FloydWarshall Ma trận xuất phát là ma trận kề Thuật toán FloydWarshall thay min boolean OR + boolean AND Thời gian tính (n3 ) 1 nếu i = j hoặc có cạnh nối 2 đỉnh i và j a (i , j) = 0 trái lại AND AND OR OR i x y j i j NếuNguyễn Đức Nghĩa Toán rời rạc, Fall 2005 Bài toán đường đi ngắn nhất 78 Questions?

Trang 1

Chương 5

BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT

Trang 2

Nội dung

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu trình

5.6 Thuật toán Floyd-Warshal

Trang 3

5.1 Bài toán đường đi ngắn nhất

Cho đơn đồ thị có hướng G = (V,E) với hàm trọng số

w: ER (w(e) được gọi là độ dài hay trọng số của

cạnh e)

 Độ dài của đường đi P = v 1  v 2  …  v k là số

 Đường đi ngắn nhất từ đỉnh u đến đỉnh v là đường đi có

độ dài ngắn nhất trong số các đường đi nối u với v.

Độ dài của đường đi ngắn nhất từ u đến v còn được gọi

khoảng cách từ u tới v và ký hiệu là  (u,v)

1

11

k

i i i

Trang 4

đỉnh nguồn

Trang 5

Các ứng dụng thực tế

 Giao thông (Transportation)

 Truyền tin trên mạng (Network routing) (cần hướng

các gói tin đến đích trên mạng theo đường nào?)

 Truyền thông (Telecommunications)

 Speech interpretation (best interpretation of a spoken

Trang 6

Các dạng bài toán ĐĐNN

1. Bài toán một nguồn một đích: Cho hai đỉnh s

và t, cần tìm đường đi ngắn nhất từ s đến t.

2. Bài toán một nguồn nhiều đích: Cho s là

đỉnh nguồn, cần tìm đường đi ngắn nhất từ s đến tất cả các đỉnh còn lại.

3 Bài toán mọi cặp: Tìm đường đi ngắn nhất

giữa mọi cặp đỉnh của đồ thị.

 Đường đi ngắn nhất theo số cạnh - BFS.

Trang 8

Giả thiết cơ bản

 Nếu đồ thị có chu trình âm thì độ dài đường đi giữa hai đỉnh nào đó có thể làm nhỏ tuỳ ý:

Trang 9

8 4

-4 6 -3

Trang 10

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu trình

5.6 Thuật toán Floyd-Warshal

Trang 11

Các tính chất của ĐĐNN

Tính chất 1 Đường đi ngắn nhất luôn có thể tìm trong

số các đường đi đơn

• CM: Bởi vì việc loại bỏ chu trình độ dài không âm khỏi

đường đi không làm tăng độ dài của nó.

Tính chất 2 Mọi đường đi ngắn nhất trong đồ thị G

đều đi qua không quá n-1 cạnh, trong đó n là số đỉnh.

• Như là hệ quả của tính chất 1

C

w(C)  0

Trang 12

CM Phản chứng Nếu P ij không là đđnn từ v i đến v j , thì tìm được

P’ ij là đường đi từ v i đến v j thoả mãn w(P’ ij ) < w(P ij ) Khi đó gọi P’

là đường đi thu được từ P bởi việc thay đoạn P ij bởi P’ ij , ta có

Trang 13

Hệ quả: Giả sử P là đđnn từ s tới v, trong đó P = s uv

Trang 14

Đường đi ngắn nhất xuất phát từ một đỉnh

Single-Source Shortest Paths

Trang 15

Biểu diễn đường đi ngắn nhất

d(v) = độ dài đường đi từ s đến v ngắn nhất hiện biết

(cận trên cho độ dài đường đi ngắn nhất thực sự).

p(v) = đỉnh đi trước v trong đường đi nói trên

(sẽ sử dụng để truy ngược đường đi từ s đến v)

Các thuật toán tìm đường đi ngắn nhất làm việc với hai mảng:

Khởi tạo (Initialization)

for v  V(G)

do d[v]  

p[v]  NIL

Trang 16

Giảm cận trên (Relaxation)

Sử dụng cạnh (u, v) để kiểm tra xem đường đi đến v đã tìm được

có thể làm ngắn hơn nhờ đi qua u hay không.

Trang 17

Nhận xột chung

Việc cài đặt các thuật toán đợc thể hiện nhờ thủ tục gán nhãn:

• Mỗi đỉnh v sẽ có nhãn gồm 2 thành phần (d[v], p[v]) Nhãn sẽ

biến đổi trong quá trình thực hiện thuật toán

Nhận thấy rằng để tính khoảng cách từ s đến t, ở đây, ta phải tính khoảng cách từ s đến tất cả các đỉnh còn lại

của đồ thị.

nhất giữa hai đỉnh làm việc thực sự hiệu quả hơn những thuật toán tìm đđnn từ một đỉnh đến tất cả các đỉnh còn lại.

Trang 18

Nội dung

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu trình 5.6 Thuật toán Floyd-Warshal

Trang 19

Thuật toán Ford-Bellman

Richard Bellman

1927~

Trang 20

Thuật toỏn Ford-Bellman

 Thuật toán Ford - Bellman tìm đờng đi ngắn nhất từ

đỉnh s đến tất cả các đỉnh còn lại của đồ thị.

 Thuật toán làm việc trong trờng hợp trọng số của các cung là tuỳ ý.

trận trọng số w[u,v], u,vV, đỉnh nguồn sV;

Đầu ra: Với mỗi vV

• d[v] = (s, v);

• p[v] - đỉnh đi trớc v trong đđnn từ s đến v.

Trang 21

Mô tả thuật toán

end;

Trang 22

Nhận xột

Tính đúng đắn của thuật toán có thể chứng minh trên cơ sở nguyên lý tối u của quy hoạch động.

Độ phức tạp tính toán của thuật toán là O(n 3 ).

Có thể chấm dứt vòng lặp theo k khi phát hiện trong quá trình thực hiện hai vòng lặp trong

không có biến d[v] nào bị đổi giá trị Việc này

có thể xảy ra đối với k < n-2, và điều đó làm

tăng hiệu quả của thuật toán trong việc giải các bài toán thực tế.

Trang 23

8 2

7

-3 -4

7

9

5 -2

Trang 24

-3 -4

7

9

5 -2

Trang 25

8 2

7

-3 -4

7

9

5 -2

d[z] = 2 p[z] = t

Trang 26

Lần 2 (tiếp)

0

2 7

4

6 6

8 2

7

-3 -4

7

9

5 -2

Trang 27

Lần 3

0

2 7

4

2

6

8 2

7

-3 -4

7

9

5 -2

Trang 28

8 2

7

-3 -4

7

9

5 -2

Trang 29

Nhận xột

 Đối với đồ thị tha tốt hơn là sử dụng danh sách kề

Ke-(v), vV, để biểu diễn đồ thị, khi đó vòng lặp theo u

cần viết lại dới dạng

for u  Ke  (v) do

if d[v] > d[u] + w[u,v] then begin

d[v] := d[u] + w[u,v] ; p[v] := u ;

end;

Thuật toán có độ phức tạp O(n.m).

Trang 30

Nội dung

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu trình 5.6 Thuật toán Floyd-Warshal

Trang 31

Thuật toỏn Dijkstra

 Trong trờng hợp trọng số trên các cung là không

âm, thuật toán do Dijkstra đề nghị hữu hiệu hơn

rất nhiều so với thuật toán Ford-Bellman.

 Thuật toán đợc xây dựng dựa trên thủ tục gỏn

nhón Thoạt tiờn nhãn của cỏc đỉnh là tạm thời.

ở mỗi một bớc lặp có một nhãn tạm thời trở

thành nhãn cố định Nếu nhãn của một đỉnh u

trở thành cố định thì d[u] sẽ cho ta độ dài của

đđnn từ đỉnh s đến u Thuật toỏn kết thỳc khi

nhón của tất cả cỏc đỉnh trở thành cố định.

Edsger W.Dijkstra (1930-2002)

Trang 32

Thuật toỏn Dijkstra

Đầu vào: Đồ thị có hớng G=(V,E) với n đỉnh,

s V là đỉnh xuất phát, w[u,v], u,v V - ma trận trọng số;

Giả thiết: w [u,v] 0, u, v V.

Đầu ra: Với mỗi v V

• d[v] = (s, v);

• p[v] - đỉnh đi trớc v trong đđnn từ s đến v.

Trang 33

Thuật toỏn Dijkstra

Tìm đỉnh u  T thoả mãn d[u] = min{ d[z] : z  T};

T := T \ {u}; S:= S  {u}; (* Cố định nhãn của đỉnh u *)

for v T do (* Gán nhãn lại cho các đỉnh trong T *)

if d[v] > d[u] + w[u,v] then begin

d[v] := d[u] + w[u,v] ; p[v] := u ;

end;

end;

Tập S: Chỉ cần cho chứng minh định lý

Trang 34

Thuật toỏn Dijkstra

Chú ý: Nếu chỉ cần tìm đờng đi ngắn nhất từ s

đên t thì có thể chấm dứt thuật toán khi đỉnh t

trở thành có nhãn cố định.

Định lý 1 Thuật toán Dijkstra tìm đợc đờng đi

ngắn nhất từ đỉnh s đến tất cả các đỉnh còn lại trên đồ thị sau thời gian O(n 2 ).

CM: Rừ ràng thời gian tớnh là O(n 2 )

Trang 35

Chứng minh tính đúng đắn của Thuật toán Dijkstra

 Ta sẽ CM với mỗi v  S, d(v) =  (s, v).

• Qui nạp theo |S|.

• Cơ sở qui nạp: Với |S| = 1, rõ ràng là đúng.

• Chuyển qui nạp:

 d(y) theo thuật toán

vì thế thuật toán Dijkstra phải chọn y thay vì chọn v ?!

S

s

y

v x

P*

Trang 36

7 5

Trang 37

Cây đường đi ngắn nhất

Trang 38

Nội dung

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu

trình

5.6 Thuật toán Floyd-Warshal

Trang 39

Đường đi trong đồ thị không có chu trình

Shortest Paths In Directed Acyclic Graphs

Trang 40

Đường đi trong đồ thị khụng cú chu trỡnh

 Một trờng hợp riêng của bài toán đờng đi ngắn nhất

giải đợc nhờ thuật toán với độ phức tạp tính toán O(n 2 ),

đó là bài toán trên đồ thị không có chu trình (còn trọng

số trên các cung có thể là các số thực tuỳ ý) Kết quả sau đây là cơ sở để xây dựng thuật toán nói trên:

Định lý 2 Giả sử G là đồ thị không có chu trình Khi

đó các đỉnh của nó có thể đánh số sao cho mỗi cung của đồ thị chỉ hớng từ đỉnh có chỉ số nhỏ hơn đến đỉnh

có chỉ số lớn hơn, nghĩa là mỗi cung của nó có thể biểu diễn dới dạng (v[i], v[j]), trong đó i < j

Trang 41

Thuật toỏn đỏnh số đỉnh

 Trớc hết nhận thấy rằng: Trong đồ thị không có chu trình bao giờ cũng tìm đợc đỉnh có bán bậc vào bằng 0 Thực vậy, bắt đầu từ

đỉnh v 1 nếu có cung đi vào nó từ v 2 thì ta lại chuyển sang xét

đỉnh v 2 Nếu có cung từ v 3 đi vào v 2 , thì ta lại chuyển sang xét v 3 , Do đồ thị là không có chu trình nên sau một số hữu hạn lần chuyển nh vậy ta phải đi đến đỉnh không có cung đi vào.

 Thuật toán đợc xây dựng dựa trên ý tởng rất đơn giản sau: Thoạt tiên, tìm các đỉnh có bán bậc vào bằng 0 Rõ ràng ta có thể đánh

số chúng theo một thứ tự tuỳ ý bắt đầu từ 1 Tiếp theo, loại bỏ khỏi đồ thị những đỉnh đã đợc đánh số cùng các cung đi ra khỏi chúng, ta thu đợc đồ thị mới cũng không có chu trình, và thủ tục

đợc lặp lại với đồ thị mới này Quá trình đó sẽ đợc tiếp tục cho

đến khi tất cả các đỉnh của đồ thị đợc đánh số.

Trang 42

Thuật toỏn đỏnh số đỉnh

Đầu vào: Đồ thị có hớng G=(V,E) với n đỉnh

không chứa chu trình đợc cho bởi danh sách kề Ke(v), vV.

Đầu ra: Với mỗi đỉnh vV chỉ số NR [v] thoả mãn: Với mọi cung (u, v) của đồ thị ta

đều có NR[u] < NR[v].

Trang 43

Thuật toán đánh số đỉnh

procedure Numbering;

begin

for v  V do Vao[v] := 0;

for u  V do (* TÝnh Vao[v] = b¸n bËc vµo cña v *)

for v  Ke(u) do Vao[v] := Vao[v] + 1 ; QUEUE :=  ;

for v  V do

if Vao[v] = 0 then QUEUE  v ; num := 0;

while QUEUE   do begin

u  QUEUE ; num := num + 1 ; NR[u] := num ; for v  Ke(u) do begin

Trang 44

Thuật toỏn đỏnh số đỉnh

 Rõ ràng trong bớc khởi tạo ta phải duyệt qua tất cả các cung của đồ thị khi tính bán bậc vào của các đỉnh, vì

vậy ở đó ta tốn cỡ O(m) phép toán, trong đó m là số

cung của đồ thị Tiếp theo, mỗi lần đánh số một đỉnh,

để thực hiện việc loại bỏ đỉnh đã đánh số cùng với các cung đi ra khỏi nó, chúng ta lại duyệt qua tất cả các cung này Suy ra để đánh số tất cả các đỉnh của đồ thị chúng ta sẽ phải duyệt qua tất cả các cung của đồ thị một lần nữa.

Vậy độ phức tạp của thuật toán là O(m).

Trang 45

Thuật toỏn tỡm đđnn trờn đồ thị khụng cú chu trỡnh

 Do có thuật toán đánh số trên, nên khi xét đồ thị không có chu trình ta có thể giả thiết là các đỉnh của nó đợc đánh số sao cho mỗi cung chỉ đi từ đỉnh có chỉ số nhỏ đến đỉnh có chỉ số lớn hơn.

Thuật toán tìm đờng đi ngắn nhất từ đỉnh nguồn v [1] đến tất

cả các đỉnh còn lại trênđồ thị không có chu trình

Đầu vào: Đồ thị G=(V, E), trong đó V={ v[1], v[2], , v[n] }.

Đối với mỗi cung (v[i], v[j]) E, ta có i < j.

Đồ thị đợc cho bởi danh sách kề Ke(v) , v V.

Đầu ra: Khoảng cách từ v[1] đến tất cả các đỉnh còn lại

đợc ghi trong mảng d[v[i]], i = 2, 3, , n

Trang 46

Thuật toỏn tỡm đđnn trờn đồ thị khụng cú chu trỡnh

Độ phức tạp tính toán của thuật toán là O(m), do mỗi

cung của đồ thị phải xét qua đúng một lần.

Trang 47

Cần tìm đường đi ngắn nhất từ s đến tất cả các đỉnh đạt đến được từ nó

Trang 53

Kết quả: Cây đường đi ngắn nhất từ s thể hiện bởi

các cung màu đỏ

Trang 54

Ứng dụng: PERT

 Xây dựng phơng pháp giải bài toán điều khiển việc

thực hiện những dự án lớn, gọi tắt là PERT (Project

Evaluation and Review Technique) hay CDM (Critical path Method).

Việc thi công một công trình lớn đợc chia ra làm n công đoạn, đánh số từ 1 đến n Có một số công đoạn

mà việc thực hiện nó chỉ đợc tiến hành sau khi một số công đoạn nào đó đã hoàn thành Đối với mỗi công

đoạn i biết t[i] là thời gian cần thiết để hoàn thành nó (i

Trang 55

Ứng dụng: PERT

Các dữ liệu với n = 8 đợc cho trong bảng sau đây

Cụng đoạn t[i] Cỏc cụng đoạn phải

Trang 56

Ứng dụng: PERT

Bài toán PERT: Giả sử thời điểm bắt đầu tiến hành thi công công trình là 0 Hãy tìm tiến độ thi công công trình (chỉ rõ mỗi công đoạn phải đợc bắt đầu thc hiện vào thời

điểm nào) để cho công trình đợc hoàn thành xong trong thời điểm sớm nhất có thể đợc.

Ta có thể xây dựng đồ thị có hớng n đỉnh biểu diễn ràng buộc

về trình tự thực hiệc các công việc nh sau:

• Mỗi đỉnh của đồ thị tơng ứng với một công việc.

• Nếu công việc i phải đợc thực hiện trớc công đoạn j thì trên

đồ thị có cung (i,j), trọng số trên cung này đợc gán bằng t[i]

Trang 57

Thuật toỏn PERT

Thêm vào đồ thị 2 đỉnh 0 và n+1 tơng ứng với hai sự kiện đặc

biệt:

đỉnh số 0 tơng ứng với công đoạn Lễ khởi công, nó phải đợc

thực hiện trớc tất cả các công đoạn khác, và

công trình, nó phải thực hiện sau tất cả các công đoạn,

với t[0] = t[n+1] = 0 (trên thực tế chỉ cần nối đỉnh 0 với tất cả

các đỉnh có bán bậc vào bằng 0 và nối tất cả các đỉnh có bán

bậc ra bằng 0 với đỉnh n+1).

Gọi đồ thị thu đợc là G.

 Rõ ràng bài toán đặt ra dẫn về bài toán tìm đờng đi dài nhất từ

đỉnh 0 đến tất cả các đỉnh còn lại trên đồ thị G.

Trang 58

Thuật toỏn PERT

Do đồ thị G không chứa chu trình, nên để giải bài toán

đặt ra có thể áp dụng thuật toán Critical_Path trong đó

chỉ cần đổi toán tử min thành toán tử max.

Kết thúc thuật toán, ta thu đợc d[v] là độ dài đờng đi dài nhất từ đỉnh 0 đến đỉnh v.

Khi đó d[v] cho ta thời điểm sớm nhất có thể bắt đầu

thực hiện công đoạn v, nói riêng d[n+1] là thời điểm

sớm nhất có thể cắt băng khánh thành, tức là thời điểm sớm nhất có thể hoàn thành toàn bộ công trình.

Trang 59

PERT: Ví dụ minh hoạ

 Qui bài toán PERT về tìm đường đi dài nhất trên đồ thị không có chu trình

30

30 80

80

15 0

15

4 45

Trang 60

Nội dung

5.1 Bài toán đường đi ngắn nhất (ĐĐNN)

5.2 Tính chất của ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường đi ngắn nhất trong đồ thị không có chu trình

5.6 Thuật toán Floyd-Warshal

Trang 61

ĐƯỜNG ĐI NGẮN NHẤT GIỮA MỌI CẶP ĐỈNH

All-Pairs Shortest Paths

Trang 62

Đường đi ngắn nhất giữa mọi cặp đỉnh

đối với mỗi cặp đỉnh u, v trong V, tìm đường đi ngắn nhất từ u đến v

Đầu ra ma trận : phần tử ở dòng u cột v là độ dài đường

đi ngắn nhất từ u đến v.

Cho phép có trọng số âm

Giả thiết: Đồ thị không có chu trình âm

Đầu vào: ma trận trọng số

Trang 64

4 - 1- 5

Đầu ra

= – 4 + 6 – 5 + 4

Trang 65

Thuật toán Floyd-Warshall

d = độ dài đường đi ngắn nhất từ i đến j sử dụng các đỉnh trung gian

Trang 67

Thuật toán Floyd-Warshall

Trang 68

Xây dựng đường đi ngắn nhất

Trang 69

NIL NIL NIL 3

4 NIL NIL NIL

Trang 72

Thuật toán Floyd-Warshall

Trang 73

Robert W Floyd, 1936-2001

 Born in New York, Floyd finished school at age 14 At the University of Chicago, he received a Bachelor's degree in liberal arts in 1953 (when still only 17) and a second Bachelor's degree in physics in 1958.

 Becoming a computer operator in the early 1960s, he began publishing many noteworthy papers and was appointed an associate professor at Carnegie Mellon University by the time he was 27 and became a full professor at Stanford University six years later He obtained this position without a Ph.D.

 Turing Award, 1978.

Trang 74

on a sailboat in the Indian Ocean or in a Greek lemon orchard.

Trang 75

Questions?

Trang 76

Bao đóng truyền ứng

(Transitive Closure)

Bao đóng truyền ứng của đồ thị G = (V, E) là G* = (V, E*) sao cho

3

2 5

Trang 77

Thuật toán Floyd-Warshall

Ma trận xuất phát là ma trận kề

Thuật toán Floyd-Warshall thay

min boolean OR + boolean AND

i

y x

j

j i

Nếu

Trang 78

Questions?

Ngày đăng: 24/01/2018, 18:51

TỪ KHÓA LIÊN QUAN

w