Phân tích thiết kế thuật toán Các đường đi ngắn nhất từ một đỉnh nguồn

57 549 0
Phân tích thiết kế thuật toán  Các đường đi ngắn nhất từ một đỉnh nguồn

Đ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

Mục lục Lý thuyết chung 2 1. Bài toán các đường đi ngắn nhất 2 2. Biểu diễn các đường đi ngắn nhất 3 3. Kỹ thuật rút ngắn 7 24.1. Giải thuật BellmanFord 10 A. Lý thuyết 10 B. Phần bài tập 14 24.2. Đường đi ngắn nhất từ một đỉnh nguồn trong đồ thị có hướng không có chu trình 18 A. Lý thuyết 18 B. Phần bài tập . 21 24.3. Giải thuật Dijkstra . 23 A. Lý thuyết 23 B. Phần bài tập 28 24.4. Vấn đề đường đi ngắn nhất và các ràng buộc khác nhau 36 A. Lý thuyết 36 B. Phần bài tập 39 Solved problems 44 Problem 241: Yens improvement to BellmanFord 44 Problem 242 45 Problem 243. 45 Problem 244 47 Problem 246 48 Problems 5.1, 5.2, 11.1 50 Problem 5.1 50 Problem 5.2 51 Problem 11.1 55

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐÀO TẠO SAU ĐẠI HỌC O0O BÀI TẬP LỚN MÔN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Đề tài: CÁC ĐƯỜNG ĐI NGẮN NHẤT TỪ MỘT ĐỈNH NGUỒN Hà Nội, 1/2012 Chương 24: Các đường ngắn từ đỉnh nguồn Mục lục Lý thuyết chung 1.Bài toán đường ngắn Một số thuật ngữ: • Cho đồ thị có trọng số, có hướng G = (V, E ), với hàm trọng số w:E→R • Trọng số đường p = (v0 , v1,…, vk ) • w(p) = ∑i = 1…k w(vi −1 , vi ) Trọng số đường ngắn (shortest path weight) từ u đến v Một đường ngắn từ u đến v đường p từ u đến v cho w(p) = d(u, v) Ví dụ đồ thị có trọng số , có hướng cho hình : Bài toán đường ngắn từ nguồn (Single-source shortestpaths problem) : • • Đồ thị G = (V, E ) đỉnh nguồn s∈V Tìm đường ngắn từ s đến đỉnh v∈V Cạnh có trọng số âm : • Giả thiết: Trọng số cạnh âm o Chu trình có trọng số âm o Nếu tồn chu trình có trọng số âm đến (reachable) từ s trọng số đường ngắn định nghĩa? o Không đường từ s đến đỉnh nằm chu trình đường ngắn o Nếu tồn chu trình có trọng số âm đường từ s đến v, ta viết d(s, v) = - ∞ o Trong ví dụ sau, đỉnh h, i, j không đến từ s nên có trọng số đường ngắn ∞ , không -∞ chúng nằm chu trình có trọng số âm Giá trị đỉnh trọng số đường ngắn từ đỉnh nguồn s • Khử chu trình có trọng số (nếu có) khỏi đường tạo đường có trọng số Biểu diễn đường ngắn 2.1 Biểu diễn đường • Đồ thị G = (V, E ) o Với đỉnh v, đỉnh cha (predecessor) v đỉnh khác NIL  o • Duy trì trường p[v], trữ trỏ đến đỉnh cha v Sẽ dùng p để suy đường ngắn từ s đến v Đồ thị đỉnh cha Gp = (Vp , Ep) (predecessor subgraph)  Vp = {v∈V : p[v] ≠ NIL} ∪ {s}  Ep = {(p[v], v) ∈E : v ∈Vp − {s}} G = (V, E ) đồ thị có hướng, có trọng số o o G không chứa chu trình trọng số âm đến từ đỉnh nguồn s∈V Cây đường ngắn với gốc tạis đồ thị có hướng G’ = (V’, E’), với V’ ⊆V E’ ⊆E cho  V’ tập đỉnh đến (reachable) từ s G  G’ có gốc với gốc s, chứa đường ngắn đến đỉnh đến từ s  Với v∈V’, đường từ s đến v G’ đường ngắn từ s đến v G Ví dụ : Cây đường ngắn có gốc đỉnh nguồn s: Trong (b) (c) hai đường ngắn có gốc đỉnh nguồn s đồ thị (a) 2.2 Cấu trúc đường ngắn Lemma 24.1 Đường đường ngắn đường ngắn • p = 〈v1 , v2 ,…, vk 〉 đường ngắn từ v1 đến vk • Với i, j mà ≤i≤j≤k, gọi pij = 〈vi , vi + ,…, vj 〉 đường (subpath) p từ vi đếnvj ⇒pijlà đường ngắn từ viđến vj Hình minh họa : Dễ dàng chứng minh điều phương pháp phản chứng: Giả sử tồn đường ngắn không thuộc đường ngắn , ta dễ thấy đường qua đường ngắn có trọng số nhỏ đường ngắn ta tìm ban đầu, suy đường ngắn Trái với giả thiết Như hình vẽ ta thấy p’ij đường ngắn không thuộc đường ngắn từ đỉnh v1 đến vk đường từ v1 đến vk qua p’ij đường ngắn nhất, trái với giả thiết Lemma 24.2: p đường ngắn từ s đến v, phân thành ⇒ Trọng số đường ngắn từ s đến v δ(s, v) = δ(s, u) + w(u, v Chứng minh Đường p’ đường ngắn p đường ngắn (Lemma 24.1) δ(s, v) = w(p) = w(p’) + w(u, v) = δ(s, u) + w(u, v) Lemma 24.3 Bất đẳng thức tam giác Đỉnh nguồn s ⇒ Với cạnh (u, v) ∈E , ta có δ(s, v) ≤δ(s, u) + w(u, v) 3.Kỹ thuật rút ngắn Kỹ thuật rút ngắn (“relaxation”) • Duy trì cho đỉnh v thuộc tính d[v] dùng làm chận lên trọng số đường ngắn từ s đến v • Biến d[v] gọi ước lượng đường ngắn (shortest path estimate) • Khởi động ước lượng đường ngắn trường predecessor thủ tục INITIALIZE-SINGLE-SOURCE(G, s) for each vertex v∈V[G] dod[v] ¬ ∞ p[v] ¬ NIL d[s] ¬ Rút ngắn đường đến đỉnh: kiểm tra xem đường đến v thông qua cạnh (u, v) có ngắn đường đến v thời hay không Nếu ngắn cập nhật d[v] p[v] RELAX(u, v, w) ifd[v] >d[u] + w(u, v) thend[v] ¬ d[u] + w(u, v) p[v] ¬ u Gọi RELAX lên cạnh để tìm (trong hai đường đến đỉnh) đường ngắn 3.1 Thực thi rút ngắn lên cạnh Các giải thuật chương gọi INITIALIZE-SINGLE-SOURCE sau gọi RELAX số lần để rút ngắn đường • • Kỹ thuật rút ngắn cách dùng để thay đổi ước lượng đường ngắn đỉnh cha (predecessor) Các giải thuật khác thứ tự số lần gọi RELAX lên cạnh 3.2 Các tính chất kỷ thuật rút ngắn • Lemma 24.4 Cạnh (u, v) ∈E ⇒Sau gọi RELAX(u, v, w), ta có d[v] ≤d[u] + w(u, v) Ta dễ dàng chứng minh tính chất • Lemma 24.5: Tính chất cận Đỉnh nguồn s G khởi động INITIALIZE-SINGLE-SOURCE(G, s) ⇒Với v ∈V, d[v] ≥d(s, v), bất biến trì chuỗi bước rút ngắn lên cạnh G Một d[v] đạt đến cận d(s, v) không thay đỗi • Lemma 24.6: Tính chất đường Đỉnh nguồn s Không có đường từ s đến đỉnh vV ⇒Sau G khởi động INITIALIZE-SINGLE-SOURCE(G, s), ta có d[v] = d(s, v) = ∞ Đẳng thức bất biến chuỗi bước rút ngắn lên cạnh G • Lemma 24.7: Tính chất hội tụ Đỉnh nguồn s s u→v đường ngắn với đỉnh u, vV G khởi động bỡi INITIALIZE-SINGLE-SOURCE(G, s), sau chuỗi bước rút ngắn thực thi lên cạnh G có cạnh (u, v) ⇒Nếu d[u] = d(s, u) vào lúc trước gọi RELAX(u, v, w), sau gọi luôn có d[v] = d(s, v) Nhận xét: cha v không thiết phải u, nghĩa d[v] d(s, v) 10 xv – xu ≤ w(u, v) Trong xv = δ(v) nghiệm phương trình Tuy nhiên, δ không nghiệm tập bất phương trình (Ví dụ, tất trọng số cạnh không âm tất xi = nghiệm) Để xt = δ(t) nghiệm toán tìm đường ngắn nhất, ta thêm vào điều kiện cực đại x t Điều : max(xt ) ≥ δ(t) xt= δ(t) nghiệm tập bất phương trình max(xt ) ≤ δ(t) chứng giống định lý 24.9 : Đặt p đường ngắn từ s tới t Theo định nghĩa : Nhưng với cạnh (u, v) ta có bất phương trình xv – xu ≤ w(u, v) : Nhưng xs = 0, nên xt ≤ δ(t) Chú thích : Bài toán cực đại xt bất phương trình giải toán cặp đơn đường ngắn s tiến tới t chu kỳ trọng số âm Nhưng có chu kỳ trọng số âm, bất phương trình vô nghiệm (chứng minh định lý 24.9) ; s không tiến tới t xt không xác định Bài 24.4-7 Sau đoạn đường đầu tiên, tất giá trị d 0, cạnh (v , vi ) không thay đổi giá trị d Vậy ta loại bỏ v cách dùng thuật toán Bellman-Ford đồ thị ràng buộc ngoại trừ nút v khởi tạo tất ước lượng đường ngắn tới thay tới ∞ Bài 24.4-10 Để chấp nhận ràng buộc biến đơn, ta thêm biến x0 đặt tương ứng với đỉnh gốc v0 đồ thị ràng buộc Ý tưởng chu kỳ trọng số âm chứa v 0, ta tìm δ(v0 , v0 ) = Trong trường hợp này, ta đặt x = 0, nên ta giải 43 ràng buộc biến đơn dùng xi ràng buộc biến kép với x0 biến khác Đặc biệt, ta giải xi ≤ bk xi – x0 ≤ bk, thêm cạnh (v0 , vi ) với trọng số bk cho đồ thị ràng buộc Ta giải - xi ≤ bk xi – x0 ≤ bk, thêm cạnh thêm cạnh (v0 , vi ) với trọng số bk cho đồ thị ràng buộc Sau tim trọng số đường ngắn từ v 0, ta đặt xi = δ(v0 , vi ) cho tất i = 0, 1, , n; sau ta thực trước bao gồm x biến mà ta đặt cho trọng số đường ngắn nhất.Vì v đỉnh gốc nên x0 = x0< Nếu δ(v0 , v0 ) = 0, để x0 = ta đặt xi = δ(v0 , vi ) cho tất i = 0, 1, , n cho toán có nghiệm Với xi ≤ bk , ta dùng xi – x0 ≤ bk Bằng tam giác bất phương trình, δ(v0 , vi ) ≤ δ(v0 , v0 ) + w(v0 , vi ) = bk , xi ≤ bk.Với - xi ≤ bk, ta dùng x0 – xi ≤ bk Bằng tam giác bất phương trình, = δ(v , v ) ≤ δ(v , v i ) + w(v i , v ); ≤ xi + bk tương đương, −xi ≤ bk Nếu δ(v0 , v0 ) < 0, để x0< 0, nên có chu kỳ trọng số âm chứa v0 Phần chứng minh định lý 24.9 mà giải toán chu kỳ trọng số âm với v chu kỳ trọng số âm cho vô nghiệm 44 Solved problems Problem 24-1: Yen's improvement to Bellman-Ford a Giả sử ngược lại Gf không hở Gf có chu trình Một chu trình phải có cạnh (u, v) cho u có mục cao v Cạnh không E f Vì trái với giả thuyết Gf có chu trình Vì Gf chu trình (v1, v2,…, v|V|) thứ tự xếp topo cho G f, từ định nghĩa Ef ta biết tất cạnh có hướng từ mục nhỏ đến mục lớn Chứng minh cho Eb tương tự b Với đỉnh v ∈ V, biết δ(s,v) = ∞ δ(s,v) hữu hạn Nếu δ(s,v) = ∞ d[v] = ∞ Vì thế, ta cần xem xét trường hợp d[v] hữu hạn Phải có đường ngắn từ s đến v Gọi p = (v 0, v1,…,vk-1,vk) đường có v0 = s, vk = v Giờ ta xem số lần có thay đổi hướng p, trường hợp (vi-1, vi) ∈ Ef (vi, vi+1) ∈Eb ngược lại Có nhiều |V| - cạnh p, có nhiều |V| - thay đổi hướng Bất kì phần đường mà thay đổi hướng tính toán với giá trị d xác nửa đầu nửa sau lần qua node bắt đầu dãy thay đổi hướng có giá trị d, cạnh rút ngắn theo thứ tự hướng dãy Mỗi thay đổi hướng cần nửa qua hướng đường Bảng sau cho thấy số lượng tối đa lần qua cần thiết phụ thuộc vào chẵn lẻ | V| - hướng cạnh đầu tiên: |V| - Chẵn Chẵn Lẻ Lẻ Hướng cạnh Tiến Lùi Tiến Lùi Số lần qua (|V| - 1)/2 (|V| - 1)/2 + |V|/2 |V|/2 Trong trường hợp, số lượng tối đa lần qua cần thiết Sơ đồ không ảnh hưởng giả thuyết thời gian chạy thuật toán thực lần qua thay |V| - lần, O(V) lần qua Mỗi lần tốn θ(E) thời gian, thời gian chạy O(VE) 45 Problem 24-2 a Gọi hộp có chiều x = (x 1,…,xd), y = (y1,…,yd) z = (z1,…,zd) Giả sử tồn hoán vị π cho xπ(i)< yi với i = 1, ,d tồn hoán vị π’ cho yπ’(i)< zi với i = 1,…,d cho x nằm y y nằm z Xây dựng hoán vị π”, cho π”(i) = π’(π(i)) Thế với i = 1,…,d ta có x π”(i) = xπ’(π(i))< yπ’(i)< zi x nằm z b Sắp xếp chiều box từ dài đến ngắn Một box X với chiều xếp (x1, x2,…,xd) nằm box Y với chiều xếp (y1, y2,…,yd) xi< yi với i = 1,2,…,d Việc xếp thực thời gian O(dlgd) việc kiểm tra nằm thực thời gian O(d), thuật toán chạy thời gian O(dlogd) Thuật toán hoạt động box d-chiều định hướng hoán vị hướng thực c Xây dựng DAG G = (V, E) cho đỉnh v i tương ứng với box Bi (vi, vj)∈E box B i nằm box Bj Đồ thị G là DAG nằm có tính bắt cầu Thời gian để xây dựng DAG O(dn + dnlgd), từ việc so sánh cặp box sau xếp chiều Thêm đỉnh siêu nguồn s đỉnh siêu đích t vào G thêm cạnh (s,v i) cho đỉnh vi với trọng số vào (v j, t) cho tất đỉnh v j với trọng số Gọi kết DAG G’ Việc tốn O(n) Tìm đường dài từ s đến t G’ (phần 24.2) Đường tương ứng với dãy dài nesting box Thời gian để tìm đường dài O(n 2), G’ có n + đỉnh O(n2) cạnh Cuối cùng, thuật toán chạy với thời gian O(dn2 + dnlgd) Problem 24-3 Bài toán kinh doanh ngoại tệ a Chúng ta sử dụng thuật toán Bellman-Ford đồ thị có hướng , có trọng số G= ( V, E ) mà ta xác định sau : Mỗi đỉnh V tương ứng với loại tiền tệ với cặp tiền tệ c i , cj ta có cặp cạnh có hướng ( vi, vj ) ( vj , vi ) 46 Để xác định trọng số cạnh , ta xem xét vấn đề : Ta có : R[i1 , i2 ] R[i2 , i3 ]… R[ik , i1 ] > Nếu : Lấy log vế bất đẳng thức ta : Vì , ta đặt trọng số cạnh ( vi, vj ) sau : Khi ta đưa toán trở dạng : xác định xem có chu trình có trọng số âm tồn đồ thị G hay ko Chúng ta xác định đồ thị có chứa chu trình có trọng số âm không cách thêm vào đỉnh phụ v0 nối với tất đỉnh v i đồ thị với cạnh ( v0, vi ) có trọng số Thực thi thuật toán BELLMAN-FORD đồ thị với đỉnh bắt đầu v0 sử dụng kết trả thuật toán ( TRUE đồ thị không chứa chu trình có trọng số âm , FALSE đồ thị có chứa chu trình có trọng số âm ) ta có câu trả lời Phương pháp thực viêc thêm vào đỉnh v nối với tất đỉnh khác cạnh trọng số ko tạo chu trình đảm bảo việc chu trình có trọng số âm chắn tới từ v0 Giải thuật O(n2) để tạo đồ thị G , có O(n2) cạnh O(n3) để thực thi thuật toán BELLMAN-FORD Do , tổng thời gian thực thuật toán O(n3) 47 b Giả sử ta thực thi giải thuật BELLMAN-FORD để giải vấn để phần a ta cần đưa tất đỉnh đồ thị có trọng số âm tìm thấy Problem 24-4 a Vì tất trọng số không âm, ta sử dụng thuật toán Dijkstra Cài đặt hàng đợi ưu tiên mảng Q[0 |E| + 1], cho Q[i] danh sách đỉnh v d[v] = i Khỏi tạo d[v] với v khác s |E| + thay cho ∞, tất đỉnh nằm Q (Bất kì khởi tạo cho d[v] > δ(s,v) d[v] giảm dần đến δ(s,v).) |V| lần gọi EXTRACT-MINS thực thời gian O(E) giảm giá trị d relaxation thực thời gian O(1), thời gian tổng cộng O(E) • • Khi d[v] giảm, cần thêm v vào trước danh sách Q[d[v]] EXTRACT-MIN loại bỏ đầu danh sách phần tử khác rỗng Q Để gọi EXTRACT-MIN mà không cần quét tất Q, lưu lại giá trị I bé với cho Q[i] không rỗng Điểm mấu chốt d[v] giảm relaxation cạnh (u,v), d[v] trì lớn d[u], không di chuyển đến ô trước ô có u Q Vì thế, EXTRACT-MIN tiếp tục mảng, làm cho tiêu tốn O(E) cho tất lần EXTRACT-MINS b Với (u, v) ∈ E, ta có w1(u, v) ∈ {0, 1}, δ1(s, u) ≤ |V| - ≤ |E| Sử dụng mục (a) để có thời gian O(E) c Để thấy wi(u, v) = 2wi-1(u, v) wi(u, v) = 2wi-1(u, v) + 1, quan sát i bit wi(u, v) chứa i – bit w i-1(u, v) theo sau bít Nếu bit thấp wi(u, v) = 2wi-1(u, v); wi(u, v) = 2wi-1(u, v) + Chú ý hai thuộc tính sau đường ngắn nhất: Nếu tất trọng số cạnh nhân với hệ số c tất đường ngắn nhân với c Nếu tất trọng số cạnhtắt lên c trọng số tất đường ngắn tăng nhiều c(|V| - 1) tất đường ngắn có nhiều | V| - cạnh 48 d Ta có i (u, v) = wi(u, v) + 2δi-1(s, u) - 2δi-1(s, v) ≥ 2wi-1(u, v) + 2δ(s, u) - 2δi-1(s, v) ≥ Dòng hai dựa theo phần (c) Dòng dựa định lý 24.10 e Quan sát thấy tính i(p) cho tất đường p: từ u đến v, δ i-1(s,t) hủy với đỉnh t trung gian đường Vì i (p) = wi(p) + 2δi-1(s, u) – 2δi-1(s,v) f Để tính δi(s, v) từ δi-1(s, v) với v thời gian O(E): Tính trọng số i(u, v) thời gian O(E) phần (d) Dựa theo (e), i(u, v) ≤ |E|, sử dụng (a) để tính tất i(u, v) thời gian O(E) Tính tất δi(s, v) từ i(u, v) δi-1(s, v) phần (e) thời gian O(V) Để tính tất δ(s, u) thời gian O(ElgW): Tính δ1(s, v) với v ∈ V (b), việc tốn O(E) Với I = 2, 3,…, k, tính tất δi(s, v) từ δi-1(s, v) thời gian O(E) Thủ tục tính δ(s, v) = δk(s, v) thời gian O(Ek) = O(ElgW) Problem 24-6 Xem xét chuỗi bitonic tăng , sau giảm , sau lại tăng giảm , sau tăng giảm Do có tối đa lần đổi chiều chuỗi bitonic Mọi chuỗi mà tăng , sau giảm , sau tăng lại giảm có chuỗi bitonic chuỗi Bây ta giả sử có điều kiện mạnh tính chất chuỗi bitonic cho đề : vơi đỉnh v ∈ V , trọng số cạnh đường ngắn từ s đến v tăng dần Sau ta gọi INITIALIZE-SINGLE-SOURCE thực việc rút ngắn tất cạnh lần , theo giá trị lớn dần trọng số Sau 49 cạnh xuất đường ngắn rút ngắn theo thứ tự xuất đường (Ta dựa vào tính trọng số cạnh để đảm bảo thứ tự ).Tính chất rút ngắn đường ngắn (theo lemma 24.15) đảm bảo ta tính xác đường ngắn từ s đến đỉnh Nếu ta trời lại với điều kiện trọng số cạnh theo đường ngắn tăng sau giảm , ta rút ngắn tất cạnh lần theo thứ tự tăng trộng số làm thêm lần theo thứ tự giảm trọng số Để đảm bảo ta tìm tất chuỗi bitonic cách làm Đó ta thực lần, lần lại thực việc rút ngắn cạnh lần Lần thực rút ngắn cạnh theo thứ tự tăng trọng số, lần thực việc rút ngắn theo thứ tự giảm trọng số Dựa vào tính tính chất đường rút ngắn, ta tìm đường ngắn Theo đó, tổng thời gian thực thuật toán O ( V+E lgV ) Thời gian xếp E cạnh theo trọng số O(E lg E) = O ( E lg V ) ( E = O (V )) INITIALIZE-SINGLE-SOURCE khoảng thời gian O(V) Mỗi lần lặp khoảng thời gian O (E) Vì vậy, tổng thời gian thực thi O(E lg V + V + E) = O(V + E lg V) 50 Problems 5.1, 5.2, 11.1 Problem 5.1 a Để xác định kỳ vọng giá trị thể máy đếm sau n lần tăng, ta đặt vài biến ngẫu nhiên i=1…n, đặt Xi đại lượng tăng giá trị máy đếm lần thao tác thứ i Vn giá trị thể máy đếm sau n lần thực thao tác Ta có: Vn = X1 + X2 + … + Xn Ta cần phải tính E[Vn]: E[Vn] = E[X1 + X2 + … + Xn] = E[X1] + E[X2] + … + E[Xn] Ta E[Xj] = với j = 1,2,…,n Ở lần thao tác thứ i, tăng giá trị máy đếm tăng lên : (n i+1 - ni), điều xảy với xác suất :  E[Xi] = (1 - ) + (ni+1 - ni) = (điều phải chứng minh) Vậy ta có E[Vn] = n b Đặt Vn Xj giống phần a, ta phải tính Var[Vn], ni = 100i Xi đôi độc lập với nhau, ta có: Var[V n] = Var[X1] + Var[X2] + … + Var[Vn] Vì ni = 100i, ta có ni+1 – ni = 100(i+1) – 100i = 100 Vì thế, với xác suất 99/100, phần tăng giá trị thể máy đếm thao tác thứ j 0, với xác suất 1/100, giá trị tăng lên 100 Ta có: Var[Xj] = E[Xj2] - E2[Xj] = (( 02 ) + (1002 )) – 12 = 99  Var[Vn] = 99n 51 Problem 5.2 a Giả mã mô tả thuật toán 1: random_search(X){ Khởi tạo mảng B[n] có n phần tử,  0; Khởi tạo số phần tử xét number  0; While (true) { Index  random(n) Nếu A[index] == X then return index; Ngược lại Nếu B[index] == { B[index]  1; number ++ } Nếu number == n return không tồn tại/đã xét hết phần tử } } b Có phần tử mảng A giá trị cần tìm; A có n phần tử  xác suất để lần chọn thử thành công 1/n; xác suất không thành công 1- 1/n Xác suất để chọn k lần thành công Gọi X số phép thử trước tìm giá trị cần tìm Ta có : Đây dạng phân phối hình học với q = ; p = Ta có kỳ vọng X là: EX = 52 c Có k phần tử n phần tử mảng A có giá trị X  xác suất để lần chọn thử thành công k/n; xác suất không thành công (n-k)/n Ta có: Ta có  EX = 1/p = n/k d Chúng ta cần tính kỳ vọng số lần chọn thử đến tất n phần tử chọn thử; lần chọn thử ngẫu nhiên toàn n phần tử Đặt số phần tử cần phải chọn để từ thời điểm i-1 phần tử phân biệt đến thời điểm có i phần tử phân biệt chọn thử Vậy đặt số phần tử cần chọn thử trước để tất phần tử mảng A chọn thử k, ta có công thức:  Có có phân phối hình học với xác suất thành công Vì để có có (i-1) phần tử khác chọn thử trước đó, phần tử mảng A chưa chọn thử Vậy ta có  Vậy e Trong mảng có phần tử có giá trị x cần tìm Xác suất để x = a[i] cho n phần tử mảng a ta có Ta có kỳ vọng số lần chọn thử đến lúc thành công là: 53 Vậy kỳ vọng số lần chọn thử tương đương với thời gian chạy trung bình Thời gian chạy tồi phần tử x nằm vị trí cuối (n) , thời gian chạy n f Mảng có n phần tử, khả xảy hoán vị nên có xếp phần tử mảng Giả sử phần tử giá trị x xuất vị trí j, tức (k-1) phần tử x lại xuất từ vị trí (j+1)  n Số xếp thỏa mãn giá trị x xuất vị trí j là: Trong đó: số hoán vị (n-k) phần tử khác x số cách xếp (k-1) phần tử x vào vị trí (n-i) vị trí từ vị trí thứ (i+1) Vậy ta có: , ; tồn trường hợp thỏa mãn k phần tử x vào r vị trí cuối mảng với r=1: thời gian chạy trung bình (n+1)/(k+1); thời gian chạy trường hợp tồi (n-k+1) i Ta thấy thuật toán số 2, có thời gian chạy trung bình giống tốt thuật toán số 1; Mặt khác thuật toán số cho phép thực mà không cần giả thiết mảng đầu vào có hoán vị tương đương Vậy ta lựa chọn thuật toán scramble-search thuật toán cho Problem 11.1 11.a Giả sử ta có hàm băm chung, ta quan sát chúng dùng lý thuyết 11.7: chèn thêm khóa để tìm kiếm không thành công cách thay khóa vào khoảng trống tìm thấy Như phần chứng minh định lý 11.6, ta cho x biến ngẫu nhiên số phép thử lần search không thành công thì: Pr {X ≥ i} αi-1 55 Vì n m/2 nên ta có α 1/2 Lấy i = k+1, ta có Pr {X > k} = Pr {X ≥ k + 1} (1/2)(k+1)-1 = 2-k 11.b Thay k = lgn phần chứng minh a xác suất mà lần chèn thứ i cần lớn k = lgn là: 2-2lgn = (2lgn)-2 = n-2 = 1/n2 11.c Gọi A kiện X > 2lgn Gọi Ai kiện Xi> 2lgn với i = 1, 2, …, n Theo b) ta có: P{ Ai } 1/n2 với i = 1, 2, …, n Từ định nghĩa kiện A ta có: A = A1 U A2 U … U An Sử dụng định lý Boole (C.18) ta có: Pr{A} Pr{A1} + Pr{A2} + … + Pr{An} n 1/n2 = 11.d Sử dụng định nghĩa kỳ vọng chia tổng thành phần: E[X] = Pr{X=k} = Pr{X=k} + Pr{X=k} Pr{X=k} + Pr{X=k} =+n 56 Do X có giá trị xác định nên ta có: = Và (theo c) Do đó, E[X] + n = +1 = O() 57 [...]... đường đi ngắn nhất từ s => x => u, x.d = δ(s, x), vì thế cạnh (x, u) được relax Vì thế u.d = δ(s, u) Bài 24.3-4 Để tìm đường đi tin cậy nhất giữa s và t, ta chạy giải thuật Dijkstra với trọng số cạnh w(u,v) = -lg r (u,v) để tìm đường đi ngắn nhất từ s trong thời gian O(E+V 33 lgV) Đường đi tin cậy nhất là đường đi ngắn nhất từ s đến t và độ tin cậy của đoạn đường tích trọng số của độ tin cậy của các. ..3.3 Cây các đường đi ngắn nhất • Lemma 24.8 Đỉnh nguồn s∈V G không chứa chu trình có trọng số âm đến được từ s ⇒Sau khi khởi động G bởi INITIALIZE-SINGLE-SOURCE(G, s), ta có đồ thị Gp là cây có gốc s [chưa phải là cây các đường đi ngắn nhất] Mọi chuỗi các bước rút ngắn lên các cạnh của G duy trì tính chất trên thành một bất biến • Lemma 24.9: Tính chất đồ thị các đỉnh cha Đỉnh nguồn s∈V G không... thuyết Bằng cách thực hiện việc rút ngắn cạnh của đồ thị có hướng có trọng số không chứa chu trình theo thứ tự sắp xếp topo các đỉnh , chúng ta có thể tính toán đường đi ngắn nhất từ một đỉnh nguồn đơn trong thời gian Θ(V + E) Thuật toán tìm đường đi ngắn nhất với đi u kiện các đỉnh đã được sắp xếp topo như sau : DAG-SHORTEST-PATHS(G, w, s) 1 topologically sort the vertices of G 2 INITIALIZE-SINGLE-SOURCE(G,... cho thuật toán Dijkstra bị sai: 32 Dễ thấy ở vòng lặp thứ hai, đỉnh t được duyệt và đường đi ngắn nhất là từ s đến t là 3 Tuy nhiên, đường đi ngắn nhất từ s đến t phải là s đến y sau đó đến t = 0 + 4 – 3 = 1 Thuật toán Dijkstra chỉ đúng khi các cạnh là dương vì mỗi vòng lặp chỉ lấy ra phần tử nhỏ nhất trong queue tại thời đi m đó và duyệt nó nên khi gặp cạnh có trọng số âm giá trị giá trị tại đỉnh. .. đến được từ s Khởi động G bằng INITIALIZE-SINGLE-SOURCE(G, s) và thực thi chuổi bất kỳ các bước rút ngắn lên các cạnh của G sao cho d[v] = δ(s, v) với mọi đỉnh v∈V ⇒Đồ thị các đỉnh cha Gp là một cây các đường đi ngắn nhất có gốc tại s 24.1 Giải thuật Bellman-Ford A.Lý thuyết 24.1.1 Giải thuật Đồ thị có hướng G = (V, E ) Hàm trọng số w : E→R, có thể có cạnh có trọng số âm Đỉnh nguồn s Giải thuật BELLMAN-FORD... mỗi v thuộc V , nếu tồn tại 1 đường đi từ đỉnh nguồn s tới v thì hiển nhiên thuật toán BELLMAN-FORD chạy trên đồ thị G sẽ giới hạn được khoảng cách d[v] < ∞ do d[v] là tổng các trọng số các cạnh trên đường đi từ s đến v mà các trọng số này là các số thực xác định nên t x 5 d[v] cũng là số thực xác định 5 Ngược lại khi chạy thuật toán BELLMAN-FORD trên đồ thị G, 7với 1 đỉnh v bất 2 v Ta chứng minh bằng... 1 6đường đi từ s đến 3 phản chứng: 8 2 7 2 x khởi tạo ban 4đầu của thuật toán ta Giả sử ko tại 1 đường đi từ s3đến v Theo 2 có d[v] = ∞.Vì không xác định được đi nào từ s đến v nên tồn tại tí nhất 1 4 đường 7 đỉnh nào đó không tới được từ 2s Giảtsử đỉnh đó là v 1 , khi đó ta có d[v1] = ∞, từ đó x 95 0 9 d[v]= ∞, trái với giả thiết t s tồn y s 6 y 28 5 8 z 7 2 z 16 3 74 2 7 7 5 4 9 9 6 0 2 Bài24.1-3 Thuật. .. nghĩa lg0 = - ∞) Vì thế nếu ta gán w(u,v) = - lgr(u,v), ta có bài toán đường đi ngắn nhất Vì lg1 = 0, lgx < 0 với mọi 0 < x < 1, và ta định nghĩa lg0 = - ∞, tất cả các cạnh là không âm và ta có thể sử dụng thuật toán Dijkstra để tìm đường đi ngắn nhất từ s trong thời gian O(E + VlgV) Bài 24.3-6 Quan sát rằng nếu đánh giá đường đi ngắn nhất là khác vô cùng thì nó là (|V| -1)W Để có d[v] < vô cùng, ta... của độ tin cậy của các cạnh trên đường đi đó Bởi vì các xác suất là độc lập, xác suất tin cậy của một đường đi bằng tích xác xuất tin cậy của các cạnh của nó.Chúng ta muốn tìm đường đi từ s đến t để tích r(u,v) là max Đi u này tương đương với việc cực đại hóa: Việc này tương đương với tối thiểu hóa (Chú ý: r(u,v) có thể bằng 0 và lg0 không xác định Vì thế trong thuật toán này ta định nghĩa lg0 = - ∞)... đến được từ s, thì (1) giải thuật trả về TRUE (2) d[v] = d(s,v) cho mọi đỉnh v ∈V (3) đồ thị Gp là cây các đường đi ngắn nhất có gốc tại s (ii) Nếu G chứa một chu trình có trọng số âm đến được từ s, thì giải thuật trả về FALSE Chứng minh (i) Giả sử G không chứa chu trình có trọng số âm đến được từ s • Nếu v đến được từ s thì Lemma 24.12 chứng minh (2) o Nếu v không đến được từ s thì có (2) từ tính chất

Ngày đăng: 11/06/2016, 16:06

Từ khóa liên quan

Mục lục

  • Lý thuyết chung

    • 1.Bài toán các đường đi ngắn nhất

    • 2. Biểu diễn các đường đi ngắn nhất

    • 3.Kỹ thuật rút ngắn

  • 24.1. Giải thuật Bellman-Ford

    • A.Lý thuyết

    • B.Phần bài tập

  • 24.2. Đường đi ngắn nhất từ một đỉnh nguồn trong đồ thị có hướng không có chu trình

    • A.Lý thuyết

    • B.Phần bài tập .

  • 24.3. Giải thuật Dijkstra .

    • A.Lý thuyết

    • B.Phần bài tập

  • 24.4. Vấn đề đường đi ngắn nhất và các ràng buộc khác nhau

    • A.Lý thuyết

    • B. Phần bài tập

  • Solved problems

    • Problem 24-1: Yen's improvement to Bellman-Ford

    • Problem 24-2

    • Problem 24-3.

    • Problem 24-4

    • Problem 24-6

  • Problems 5.1, 5.2, 11.1

    • Problem 5.1

    • Problem 5.2

    • Problem 11.1

Tài liệu cùng người dùng

Tài liệu liên quan