1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

37 760 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 37
Dung lượng 3,54 MB

Nội dung

MỤC LỤC Chương 24: Đường đi ngắn nhất nguồn đơn Tổng quan Một người lái xe ô tô muốn tìm thấy đường đi ngắn nhất từ Chicago đến Boston. Căn cứ vào bản đồ đường lớn của Mỹ trên khoảng cách giữa mỗi cặp giao nhau liền kề được đánh dấu, chúng ta có thể xác định đường đi ngắn nhất này như thế nào? Một cách khả dĩ là đếm tất cả các đường đi từ Chicago đến Boston, lấy tổng những khoảng cách trên mỗi tuyến đường, và lựa chọn đường đi ngắn nhất. Nó dễ dàng để nhìn thấy, tuy nhiên, chúng ta không thực hiện được nếu đường đi chứa những chu trình, có hàng triệu trong số những khả năng, nhưng hầu hết trong số đó hoàn toàn là không cần phải xem xét. Chẳng hạn, một tuyến đường từ Chicago qua Houston đến Boston rõ ràng là một sự lựa chọn không tốt bởi vì Houston cách con đường đó khoảng một nghìn dặm. Trong chương này và Chương 25 sẽ trình bày cách để giải quyết hiệu quả những vấn đề này. Trong vấn đề về đường đi ngắn nhất, chúng tôi đưa ra một đồ thị có hướng có trọng số G = (V, E ), với hàm trọng số w: E → R ánh xạ đến giá trị thực. Độ dài của đường đi p = v 0 , v 1 , , v k là tổng độ dài của những cạnh thành phần : Ta xác định độ dài đường đi ngắn nhất từ u tới v bởi công thức: Một đường đi ngắn nhất từ đỉnh u đến đỉnh v được định nghĩa như đường đi p với trọng số w(p)= δ(u, v). Trong ví dụ về đường đi từ Chicago tới Boston, chúng ta có thể mô hình đường đi như một đồ thị: những điểm giao nhau được biểu diễn bằng các đỉnh, đoạn đường giữa những điểm giao nhau được biểu diễn bằng các cạnh và khoảng cách giữa các con đường được biểu diễn bằng trọng số ứng với cạnh đó. Mục đích của chúng tìm đường đi ngắn nhất từ các giao lộ ở Chicago (đường Clart và đại lộ Addison) đến Boston (đại lộ Brookline và đường Yawkey). Có thể gán những trọng số khác nhau cho các cạnh để biểu diễn về thời gian, chi phí, tiền phạt, tổn thất hay một đại lượng khác được tích lũy trong suốt đường đi có thể đạt đến chi phí cực tiểu. Giải thuật tìm kiếm chiều rộng ở Mục 22.2 là một giải thuật tìm đường đi ngắn nhất mà làm việc trên những đồ thị không có trọng số nghĩa là những đồ thị mà trong đó mỗi 2 cạnh có thể được xem là một đơn vị. Bởi vì nhiều khái niệm từ sự tìm kiếm theo chiều rộng xuất hiện trong việc tìm đường đi ngắn nhất của đồ thị có trọng số, người đọc nên xem lại Mục 22.2 trước khi tiếp tục. Bổ đề 24.1: Cho một đồ thị có hướng có trọng số G = (V, E) với trọng số w : E → R, giả sử p= (v1, v2, , vk) là một đường đi ngắn nhất từ đỉnh v 1 đến đỉnh v k . Cho i và j bất kì sao cho 1 ≤ i ≤ j ≤ k , p ij = ( v i , v i+1 , , v j ) là đường đi của p từ đỉnh v i đến đỉnh v j . Lúc đó p ij là một đường đi ngắn nhất từ v i đến v j . Chứng minh: Nếu chúng ta phân chia đường đi p ra thành v 1 ij p → v i ij p → v j ij p → v k , thì có w(p) = w(p 1i ) + w(p ij ) + w(p jk ). Bây giờ, giả thiết rằng có một đường đi , ij p từ vi đến vj với trọng số , ij ij ( ) w( )w p p< . Thì, v 1 ij p → v i , ij p → v j ij p → v k là một đường đi từ v1 đến vk với trọng số là w(p 1i ) + w( , ij p ) + w(p jk ) bé hơn w(p), mâu thuẫn với giả thiết p là một đường đi ngắn nhất từ v1 đến vk. Cạnh có trọng số âm Trong một số trường hợp của đường đi ngắn nhất nguồn đơn, một số cạnh có thể có trọng số âm. Nếu đồ thị G = (V, E) chứa những chu trình không âm mà từ đỉnh nguồn có thể đi đến được thì mọi đỉnh v thuộc V độ dài đường đi ngắn nhất δ(s, v) xácđịnh được dù nó có một giá trị âm. Tuy nhiên, nếu có một chu trình âm mà từ đỉnh nguồn có thể đi đến được thì đường đi ngắn nhất không được xác định. Không có đường đi nào từ s tới một đỉnh trên chu trình có thể là đường đi ngắn nhất- một đường đi có trọng số nhỏ hơn có thể luôn luôn được tìm thấy như là đường dẫn " ngắn nhất " khi đi qua chu trình trọng số âm. Nếu có một chu trình trọng số âm trên đường đi nào đó từ s tới v, chúng ta xác định được δ(s,v) = - ∞ . Hình 24.1: Minh họa trọng số âm và chu trình âm của đường đi ngắn nhất. Bởi vì có chỉ có một đường đi từ s tới a (đường đi (s, a)), δ(s,a) = w(s, a) = 3. Tương tự, có chỉ có một đường đi từ s tới b, và vì vậy δ(s, b) = w(s,a) + w(a, b) = 3+ (- 4)= -1. Có rất nhiều đường đi từ s tới c: (s,c), (s,c,d,c), (s,c,d,c,d,c), … Vì chu trình (c, d, c) có trọng số 6+ (- 3)= 3> 0, đường (dẫn) ngắn nhất từ s tới c là (s,c) với trọng số δ(s,c) =5. Tương tự, ngắn nhất từ s tới d là (s,c,d) với trọng số δ(s, d) = w(s,c) + w(c,d) = 11. Tương tự, có rất nhiều đường đi từ s tới e: (s,e), (s,e,f,e), (s,e,f,e,f,e) Từ chu trình (e,f,e) có trọng số 3+ (-6)=-3< 0, tuy nhiên đó không phải là đường đi ngắn nhất từ s tới e. Bằng việc đi qua chu trình âm (e,f,e) tùy ý nhiều lần, chúng ta có thể tìm thấy những đường đi từ s tới e với trọng số âm lớn và vì vậy δ(s,e)= - ∞ . Tương tự δ(s,f)= - ∞ .Vì từ g có đường đi từ f , chúng ta có thể cũng tìm thấy những đường đi trọng số âm lớn từ s tới g và δ(s,g)= - ∞ . Đỉnh h, i và j lập thành một chu trình âm. Tuy nhiên, chúng không có đường đi từ s và vì vậy δ(s,h)=δ(s,i)=δ(s,j)= ∞ . 3 Hình 24.1: Minh họa các cạnh có trọng số âm của đồ thị có hướng. Xem mỗi đỉnh là độ dài đường đi ngắn nhất từ nguồn s. Bởi vì đỉnh e và f lập thành một chu trình âm có đường đi từ nguồn s, chúng có độ dài đường ngắn nhất là - ∞ . Vì đỉnh g có đường đi được từ đỉnh a nên cũng có độ dài đường đi nhắn nhất là - ∞ . Các đỉnh như h, i và j không có đường đi từ s, và vì thế độ dài đường đi ngắn nhất của là ∞ mặc dù chúng nằm trên một chu trình âm. Một số thuật toán đường đi ngắn nhất như thuật toán Dijkstra thực hiện trên đồ thị mà mọi cạnh đều có trọng số dương, như trong ví dụ ở bảng đồ đường đi. Giải thuật Bellman- Ford, cho phép những cạnh có trọng số âm trong đồ thị và kết quả trả về đúng với đồ thi chu trình không âm có đường đi từ nguồn. Điển hình, nếu có một chu trình âm, giải thuật có thể phát hiện và báo cáo sự tồn tại của nó. Chu trình: Một đường đi ngắn nhất có thể chứa một chu trình? Như chúng ta vừa mới nhìn thấy, nó không thể chứa chu trình trọng số âm. Mà cũng không thể chứa một chu trình dương khi loại bỏ chu trình từ đường đi kết quả là có một đường đi với cùng nguồn, đỉnh đến và một trọng số thấp hơn. Điều đó có nghĩa là nếu p = ( v 0 , v 1 , , v k ) là một đường đi và c = (v i , v i+1 , , v j ) là một chu trình dương tính trên đường đi này (v i = v j và w(c) >0) thì đường dẫn p’=(v0, v1, ,vi, vj +1 , vj +2 , , vk) có trọng số w(p ')= w(p) - w(c) < w(p), và vì vậy p không thể là một đường đi ngắn nhất từ v0 đến vk. Những lá chỉ có chu trình trọng số 0. Chúng ta có thể loại bỏ chu trình có trọng số 0 từ bất kì đường đi nào khác cùng trọng số. Như vậy, nếu có một đường đi ngắn nhất từ một đỉnh nguồn s tới một đỉnh v mà chứa một chu kì trọng số 0, thì có đường đi ngắn nhất khác từ s tới v không có chu trình này. Từ bất kỳ đường đi không có chu kỳ nào trong một đồ thị G = (V, E) chứa nhiều nhất |V| đỉnh phân biệt, nó cũng chứa nhiều nhất |V| - 1 cạnh. Như vậy, chúng ta có thể hạn chế số đường đi ngắn nhất tối đa qua |V| - 1 cạnh. Biểu diễn đường dẫn ngắn nhất Chúng ta thường muốn tính toán không chỉ đường đi ngắn nhất mà còn các đỉnh trên những đường ngắn nhất. Biểu diễn những đường đi ngắn nhất tương tự như sử dụng duyệt cây theo chiều rộng Mục 22.2. Cho một đồ thị G = (V, E), gán mỗi đỉnh v thuộc V một đỉnh liền trước π[v] là đỉnh khác hoặc bằng Nil. Những giải thuật đường đi ngắn nhất trong chương này đặt những thuộc tính π sao cho dãy các đỉnh liền trước từ vector v trở lui là đường đi ngắn nhất từ s tới u. Như vậy cho một vector v với π[v] ≠ Nil. Thủ tục PRINT-PATH(G,s,v) ở mục 22.2 có thể in ra đường đi ngắn nhất từ s tới v. Tuy nhiên, trong thời gian sự thực hiện giải thuật đường đi ngắn nhất, những giá trị π không cần phải cho biết những đường đi ngắn nhất. Như trong duyệt theo chiều rộng, ta sẽ quan tâm đến đỉnh trước đồ thị con Gπ = (Vπ, Eπ) bởi giá trị π. Tương tự, ta xác định nghĩa tập hợp đỉnh Vπ là tập hợp đỉnh của đồ thị G mà đỉnh liền trước khác Nil hợp với đỉnh nguồn s. Vπ = {v ∈ V :π[v] ≠ NIL} U {s} . 4 Tập hợp cạnh có hướng E là cạnh cho bởi có giá trị π ở đỉnh trong tập V. Eπ = {(π[v], v) ∈ E : v ∈ Vπ - {s}} . Chúng ta có thể chứng tỏ giá trị π được tạo ra bằng các giải thuật trong chương này có thuộc tính ở đỉnh cuối G là một “cây đường đi ngắn nhất“. Một gốc của cây chứa một đường đi ngắn nhất từ nguồn s tới mọi đỉnh có đường đi được từ s. Một cây đường đi ngắn nhất giống như duyệt theo chiều rộng ở mục 22.2, nhưng nó chứa đường đi ngắn nhất từ nguồn xác định trong giới hạn của những trọng số các cạnh thay thế cho số lượng các cạnh. Dễ thấy, giả sử G=(V,E) là một đồ thị trọng số, có hướng với trọng số w : E → R , cho G chứa chu trình không âm từ đỉnh nguồn s ∈ V, vì thế đường đi ngắn nhất có thể dễ dàng xác định. Một cây ngắn nhất ở s là một đồ thị con có hướng G=(V,E) , V’ chứa V sao cho: 1. V’ là tập hợp các đỉnh có đường đi từ s trong đồ thị G 2. G’ hình thành một cây có gốc là s và 3. Với mọi v ∈ V ', đường đi duy nhất từ s tới v trong G ' là một đường đi ngắn nhất từ s tới v trong G. Những đường đi ngắn nhất không tất yếu duy nhất, và cũng không có duy nhất những cây những đường đi ngắn nhất.Ví dụ, Hình 24.2 chỉ ra một đồ thị có trọng số, định hướng và hai cây đường đi ngắn nhất với cùng gốc. Hình 24.2: Một đồ thị có trọng số, có hướng với những độ dài đường đi ngắn nhất từ nguồn s. (b)Những cạnh màu đậm thành lập một cây đường đi ngắn nhất mà có gốc tại nguồn s . (c)Những cây đường đi ngắn nhất khác với cùng gốc. Tính giảm bớt(Relaxation) Gỉai thuật trong chương này dùng thuộc tính giảm bớt. Với mọi đỉnh v thuộc V, chúng ta xây dựng d[v] là một cận dưới trên độ dài đường đi ngắn nhất từ nguồn s đến v. Ta gọi d[v] là một ước lượng đường đi ngắn nhất. Ta khởi tạo một ước lượng đường đi ngắn nhất và đỉnh trước bởi thủ tục với chi phí Θ(V) INITIALIZE-SINGLE-SOURCE(G, s) 1 for each vertex v ∈ V[G] 2 do d[v] ← ∞ 3 π[v] ← NIL 4 d[s] ← 0 Sau khi khởi tạo π[v] = NIL cho tất cả các đỉnh v ∈ V, d[s] = 0, và d[v] = ∞ cho v ∈ V - {s}. Qúa trình giảm bớt 1 cạnh (u,v) bao gồm việc kiểm tra xem chúng ta có thể tận dụng 5 đường đi ngắn nhất đến v đã tìm thấy sau khi đi qua u và nếu cập nhật d[v] và π[v]. Một bước giảm bớt có thể giảm đi giá trị của đường đi ngắn nhất d[v] và cập nhật đỉnh trước của v trong π[v]. Mã nguồn thực hiện một bước giảm bớt trên cạnh (u,v) Hình 24.3: Giảm bớt cạnh (u,v) với trọng số w(u,v) =2. Ước lượng đường đi ngắn nhất của mỗi đỉnh được xem trong đỉnh . (a)Vì d[v] > d[u] + w(u, v) ưu tiên để giảm bớt, giá trị d[v] giảm.(b)Ở đây d[v] ≤ d[u] + w(u, v) trước bước giảm bớt và vì vậy d[v] không thay đổi bởi sự giảm bớt. RELAX(u, v, w) 1 if d[v] > d[u] + w(u, v) 2 then d[v] ← d[u] + w(u, v) 3 π[v] ← u Hình 24.3: Cho thấy 2 ví dụ của việc giảm bớt, một ước lượng đường đi ngắn nhất giảm và một ước lượng không thay đổi. Mỗi giải thuật trong chương này gọi INITIALIZE-SINGLE-SOURCE và quá trình giảm bớt cách cạnh lặp lại. Ngoài ra, quá trình giảm bớt chỉ có nghĩa khi có ước lượng đường đi ngắn nhất và đỉnh trước thay đổi. Trong giải thuật Dijkstra và giải thuật đường đi ngắn nhất cho đồ thị có hướng không có chu trình, mỗi cạnh giảm bớt chính xác một lần. Trong giải thuật Bellman-Ford, mỗi cạnh bị giảm nhiều lần. Thuộc tính của đường đi ngắn nhất và sự giảm bớt Để chứng minh tính đúng của giải thuật trong chương này, chúng ta sẽ phân biệt thuộc tính đường đi ngắn nhất và sự giảm bớt. Chúng ta phát biểu những thuộc tính này ở đây, và Mục 24.5 chứng minh điều này. Các bạn tham khảo mỗi thuộc tính được phát biểu ở đây bao gồm bổ đề thích hợp hay số hệ quả từ Mục 24.5. Sau các thuộc tính này với chỉ dẫn ước lượng đến đường đi ngắn nhất hoặc đồ thị con đỉnh trước, thừa nhận rằng đồ thị khởi tạo với một lời gọi INITIALIZE-SINGLE-SOURCE(G, s) và chỉ có trường hợp ước lượng đường đi ngắn nhất và đồ thị con đỉnh trước thay đổi bởi chuỗi các bước giảm bớt. Tam giác không đều (Bổ đề 24.10) • Cho cạnh bất kì (u,v) thuộc E, chúng ta có δ(s, v) ≤ δ(s, u) + w(u, v). Thuộc tính cận trên (Bổ đề 24.11) • Chúng ta luôn có d[v] ≥ δ(s, v) cho tất cả đinh v ∈ V , và khi d[V] đạt được giá trị δ(s, v), nó chưa bao giờ thay đổi. Thuộc tính không đường (dẫn) (Hệ quả 24.12) • Nếu không có đường (dẫn) từ s tới v, thì chúng ta luôn có d[v] = δ(s, v) = ∞. Thuộc tính Quy tụ (Bổ đề 24.14) 6 • Nếu s ~ u > v là một đường đi ngắn nhất trong G cho các đỉnh u,v ∈ V và nếu d[u]=δ(s, u) trong lúc này ưu tiên giảm đỉnh (u,v) thì sau đó d[v] = δ(s, v) Thuộc tính giảm bớt(Bổ đề 24.14) • Nếu P = v 0 , v 1 , , v k là một đường đi ngắn nhất từ s = v 0 tới v k , và những cạnh của p được giảm bớt theo thứ tự (v 0 , v 1 ), (v 1 , v 2 ), , (v k-1 , v k ), thì d[v k ] = δ(s, v k ). Thuộc tính này giữ không quan tâm đến mọi bước giảm bớt, dù chúng được trộn lẫn với sự giảm bớt của các cạnh của p. Thuộc tính đồ thị con đỉnh trước (Bổ đề 24.17) • Mỗi khi d[v] = δ(s, v), mọi đỉnh v ∈ V, đồ thị con đỉnh trước là một cái cây đường đi ngắn nhất có gốc tại s 7 Nội dung chính của chương: Mục24.1 : Giới thiệu giải thuật Bellman-Ford để giải quyết đường đi ngắn nhất nguồn đơn trong trường hợp tổng quát mà trong đó các cạnh có thể có trọng số âm. Giải thuật Bellman-Ford chú ý trong tính đơn giản và có khả năng phát hiện ra một chu trình trọng số âm có đường đi được từ nguồn. Mục 24.2 : Cho một giải thuật tuyến tính cho việc tính toán đường đi ngăn nhất từ nguồn đơn trong đồ thị có hướng không có chu trình. Mục 24.3 : Tổng quan về giải thuật Dijkstra, giải thuật này có một thời gian hoạt động thấp hơn so với Bellman-Ford nhưng yêu cầu những trọng số cạnh phải không âm Mục 24.4: Giải thuật Bellman-Ford có thể được dùng để giải quyết một trường hợp đặc biệt của " Quy hoạch tuyến tính." Mục 24.5: Chứng minh những thuộc tính đường đi và sự giảm bớt được phát biểu ở trên. Yêu cầu một số quy ước để làm số học với những sự vô hạn. Chúng ta sẽ giả thiết điều đó cho bất kỳ số thực nào a ≠ -∞, ta có a + ∞ = ∞ + a = ∞. Đồng thời, để chứng minh có chu trình trọng số âm , chúng ta sẽ giả thiết điều đó cho bất kỳ số thực nào a ≠ ∞, ta có a + (-∞) = (-∞) + a = -∞. Tất cả các giải thuật trong chương này giả thiết đồ hình có hướng G được lưu trong danh sách kề liền. Đồng thời, lưu mỗi cạnh với trọng số của nó vì thế mà khi chúng ta xét danh sách kề liền, chúng ta có thể xác định trọng số các cạnh với chi phí O(1) 24.1 Thuật toán Bellman-Ford Giải quyết bài toán tìm đường đi ngắn nhất trong trường hợp tổng quát, trong đó các cạnh có thể có trọng số âm. Cho đồ thị có hướng có trọng số G=(V,E) với đỉnh nguồn s và hàm trọng số w : E → R , thuật toán trả về giá trị kiểu Boolean cho biết từ đỉnh nguồn có thể đến được một trình âm hay không. Nếu có thì thuật toán sẽ kết thúc mà không có lời giải. Còn nếu không sẽ kết xuất tất cả các con đường ngắn nhất cùng với chiều dài của của chúng. Thuật toán sử dụng kỹ thuật giảm bớt(Relaxation) bằng cách ngày càng giảm chiều dài của con đường ngắn nhất từ đỉnh s đến các đỉnh v thuộc V cho đến khi đạt được giá trị ngắn nhất δ(s, v). Thuật toán trả về giá trị TRUE khi và chỉ khi từ đỉnh gốc không đi đến được chu trình âm. BELLMAN-FORD(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G,s) 2 for i ← 1 to |V[G]| - 1 3 do for each edge (u, v) ∈ E[G] 4 do RELAX(u, v, w) 5 for each edge (u, v) ∈ E[G] 6 do if d[v] > d[u] + w(u, v) 7 then return FALSE 8 return TRUE Hình 24.4 thể hiện thuật toán qua 5 đỉnh. Sau khi thực hiện phép khởi tạo thông thường ở dòng 1, thuật toán thực hiên /V/-1 bước qua tất cả các cạnh trong đồ thị. Mỗi bước là mỗi phép lặp của vòng lặp for từ dòng 2 đến dòng 4 và và gồm các cạnh bớt đi trong đồ thị. Hình b đến e cho thấy trạng thái của thuật toán sau mỗi bước. Sau /V/ 8 -1 bước, dòng 5-8 thuật toán sẽ tiến hành kiểm tra chu trình âm và trả vềgiá trị thích hợp. Thuật tóan Bellman có chi phí là O(VE) , khởi tạo tốn chi phí Θ (V), từng bước từ dòng 2-4 tốn Θ (E), vòng lặp từ dong 5-7 tốn O(E). Để chứng minh tính chính xác giải thuật Bellman- Ford, chúng ta bắt đầu bằng việc chỉ ra rằng nếu không có những chu trình âm, giải thuật tính toán những đường đi ngắn nhất đúng mọi đỉnh có đường đi được từ nguồn. Bổ đề 24.1 Cho G = (V, E) là một đồ thị có trọng số có hướng với đỉnh nguồn s và hàm trọng số w : E → R, và giả thiết G chứa những chu trình không âm mà có mà có đường đi được từ S. Sau |V| - 1 bước lặp của vòng lặp for ở dòng 2-4 của hàm BELLMAN-FORD, ta có d[v] = δ(s, v) cho tất cả đinh v mà có thể với tới được từ s. Chứng minh: Chúng ta chứng tỏ bằng thuộc tính giảm bớt. Xem đỉnh v có đường đi được từ s và giả sử p = v 0 , v 1 , , v k , nếu v 0 = s and v k = v , không tồn tại chu trình đường đi ngắn nhất từ s tới v. Đường đi p có nhiều nhất là /V/-1 cạnh, nên k ≤ |V| - 1. Sau /V/ -1 bước lăp của vòng lặp for ở dòng 2-4 giảm bớt tất cả /E/ cạnh. Trong số các cạnh giảm đi trong vòng lặp for i=1,2,… k là (v i-1 , v i ). Bằng thuộc tính giảm bớt d[v] = d[v k ] = δ(s, v k ) = δ(s, v). Hệ quả 24.3 Giả sử G = (V, E) là một đồ thị có trọng số có hướng với đỉnh nguồn s và hàm trọng số w : E → R thì với mọi đỉnh v thuộc V có một đường đi từ s đến v khi và chỉ khi d[v] < ∞ nếu nó liên tục trên G Định lý 24.4 (Tính đúng đắn của thuật toán Bellman-Ford) Bellman-Ford thực hiện trên đồ thị có trọng số có hướng G(V,E) với nguồn s và hàm trọng số w : E → R. Nếu G chứa chu trình không âm có đường đi từ s thì giải thuật trả về giá trị đúng, chúng ta có d[v] = δ(s, v) với mọi đỉnh v ∈ V, đỉnh liền trước là đồ thị con G π là một cây đường đi nhỏ nhất có gốc tại s. Nếu G chứa một chu trình âm có đường đi từ s thì thuật toán trả về giá trị False. Chứng minh: Gỉa thiết đồ thị G chứa những chu trình không âm mà có đường đi từ nguồn s. Trước tiên d[v] = δ(s, v)với mọi đỉnh v ∈ V . 9 Nếu đỉnh v có đường đi tới được từ s thì Bổ đề 24.2 chứng tỏ lập luận này. Nếu v không có đường đi được từ s thì phát biểu sau từ thuộc tính không có đường đi. Vậy, phát biểu được chứng minh. Thuộc tính đồ thị con cùng với phát biểu gợi ý rằng G π chính là cây đường đi ngắn nhất. Bây giờ ta dựa vào phát biểu đó để chứng tỏ rằng BELLMAN-FORD trả về giá trị TRUE. Cuối cùng, chúng ta có tất cả các cạnh (u, v) ∈ E d[v] = δ(s, v) ≤ δ(s, u) + w(u, v) (bởi bất đẳng thức tam giác) = d[u] + w(u, v), và không có trường hợp nào trong số kiểm tra ở dòng 6 trả về giá trị FALSE, vì vậy nó trả về giá trị TRUE. Giả thiết là đồ thị G chứa một chu trình trọng số âm có đường đi được từ s, giả sử chu trình này là c = v 0 , v 1 , , v k nếu v 0 = v k thì: Giả thiết thuật toán Bellman trả về giá trị là True là mâu thuẩn. Vì vậy. d[v i ] ≤ d[v i-1 ] + w(v i-1 , v i ) for i = 1, 2, , k Tổng các trọng lượng khác nhau xung quanh chu trình c cho ta Khi v 0 = v k , mỗi đỉnh trong c xuất hiện chính xác một lần trong phép tính tổng và Vì vậy Ngoài ra, trong hệ quả 24.3 d[v i ] hữu hạn trong for i = 1, 2, , k. Vì vậy Mâu thuẫn với sự (24.1). Chúng ta kết luận giải thuật Bellman trả về giá trị TRUE nếu đồ thị G chứa chu trình không âm mà từ đỉnh nguồn có thể đi đến được và trả về giá trị FALSE nếu ngược lại. 24.2 Đường đi ngắn nhất nguồn đơn trong đồ thị có hướng không có chu trình: Bằng việc giảm bớt các cạnh của một đồ thị có hướng không có chu trình(directed acyclic graph) G(V,E) gọi là dag mà các đỉnh sắp xếp tô pô, chúng ta có thể tính đường đi ngắn 10 [...]... R[ik-1,ik] R[ik,i1] > 1 30 Phân tích thời gian chạy thuật toán của bạn b Cho một thuật toán hiệu quả để in ra một chuỗi nếu nó tồn tại Phân tích thời gian chạy của thuật toán Bài toán 24-4 : Thuật toán chia tỉ lệ của Gabow cho những đường đi ngắn nhất nguồn đơn Một thuật toán chia tỉ lệ giả quyết một bài toán bằng cách đầu tiên là xét chỉ bit thứ tự cao nhất của mỗi giá trị đầu vào thích hợp ( như là một... được thêm vào s và tìm ra sự mâu thuẫn là d[u] = δ(s, u) khi đó bằng cách kiểm tra đường đi ngắn nhất từ s tới u Chúng ta phải có u ≠s bởi vì s là đỉnh đầu tiên thêm vào tập hợp S và d[s] = δ(s, s) = 0 Vì u ≠ s ta có S ≠ Ø khi u thêm vào S Có một số đường đi từ s tới u , mặt khác d[u] = δ(s, u) = ∞ bởi thuộc tính không có đường đi, trái với giả thiết Vì trong số đường đi, có đường đi ngắn nhất p từ... và thêm vào tập hợp S, do đó xây dựng biến (Lần đầu qua vòng lặp này u= s.) Vậy đỉnh u có ước lượng đường đi ngắn nhất nhỏ nhất trong bất kỳ đỉnh nào trong V - S Rồi ở dòng 7-8 giảm bớt mỗi cạnh đi ra khỏi u, cập nhật ước lượng d[v] và đỉnh liền trước π[v] nếu đường đi ngắn nhất đến v có thể cải tiến khi đi qua u Dễ thấy các đỉnh đó không bao giờ được thêm vào Q sau dòng 3 và mỗi đỉnh lấy ra từ Q và. .. giải thuật Dijkstra Phương pháp Tham lam không phải thường xuyên đưa ra những kết quả tối ưu nói chung, trừ phi như định lý sau đây và kết quả của nó cho thấy thực ra giải thuật Dijkstra tính toán những đường đi ngắn nhất Kết quả là mỗi lần một đỉnh u thêm vào tập hợp S, chúng ta có d[u] = δ(s, u) Hình 24.7 Chứng minh Định lý 24.6 Tâp hợp S không rỗng khi thêm đỉnh u vào Một 13 đường đi ngắn nhất p... của thuật toán DIJKSTRA khi chạy trên G Bài tập 24.3-6 Cho G=(V,E) là độ thị có hướng có trọng số với hàm trọng số w: E →{ 1,2 W } cho vài số tự nhiên W Sửa thuật toán DIJKSTRA để tính những đường đi ngắn nhất từ một đỉnh đã cho s trong O(W V + E) thời gian Bài tập 24.3-7 Sửa thuật toán bài Bài tập 24.3-6 chạy trong O((V + E) lg W ) thời gian 16 24.4 Những ràng buộc hiệu và những đường đi ngắn nhất. .. như đã trình bày trong phần này, bài toán đường đi ngắn nhất nguồn đơn là một trường hợp đặc biệt của lập trình tuyến tính Các bài toán có tính chất như bài toán lập trình bao gồm bài toán đường đi ngắn nhất đơn cặp (bài tập 24.4-4) và bài toán luồng cực đại (bài tập 26.1-8) Thỉnh thoảng chúng ta không thật sự quan tâm về hàm mục tiêu, chúng ta chỉ muốn tìm một vài giải pháp khả thi, đó là, bất kỳ... s tới đỉnh v Thì p không có nhiều trọng số hơn bất kỳ đường nào khác từ s tới v Rõ ràng, đường p không có nhiều trọng số hơn đường đặc biệt mà có đường đi ngắn nhất từ đỉnh s tới đỉnh u và có cạnh (u,v) Những ảnh hưởng của việc giảm bớt trên những ước tính đường đi ngắn nhất Nhóm bổ đề tiếp theo mô tả làm cách nào để những ước tính đường đi ngắn nhất có ảnh hưởng khi chúng ta thực thi một chuỗi các... không có đường đi Bây giờ, giả sử rằng v có đường đi được từ s, đường đi ngắn nhất là p = v0, v1, , vk khi v0 = s và vk = v Bởi vì chúng ta xử lý đỉnh theo cách sắp xếp tô pô, các cạnh trong p được giảm bớt theo thứ tự (v0, v1), (v1, v2), , (vk-1, vk) Thuộc tính giảm bớt cho rằng d[vi] = δ(s, vi) ở đỉnh cuối cùng for i = 0, 1, , k Kết luận, dựa vào thuộc tính đồ thị con , Gπ là cây đường đi ngắn nhất Một... trọng số trung bình tối thiểu Bài toán này nghiên cứu một thuật toán hiệu quả cho việc tính toán µ * Giả sử không mất tính tổng quát mọi đỉnh v ∈ V có thể đi đến từ một đỉnh nguồn s ∈ V Cho δ (s,v) là trọng số của một đường đi ngắn nhất từ s tới v, và cho δ k(s,v) là trọng số của một đường đi ngắn nhất từ s tới v bao gồm một cách chính xác k cạnh Nếu không có đường đi từ s tới v với chính xác k cạnh,... ra rằng một đường đi trong G π từ nguồn s tới đỉnh v là duy nhất π Nếu có 2 đường p1( ) và p2( ) , mà x ≠ y, thì [z] =x và π [z] =y, là 1 đi u mâu thuẫn Chúng ta có thể chỉ ra rằng nếu, sau đó chúng ta thực hiện một chuỗi các bước giảm bớt, tất cả những đỉnh được gán những trọng số đường đi ngắn nhất đúng, thì đồ thị con của các đỉnh cha (predecessor subgraph) G π là một cây đường đi ngắn nhất Bổ đề . dài đường đi nhắn nhất là - ∞ . Các đỉnh như h, i và j không có đường đi từ s, và vì thế độ dài đường đi ngắn nhất của là ∞ mặc dù chúng nằm trên một chu trình âm. Một số thuật toán đường đi ngắn. 1 cạnh. Biểu diễn đường dẫn ngắn nhất Chúng ta thường muốn tính toán không chỉ đường đi ngắn nhất mà còn các đỉnh trên những đường ngắn nhất. Biểu diễn những đường đi ngắn nhất tương tự như. có gốc là s và 3. Với mọi v ∈ V ', đường đi duy nhất từ s tới v trong G ' là một đường đi ngắn nhất từ s tới v trong G. Những đường đi ngắn nhất không tất yếu duy nhất, và cũng không

Ngày đăng: 11/04/2015, 22:48

TỪ KHÓA LIÊN QUAN

w