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 763 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

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

Nội dung

Độ dài của đường đi p = v0, v1, ..., vk 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 đỉ

Trang 1

MỤC LỤC

Trang 2

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 = v0, v1, , vk 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

Trang 3

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=

cho 1 ≤ i ≤ j ≤ k , pij = ( vi, vi+1, , vj ) là đường đi của p từ đỉnh vi đến đỉnh vj Lúc đó

pij là một đường đi ngắn nhất từ vi đến vj

Chứng minh:

ij p

→vi p,ij

→ vj →p ij vk

mâu thuẫn với giả thiết p là một đường đi ngắn nhất từ v1 đến vk

đ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ừ

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

Đỉ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à

Trang 4

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 = ( v0, v1, , vk ) là một đường đi và c = (vi, vi+1, , vj ) là

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

đỉnh nguồn s

Trang 5

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 →

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:

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

Trang 6

đườ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)

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.

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)

δ(s, v), nó chưa bao giờ thay đổi

Thuộc tính không đường (dẫn) (Hệ quả 24.12)

Thuộc tính Quy tụ (Bổ đề 24.14)

Trang 7

• 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)

được giảm bớt theo thứ tự (v0, v1), (v1, v2), , (vk-1, vk), thì d[vk] = δ(s, vk) 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)

ngắn nhất có gốc tại s

Trang 8

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

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/

Trang 9

-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 = v0, v1, , vk , nếu v0 = s and vk = 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

= δ(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

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ừ

Trang 10

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,

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)

ta

Vì vậy

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

Trang 11

nhất từ một nguồn đơn với chi phí Θ(V + E) Đường đi ngắn nhất luôn được xác định trong đồ thị dag

Thuật toán bắt đầu bằng việc sắp xếp hình học tô pô(xem ở mục 22.4) để phân loại tuyến tính trên các đỉnh Nếu có một đường đi từ u đến v thì u đến trước v trong sắp xếp hình học tôpô Các đỉnh ta chỉ qua một lần trong sắp xếp hình học tôpô Khi chúng ta xử lý mỗi đỉnh, chúng tôi giảm bớt từng cạnh đi ra khỏi đỉnh đó

DAG-SHORTEST-PATHS(G, w, s)

1 topologically sort the vertices of G

2 INITIALIZE-SINGLE-SOURCE(G, s)

3 for each vertex u, taken in topologically sorted order

Chi phí hoạt động của giải thuật này dễ dàng để phân tích Như trong Mục 22.4, sắp xếp tôpô dòng 1 có thể được thực hiện trong Θ(V + E) phép toán Gọi hàm ở dòng 2 tốn chi phí Θ(V) Có một bước lặp các đỉnh trong vòng lặp for ở dòng 3-5 Duyệt từng đỉnh, cạnh nào đi ra khỏi đỉnh đã được xác định 1 lần Vì vậy tổng bước lặp /E/ trong vòng lặp for tốn chi phí, (Ở đây chúng ta phân tích tổng hợp) Vì mỗi bước lặp trong vòng lặp for tốn chi phí , tổng chi phí là Θ(V + E), Đây là tuyến tính trong kích thức của một danh sách kề của đồ thị

Hình 24.5 Thể hiện giải thuật những đường đi ngắn nhất trong một đồ phi có hướng

không có chu trình Đỉnh được sắp xếp hình học tôpô từ trái sang phải Đỉnh nguồn là

S Những giá trị d ở các đỉnh, các cạnh biểu diễn giá trị π (a) Trường hợp trước vòng lặp đầu tiên của dòng 3-5 (b)- Trường hợp sau khi lặp ở dòng 3-5 Các đỉnh được bôi đen tiêp theo trong từng bước lặp đuợc dùng như u trong vòng lặp Những giá trị thấy ở phần ( G) Là những gía trị cuối cùng

Định lý sau đây cho thấy những thủ tục DAG-SHORTEST-PATHS tìm chính xác đường đi ngắn nhất

Định lý 24.5

Nếu một đồ thị có trọng số có hướng G=(V,E) có đỉnh nguồn s và không có chu trình thì

Trang 12

và đồ thị con Gπ đỉnh trược là cây đường đi ngắn nhất.

Chứng minh: Trước tiên, ta thấy d[v] = δ(s, v) với mọi đỉnh v∈V Nếu v không có đường đi được từ s thì d[v] = δ(s, v) = ∞ bởi thuộc tính không có đường đi

đượ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

Một ứng dụng hay của giải thuật mở rộng trong việc xác định đường đi trong phân tích

cạnh biểu hiện thời gian đòi hỏi để thực hiện từng công việc Nếu cạnh (u,v) nối với đỉnh

v và cạnh (v,x) là lá đỉnh v thì công việc (u,v) phải thực hiện trước công việc (v,x) Một đường đi tới hạn là đường đi dài nhất của đồ thị dag tương ứng với thời gian lâu nhất để thực hiện chuỗi công việc Trọng số của đường đi tới hạn là thấp hơn trong tổng số để thực hiện tất cả các công việc Chúng ta có thể tìm một đường đi tới hạn bằng một cách khác

Đổi dấu tất cả các trọng số của cạnh và thực hiện DAG-SHORTEST-PATHS

Hoặc Thực hiện DAG-SHORTEST-PATHS bằng cách thay đổi "∞" bởi "-∞" trong dòng 2 của DAG-SHORTEST-PATHS và ">" bởi "<" trong thủ tục RELAX

24.3 Giải thuật Dijkstra

Giải thuật Dijkstra giải quyết những vấn đề về đường đi ngắn nhất nguồn đơn trên một

đồ thị có trọng số, có hướng G = (V, E) cho trường hợp mà các cạnh có trọng số không

E Chúng ta sẽ thấy với một sự thực thi tốt, thời gian hoạt động của giải thuật của giải thuật Dijkstra thấp hơn giải thuật Bellman-Ford

Giải thuật Dijkstra xây dựng một tập đỉnh S chứa độ dài đường đi nhắn nhất từ đỉnh

lượng đường đi ngắn nhất, thêm đỉnh u vào tập S, bỏ qua tất cả các cạnh không chứa u Trong giải thuật sau, chúng ta sử dụng một hàng đợi ưu tiên cực tiểu các đỉnh Q, được gán bởi giá trị d

Trang 13

tiên cực tiểu Q để chứa mọi đỉnh trong V

Lúc này S= Ø, sau dòng 3 biến có giá trị True Mỗi lần thực hiện vòng lặp while của dòng 4-8, một đỉnh u được lấy ra từ Q = V – S 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à thêm vào S đúng 1 lần, vì vậy vòng lặp while ở dòng 4-8 lặp lại /V/ lần

Hình 24.6: Thực hiện giải thuật Dijkstra Nguồn S Là đỉnh cực trái, ước lượng giá trị

đường đi ngắn nhất xem trong các đỉnh, các cạnh bôi đen biểu diễn giá trị đỉnh trước Đỉnh bôi đen trong tập hợp S và đỉnh trắng trong hàng đợi ưu tiên cực tiểu Q=V-S, (a)Trường hợp trước bước lặp đầu tiên của vòng lặp While ở dòng 4-8 Đỉnh bôi đen

có giá trị d cực tiểu và được lựa chọn như đỉnh u ở dòng 5 (b)- Trường hợp sau mỗi bước lặp tiếp theo của vòng lặp while Đỉnh bôi đen trong từng phần được chọn như đỉnh u trong dòng 5 ở bước lặp sau Gía trị d và π thấy ở phần f là giá trị cuối cùng

Bởi vì giải thuật Dijkstra luôn chọn đỉnh "nhẹ nhất" hay "gần nhất nhất" trong V –S để thêm vào tập hợp S, nó sử dụng phương pháp tham lam

đã đọc chương đó để hiểu 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

Trang 14

đường đi ngắn nhất p từ đỉnh nguồn s đến đỉnh u có thể phân chia thành s -x -y -u khi y là đỉnh đầu tiên trong đường đi không thuộc S và x thuộc S đến y trước Đỉnh x và

y là hai đỉnh phân biệt nhưng chúng ta có thế cho s=x hoặc y=u Đường đi p2 có thể hoặc không thuộc tập hợp S

Định lý 24.6: (tính đúng đắn của giải thuật Dijkstra)

Giải thuật Dijkstra thực hiện trên một đồ thị có trọng số, có hướng G = (V, E) với hàm trọng số không âm w và nguồn s, hoàn thành với d[u] = δ(s, v) với mọi đỉnh u thuộc V Chứng minh: Chúng ta dùng biến lặp sau

δ(s, u), ta dựa vào thuộc tính cận trên để xem đẳng thức mỗi bước sau đó

Khởi tao: khởi tạo S = Ø, giá trị biến thông thường

Xây dựng: Chúng ta xem trong mỗi bước lặp d[u] = δ(s, u) cho đỉnh đã thêm vào tập

hợp S Kết quả của sự mâu thuẩn, cho u là đỉnh đầu tiên mà d[u] ≠ δ(s, u) khi nó đã thêm vào tập hợp S Chúng ta chú ý vào trường hợp bắt đầu của bước lặp ở vòng lặp while khi u đượ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ừ s tới u Ưu tiên thêm u vào S, đường đi p nối một đỉnh trong S là s đến một đỉnh trong V-S là u Ta coi đỉnh đầu

24.7 đường đi p có thể phân thành(đương đi p1 hoặc p2 có thể không có các cạnh) Chúng ta phát biểu rằng d[y] = δ(s, y) khi u đã thêm vào S Để chứng minh phát biểu

nó đã được thêm vào S , ta có d[x] = δ(s, x) khi x đã được thêm vào S Lúc này cạnh (x,y) được bỏ đi, phát biểu sau dựa vào thuộc tính hội tụ

Bây giờ chúng ta có thể dùng sự mâu thuẫn để chứng minh rằng d[u] = δ(s, u) Bởi vì y xuất hiện trước u trong đường đi ngắn nhất từ s tới u và tất cả các trọng số của cạnh không âm (đặc biệt là trong đường đi p2), chúng ta có δ(s, y) ≤ δ(s, u) và vì vậy

d[y] = δ(s, y)

≤ δ(s, u)

= d[u] (bởi thuộc tính cận trên)

Nhưng vì hai đỉnh u và y nằm trong V-S khi u được chon ở dòng 5, ta có d[u] ≤ d[y] Vì vậy có sự khác nhau của trong trong đảng thức:

Trang 15

số không âm w và nguồn s thì cuối cùng đỉnh trước đồ thị con Gπ là cây đường đi ngắn nhất có gốc tại đỉnh s.

Chứng minh:Trực tiếp từ Định lý 24.6 và thuộc tính đỉnh trước đồ thị con

Phân tích:

Tốc độ thực hiện của giải thuật Dijkstra như thế nào? Nó xây dựng hàng đợi ưu tiên

Q bằng cách gọi 3 hoạt động: INSERT(dòng 3), EXTRACT-MIN (dòng 5) DECREASE-KEY(trong RELAX được gọi ở dòng 8)INSERT gọi một đỉnh như là

sách kề Adj[v] được kiểm tra trong vòng lặp for ở dòng 7-8 một lần suốt tiến trình của giải thuật Khi tổng số cạnh trong danh sách kề là /E/ , có một tổng bước lặp /E/ của vòng lặp for và vì vậy tổng lớn nhất /E/ DECREASE-KEY(chúng ta đang dùng phân tích tổng hợp) Chi phí của giải thuật Dijkstra phụ thuộc vào hàng đợi ưu tiên cực tiểu chúng ta đã bổ sung như thế nào Xem xét trường hợp đầu tiên chúng ta duy trì hàng đợi

ưu tiên bằng cách lấy dễ dàng các đỉnh từ 1 đến /V/ Ta có thể lưu d[v] vào bảng ghi thứ

y của một mảng Mỗi hàm INSERT và DECREASE-KEY tốn chi phí O(1), mỗi EXTRACTMIN tốn chi phí O(V) (khi dúng ta duyệt bảng ghi mảng )tổng chi phí

trúc đống cực tiểu nhị phân(mô tả ở mục 6.5 một sự bổ sung quan trọng là các đỉnh trong đống phải với các đỉnh khác )Mỗi EXTRACT-MIN tốn chi phí O(lg V) Trước đó có /V/ hoạt động Lần này xây dựng một nhị phân cực tiểu là O(V) Mỗi DECREASE-KEY tốn chi phí O(lg V) , có lớn nhất là /E/ hoạt động Vì vậy tổng chi phí hoạt động là O((V + E) lg V) mà O(E lg V) nếu tất cả các đỉnh có đường đi được từ nguồn Chi phí này

Thự tế chúng ta có thể đặt được chi phí O(V lg V + E) bởi cải tiến hàng đợi ưu tiên với dãy Fibonacci(chương 20) Để lại cho mỗi hoạt động EXTRACT-MIN là O(lg V) và mỗi lần gọi DECREASE-KEY, có lớn nhất /E/, chỉ lấy O(1) Lịch sử đã phát triển Fibonacci làm sự thúc đẩy cho giải thuật Dijkstra là cổ điển gọi DECREASE-KEY hơn

là EXTRACT-MIN vì vậy một vài phương thức giảm chi phí hoạt động KEY đến o(lg V) không tăng thời gian của EXTRACT-MIN sẽ đem lại sự thực hiện nhanh hơn với cấu trúc đống

DECREASE-Giải thuật Dijkstra tương tự duyệt theo chiều rộng (xem Mục 22.2) và thuật toán Prim tìm cây khung nhỏ nhất(xem Mục 23.2) Trong tập hợp S nó duyệt theo chiều rộng đến tập hợp đỉnh màu đen như đỉnh trong tập hợp S có độ dài đường đi ngắn nhất chỉ vì thế đỉnh màu đen trong duyệt theo chiều rộng có khoảng cách đúng Giải thuật Dijkstra giống như giải thuật Prim vì cả hai đều sử dụng hàng đợi ưu tiên để tìm đỉnh nhẹ nhất bên ngoài tập hợp(tập hợp trong giải thuật Dijkstra và cây mở rộng trong giải thuật Prim)thêm đỉnh này vào tập hợp và điều chỉnh lại trọng số của đỉnh bên ngoài tập hợp cho phù hợp

Trang 16

Bài tập 24.3

Bài tập 24.3-1

Chạy thuật toán Dijkstra trên đồ thị có hướng hình 24.2, đầu tiên lấy đỉnh s làm nguồn và sau đó sử dụng đỉnh z như là nguồn Trong kiểu của hình 24.6 biểu diễn những giá trị d và và các đỉnh trong tập S sau mỗi bước lặp của vòng lặp While

Bài tập 24.3-2

Đưa một ví dụ đơn giản của đồ thị có hướng với những cạnh trọng số âm cho thuật toán Dijkstra nào đưa ra những câu trả lời sai Tại sao phần chứng minh của định lý 24.6 không kiểm tra khi những cạnh trọng số âm được cho phép ?

một số thực trong phạm vi 0 ≤ r(u, v) ≤ 1 biểu diễn độ tin cậy của của đường đi từ đỉnh u tới đỉnh v Chúng ta giải thích r(u,v) như là xác suất mà đường đi từ u đến v sẽ hỏng chúng ta giả sử rằng những xác suất này là độc lập Đưa ra một thuật toán hiệu quả để tìm một đường tin cậy nhất giữa 2 đỉnh đã cho

Bài tập 24.3-5

Cho đồ thị G=(V,E) đồ thị có hướng có trọng số với hàm trọng số w:E →{ 1,2 W } cho một vài số nguyên dương W, và giả sử rằng không có 2 đỉnh có cùng trọng số đường đi ngắn nhất từ nguồn đỉnh s Bây giờ giả sử chúng ta định nghĩa một đồ thị có

cạnh trọng số riêng w(u,v) trong tập cạnh G’ có bao nhiêu đỉnh? Bây giờ giả sử chúng ta chạy một thuật toán tìm kiếm theo chiều rộng trên G’ Chỉ ra thứ tự những đỉnh nào trong V được tô màu đen trong thuật toán tìm kiếm theo chiều rộng của G’ cùng thứ tự với những đỉnh của V đã được trích ra từ hàng đợi ưu tiên trong dòng 5 của thuật toán DIJKSTRA khi chạy trên G

Trang 17

24.4 Những ràng buộc hiệu và những đường đi ngắn nhất (Difference constraints and shortest paths)

Chương 29 học về bài toán quy hoạch tuyến tính tổng quát, trong đó chúng ta muốn tối ưu hóa một đối tượng hàm tuyến tính thành một tập hợp những bất đẳng thức tuyến tính Trong phần này, chúng ta khảo sát một trường hợp đặc biệt của quy hoạch tuyến tính mà có thể được quy về để tìm những đường đi ngắn nhất từ một nguồn đơn Vấn đề những đường đi ngắn nhất nguồn đơn là kết quả có thể được giải quyết bằng sử dụng thuật toán Bellman-Ford, bằng cách ấy cũng giải quyết vấn đề quy hoạch tuyến tính

Quy hoạch tuyến tính

Trong bài toán quy hoạch tuyến tính tổng quát, cho một ma trận A ( mxn), một vector b và một n-vector c Chúng ta muốn tìm thấy một vector x của n những phần tử

m-mà làm cực đại hàm mục tiêu tới m ràng buộc đã cho bởi Ax ≤ b

Mặc dù thuật toán đơn hình là trọng tâm của chương 29 , những đa thức không phải thường xuyên chạy đúng lúc đó trong kích thước dữ liệu nhập vào Có một vài lý do

đó là quan trọng hiểu việc thiết lập của những vấn đề quy hoạch tuyến tính Đầu tiên, việc nhận biết một bài toán đã cho có thể là một bài toán lập trình tuyến tính có kích thước đa thức sẽ ngay lập tức có nghĩa rằng có một thuật toán thời gian đa thức cho bài toán đó Thứ hai, có nhiều trường hợp lập trình tuyến tính đặc biệt có thể được giải quyết bằng các thuật toán nhanh hơn Ví dụ, 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ỳ vector x mà thỏa mãn Ax ≤ b, hoặc quyết định không có giải pháp khả thi nào tồn tại Chúng sẽ nhấn mạnh vào vấn đề khả thi

Hệ thống những ràng buộc hiệu (Systems of difference constraints)

Trong một hệ thống những ràng buộc hiệu, mỗi dòng của ma trận quy hoạch tuyến tính A chứa một số 1 và một số -1, và tất cả các trường khác của A là 0 Vì vậy những ràng buộc đã đưa Ax ≤ b là một tập hợp của m ràng buộc hiệu liên quan đến

n ẩn trong đó mỗi ràng buộc là một bất đẳng thức tuyến tính đơn giản của mẫu

Xj – x I ≤ bk ,

với 1 ≤ i, j ≤ n và 1 ≤ k ≤ m

Trang 18

Bài toán này tương đương với tìm ẩn số dương đối với i=1,2,…,5, như là 8 ràng buộc hiệu sau là thỏa mãn :

(24.3) x1 –x 2 ≤ 0(24.4) x1 –x 5 ≤ -1,(24.5) x2 –x 5 ≤ 1,(24.6) x3 –x 1 ≤ 5 ,(24.7) x4 –x 1 ≤ 4,(24.8) x4 –x 3 ≤ -1,(24.9) x5 –x 3 ≤ -3,(24.10) x5 –x 4 ≤ -3,Một nghiệm của bài toán này là x =( -5,-3,0,-1,-4), vì có thể được kiểm tra trực tiếp bởi kiểm tra từng bất đẳng thức Thật ra, có nhiều hơn một nghiệm cho bài toán này

Những hệ thống của nhữn ràng buộc hiệu xảy ra trong nhiều ứng dụng khác nhau Ví

trạng thái mà phải có ít nhất một vài lần, hoặc nhiều nhất một, giữa 2 sự kiện có lẽ những sự kiện là những công việc được thực hiện trong suốt quá trình lắp ráp của một sản phẩm Nếu chúng ta gắn một chất dính mà mất 2 giờ để thiết lập tại thời gian

cầu rằng phần được cài đặt sau khi chất kết dính được gắn nhưng không chậm hơn thời gian mà chất dính đã thiết lập nửa chừng trong trường hợp này, chúng ta lấy cặp ràng buộc x2≥x1 và x2 ≤ x1 +1, hoặc tương đương, x1 – x2 ≤ 0 và x2 -x1 ≤ 1

Đồ thị ràng buộc

Biên dịch những hệ thống ràng buộc hiệu từ một điểm quan sát của lý thuyết đồ thị là

có lợi Sáng kiến cho rằng trong một hệ thống Ax ≤ b của những ràng buộc hiệu, m x

n quy hoạch tuyến tính của ma trận A có thể thấy như là sự chuyển vị của một ma trận

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

HÌNH ẢNH LIÊN QUAN

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ỉ - 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
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ỉ (Trang 3)
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 - 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
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 (Trang 5)
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 - 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
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 (Trang 6)
Đồ 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 - 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
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 (Trang 9)
Hình 24.5 Thể hiện  giải thuật những đường đi ngắn nhất trong một  đồ phi có hướng   không có chu trình - 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
Hình 24.5 Thể hiện giải thuật những đường đi ngắn nhất trong một đồ phi có hướng không có chu trình (Trang 11)
Đồ thị có trọng số, có hướng G = (V, E) cho trường hợp mà các cạnh có trọng số không - 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
th ị có trọng số, có hướng G = (V, E) cho trường hợp mà các cạnh có trọng số không (Trang 12)
Hình 24.6: Thực hiện  giải thuật  Dijkstra. Nguồn S Là đỉnh cực trái, ước lượng giá trị   đường đi ngắn nhất xem trong các đỉnh, các cạnh bôi đen biểu diễn giá trị đỉnh trước - 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
Hình 24.6 Thực hiện giải thuật Dijkstra. Nguồn S Là đỉnh cực trái, ước lượng giá trị đường đi ngắn nhất xem trong các đỉnh, các cạnh bôi đen biểu diễn giá trị đỉnh trước (Trang 13)
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 - 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
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 (Trang 13)
Đồ thị  ràng buộc - 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
th ị ràng buộc (Trang 18)
Hình 24.8: đồ thị ràng buộc tương ứng của hệ thống (24.3)-(24.10) của những ràng   buộc hiệu - 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
Hình 24.8 đồ thị ràng buộc tương ứng của hệ thống (24.3)-(24.10) của những ràng buộc hiệu (Trang 19)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w