10.1 từ khái niệm cơ bản để một thuật toán chung
chúng tôi mở rộng các chức năng chi phí để đường dẫn cách tự nhiên. Chi phí của một con đường là các
tổng của các chi phí của thành phần đa cung, tức là, nếu p = e1, e2,..., ek sau đó c(p) =
1≤i≤k c (ei). Đường dẫn có sản phẩm nào có chi phí zero.
cho một cặp s và v của nút, chúng tôi đang quan tâm đến một đường đi ngắn nhất từ s đến v. Chúng tôi
tránh sử dụng definite điều "các", kể từ khi có thể có nhiều hơn một ngắn nhất
đường dẫn. Có một con đường ngắn nhất luôn luôn tồn tại? Quan sát mà số lượng các đường đi từ s để
v có thể là infinite. Ví dụ, nếu r = pCq là một đường đi từ s đến v có chứa một chu kỳ
C, sau đó chúng tôi có thể đi xung quanh chu kỳ một số tùy ý của thời gian và vẫn còn có một
đường đi từ s đến v, xem hình 10.2. Chính xác hơn, p là một con đường dẫn từ s tới bạn,
C là hàng đầu con đường từ bạn để bạn và q là một con đường từ bạn v. xem xét r đường dẫn (i)
chính mà sử dụng p để đi từ s cho bạn, sau đó đi xung quanh thành phố chu kỳ tôi lần, và finally
sau q từ bạn để v. Chi phí r (i) là c(p) tôi • c(C) c(q). Nếu C là một để-gọi là
phủ định chu kỳ, tức là, c(C) < 0 thì c (r (i 1)) < c (r (i)). Trong tình huống này có là không có
các đường đi ngắn nhất từ s để c. Assume nếu không, nói P là một đường đi ngắn nhất từ s để c.
thay thế PSfrag
16.2 từ khái niệm cơ bản để một thuật toán chung
s p
u
q
v
s p
u
(2)
191
C
C
q
v
...
hình 10.2. Một con đường không đơn giản pCq từ s để c.
sau đó c (r (i)) < c (P) cho tôi enough1 lớn và rất P không phải là một con đường ngắn nhất từ s để c.
tiếp theo chúng tôi sẽ hiển thị rằng con đường ngắn nhất tồn tại nếu không có không có chu kỳ tiêu cực.
bổ đề 25. Nếu G chứa không có chu kỳ tiêu cực và v là thể truy cập từ s thì một ngắn nhất
đường đi từ s đến v tồn tại. Hơn nữa, đường đi ngắn nhất là đơn giản.
bằng chứng. Giả sử nếu không. Cho phép là chi phí tối thiểu của một đường đi từ s đến v và
giả định rằng có một con đường không đơn giản r từ s đến v của chi phí ít hơn. Kể từ khi r là
phòng không đơn giản chúng ta có thể, như trong hình 10.2, viết r là pCq, nơi C là một chu kỳ và pq là
một con đường đơn giản. Sau đó ≤ c(pq) và do đó c(pq) c(C) = c(r) < ≤ c(pq). So
c(C) < 0 và chúng tôi đã cho thấy sự tồn tại của một chu kỳ tiêu cực.
tập thể dục 170. Tăng cường bổ đề ở trên và hiển thị: nếu v là thể truy cập từ s sau đó, một
đường đi ngắn nhất từ s đến v tồn tại iff có là không có chu kỳ tiêu cực có thể truy cập từ s
và từ mà một trong những có thể tiếp cận
cho hai nút s và v, chúng tôi define ngắn nhất con đường khoảng cách μ (s, v) từ s đến v như
∞if có là không có đường đi từ s đến v
μ (s, v): = −∞if có là không có đường đi ngắn nhất từ s đến v
c (một đường đi ngắn nhất từ s đến v) khác.
quan sát mà nếu v là thể truy cập từ s, nhưng không có đường dẫn ngắn nhất từ s đến v,
sau đó, có các đường dẫn tùy tiện lớn phí tiêu cực. Do đó nó làm cho cảm giác để define
μ (s, v) = −∞ trong trường hợp này. Con đường ngắn nhất có thêm tài sản tốt đẹp mà chúng tôi
nhà nước như bài tập:
tập thể dục 171 (nét của ngắn nhất Paths.). Hiển thị đó nét của đường đi ngắn nhất
là mình con đường ngắn nhất, tức là, nếu một con đường của pqr mẫu là một con đường ngắn nhất hơn q
cũng là một đường ngắn nhất
tập thể dục 172 (cây con đường ngắn nhất.). Cho rằng tất cả các nút có thể truy cập từ s
và rằng không có không có chu kỳ tiêu cực. Hiển thị là một cây n-nút T bắt nguồn từ như
s như vậy mà tất cả cây đường dẫn là đường đi ngắn nhất. Gợi ý: giả định chính mà con đường ngắn nhất
duy nhất và xem xét gọn T bao gồm đường dẫn ngắn nhất tất cả bắt đầu từ s. sử dụng
tập thể dục trước để chứng minh rằng T là một cây. Mở rộng trường hợp khi ngắn nhất
đường dẫn không phải là duy nhất.
1
tôi > (c(p) c(q) − c (P)) / |c (C) | sẽ làm
192
con đường ngắn nhất 10
chiến lược của chúng tôi cho finding đường đi ngắn nhất từ một nguồn nút s là một tổng quát của
thuật toán BFS trong hình 9.3. Chúng tôi duy trì hai NodeArrays d và phụ huynh. Ở đây
d [v] có kiến thức hiện tại của chúng tôi về khoảng cách từ s đến v và phụ huynh [v]
mua sắm tiền thân của v trên con đường ngắn nhất hiện nay để v. Chúng tôi thường đề cập đến
d [v] như cách v, dự kiến. Ban đầu, d [s] = 0 và phụ huynh [s] = s. Tất cả các
nút có khoảng cách infinite và phụ huynh không.
cách tự nhiên để cải thiện khoảng cách giá trị là để truyền bá thông tin khoảng cách
trên cạnh. Nếu có một đường đi từ s tới bạn về chi phí d [u] và e = (u, v) là một cạnh trong
của bạn, sau đó có là một đường đi từ s đến v của chi phí d [u] c(e). Nếu chi phí này là nhỏ hơn
tốt nhất được biết đến trước đây khoảng cách d [v], chúng tôi Cập Nhật d và phụ huynh cho phù hợp. Điều này
quá trình được gọi là cạnh thư giãn.
thủ tục thư giãn (e = (u, v): Edge)
nếu d [u] c(e) < d [v] sau đó d [v]: = d [u] c (e);
phụ huynh [v]: = u
bổ đề 26. Sau khi bất kỳ chuỗi các cạnh thư giãn: nếu d [v] < ∞, sau đó có là một
các đường dẫn của chiều dài d [v] từ s để c.
bằng chứng. Chúng tôi sử dụng cảm ứng về số cạnh thư giãn. Yêu cầu bồi thường là chắc chắn
đúng trước khi thư giãn chính. Đường dẫn có sản phẩm nào là một con đường của chiều dài zero từ s đến v và
tất cả các nút khác có khoảng cách infinite. Xem xét tiếp theo một thư giãn cạnh e = (u, v).
bởi giả thuyết cảm ứng, có là một p đường dẫn của chiều dài d [u] từ s cho bạn và một con đường q của
chiều dài d [v] từ s đến v. Nếu d [u] c(e) ≥ d [v], không có gì để hiển thị. Nếu không,
PE là một con đường của chiều dài d [u] c(e) từ s để c.
chiến lược phổ biến trong các thuật toán trong chương này là để thư giãn cạnh đến
hoặc tất cả các đường dẫn ngắn nhất được tìm thấy hoặc phát hiện ra một chu kỳ tiêu cực. Ví dụ, các
cạnh chất béo trong hình 10,1 cung cấp cho chúng tôi thông tin phụ huynh thu được sau khi một sufficient
số thư giãn cạnh: nút f, g, tôi và h được thể truy cập từ s sử dụng những
đa cung và đã đạt đến của giá trị tương ứng μ (s, •) 2, −3, −1, và −3. Node b,
j, và d hình thức một tiêu cực chi phí chu kỳ do đó chi phí con đường ngắn nhất của họ là −∞. Nút một là
gắn liền với chu kỳ này và do đó µ(s, a) = −∞.
một chuỗi các cạnh thư giãn tốt là gì? Cho p = e1,..., ek là một con đường
từ s đến v. Nếu chúng tôi thư giãn cạnh trong trật tự để ek e1, chúng tôi có d [v] ≤ c(p) sau khi
Chuỗi thư giãn. Nếu p là một đường đi ngắn nhất từ s đến v, sau đó d [v] không thể thả
dưới đây c(p) bởi bổ đề trước và do đó d [v] = c(p) sau khi trình tự của
thư giãn.
bổ đề 27 (đúng đắn tiêu chí). Sau khi thực hiện một chuỗi R cạnh thư giãn-
ations, chúng tôi có d [v] = μ (s, v) nếu cho một số con đường ngắn nhất p = e1, e2,..., ek từ s
để v, p là một subsequence R, tức là, có những chỉ số t1 < t2 < • • • < tk như vậy mà
R [t1] = e1, R [t2] = e2,..., R [tk] = ek. Hơn nữa, defines thông tin phụ huynh một
các đường dẫn của chiều dài μ (s, v) từ s để c.
bằng chứng. Đây là một cái nhìn sơ của R và p: dòng chính cho biết thời gian. Thời gian n 1,
e1 cạnh thoải mái, tại thời gian t2, e2 cạnh thoải mái, và vv..
10,2 đạo diễn Acyclic đồ thị (DAGs)
193
1, 2,..., t1 , . . . , t2 , . . . . . . , tk , . . .
R :=. . . , e 1 , . . . , e2 , . . . . . . , e k,...
p: = e1, e2,..., e k
hiện có μ (s, v) = 1≤j≤k c (ej). Cho tôi ∈ 1..k cho vi là nút mục tiêu của ei và
define t0 = 0 và v0 = s. Sau đó d [vi] ≤1≤j≤i c (ej) sau khi thời gian ti là một đơn giản
cho thấy cảm ứng. Đây là rõ ràng cho tôi = 0 kể từ khi d [s] được khởi tạo zero và d-giá trị
chỉ giảm. Sau khi thư giãn ei = R [ti] cho tôi > 0, chúng tôi có d [vi] ≤
d [vi−1] c (ei) ≤ 1≤j≤i c (ej). Vì vậy sau khi thời gian tk, chúng tôi có d [v] ≤ μ (s, v). Kể từ khi
d [v] không thể đi dưới đây μ (s, v) bởi bổ đề 26, chúng tôi có d [v] = μ (s, v) sau thời gian tk và
do đó sau khi thực hiện tất cả thư giãn ở R.
cho chúng tôi tiếp theo chứng minh rằng thông tin phụ huynh dấu vết trong con đường ngắn nhất. Chúng tôi làm như vậy
theo giả định bổ sung rằng con đường ngắn nhất là duy nhất và để lại tướng
trường hợp đến người đọc. Sau khi thư giãn trong R, chúng tôi có d [vi] = μ (s, vi) với 1 ≤ tôi ≤ k.
khi d [vi] đã được thiết lập để μ (s, vi) bởi một hoạt động thư giãn (u, vi), sự tồn tại của một con đường
chiều dài μ (s, vi) từ s để vi được thành lập. Kể từ khi, bởi giả định, ngắn nhất
đường đi từ s tới vi là duy nhất, chúng ta phải có u = vi−1 và do đó phụ huynh [vi] = vi−1.
tập thể dục 173. Làm lại đoạn thứ hai trong chứng minh ở trên, nhưng mà không có như là-
sumption con đường ngắn nhất là duy nhất.
tập thể dục 174. Giả sử ES là các cạnh của G một số để tùy ý và giả sử ES (n-1) là
n − 1 bản sao của các ES. Hiển thị μ (s, v) = d [v] cho tất cả các nút v với μ (s, v) = −∞ sau khi
hoạt động thư giãn ES (n-1).
Trong phần tiếp theo, chúng tôi sẽ triển lãm thêm efficient chuỗi của thư giãn cho
acyclic đồ thị và đồ thị với trọng lượng không âm cạnh. Chúng tôi trở về, tướng
đồ thị là phần 10,5.
194
con đường ngắn nhất 10
thuật toán Dijkstra
tuyên bố tất cả các nút unscanned và khởi tạo d và phụ huynh
trong khi có một nút unscanned với dự kiến khoảng cách < ∞ làm
u:= nút unscanned với khoảng cách tối thiểu dự kiến
thư giãn tất cả các cạnh (u, v) ra khỏi bạn và tuyên bố u quét
s
quét
u
hình 10.4. Thuật toán Dijkstra con đường ngắn nhất cho trọng lượng không âm cạnh
đơn đặt hàng. Vì vậy, bởi bổ đề 27, chúng tôi tính toán chính xác khoảng cách con đường ngắn nhất nếu chúng tôi vòng
thư giãn cạnh ra khỏi v1, sau đó các cạnh ra khỏi v2, vv, hãy xem hình 10.3 cho một kỳ thi-
ple. Bằng cách này, mỗi cạnh thoải mái chỉ một lần. Kể từ khi mỗi thư giãn cạnh mất
thời gian liên tục, chúng tôi có được một tổng thời gian thực hiện của O(m n).
định lý 27. Các đường dẫn ngắn nhất trong đồ thị acyclic có thể được tính trong thời gian O(n m).
tập thể dục 175 (tuyến đường quy hoạch cho giao thông công cộng.). Việc tìm kiếm nhanh nhất tuyến đường
trong giao thông công cộng hệ thống có thể được mô hình hóa như một bài toán đường đi ngắn nhất trong acyclic
đồ thị. Xem xét một xe buýt hoặc xe lửa để lại nơi p tại thời gian t và tiếp cận của nó dừng tiếp theo p
lúc thời gian t. Kết nối này được xem như là một cạnh kết nối nút (p, t) và (p, t).
ngoài ra, đối với mỗi dừng p và sự kiện tiếp theo (xuất hiện và/hoặc khởi hành) tại p, nói tại
lần t và t với t < t, chúng tôi đã chờ đợi liên kết từ (p, t) để (p, t). (a) Hiển thị
đồ thị thu được bằng cách này là một DAG. (b) bạn cần một nút bổ sung mô hình-
ing của bạn bắt đầu từ điểm trong không gian và thời gian. Cũng cần có một cạnh kết nối
nó để mạng lưới giao thông. Cạnh này nên trông thế nào? (c) giả sử bạn có
tính cây con đường ngắn nhất từ nút đầu tiên của bạn để tất cả các nút trong công chúng
giao thông vận tải biểu đồ thể truy cập từ nó. Làm thế nào để bạn thực sự nhiều con đường bạn đang
tôi
đang được dịch, vui lòng đợi..