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

19 1,1K 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 19
Dung lượng 376,5 KB

Nội dung

24.1 Giải thuật Bellman-FordGiải thuật Bellman-Ford để giải quyết bài toán đườ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.. Bài toán

Trang 1

TÌM ĐƯỜNG ĐI NGẮN NHẤT

Giáo viên hướng dẫn: TS Hoàng Quang

Nhóm 1: Nguyễn Thanh Nam

Trần Văn Dũng Phan Nữ Anh Thư

Trang 2

NỘI DUNG TRÌNH BÀY

24.1 Giải thuật Bellman-Ford

24.2 Đường đi ngắn nhất nguồn đơn trong đồ thị có hướng không có chu trình

24.3 Giải thuật Dijkstra

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ột số bài toán

Trang 3

24.1 Giải thuật Bellman-Ford

Giải thuật Bellman-Ford để giải quyết bài toán đườ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

Bài toán:

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

Trang 4

24.1 Giải thuật Bellman-Ford

Thuật toán:

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 đường đi 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.

Trang 5

24.1 Giải thuật Bellman-Ford

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

Trang 6

24.1 Giải thuật Bellman-Ford

Trang 7

24.1 Giải thuật Bellman-Ford

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 → 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.

Trang 8

24.2 Đường đi ngắn nhất nguồn đơn trong

đồ thị có hướng không có chu trình

Thuật toán:

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

Trang 9

24.2 Đường đi ngắn nhất nguồn đơn trong

đồ thị có hướng không có chu trì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

4 do for each vertex v Adj[u]

5 do RELAX(u, v, w)

Trang 10

24.2 Đường đi ngắn nhất nguồn đơn trong

đồ thị có hướng không có chu trình

Trang 11

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 âm Vì vậy, trong phần này chúng ta giả thiết rằng w (u,v) >= 0 cho mỗi cạnh (u,v) 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

Trang 12

24.3 Giải thuật Dijkstra

Thuật toán:

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 nguồn s đã được xác định Giải thuật này dựa trên các bước lặp đỉnh u V – S với ước 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

24.3 Giải thuật Dijkstra

DIJKSTRA(G, w, s)

1 INITIALIZE-SINGLE-SOURCE(G,w,s)

2 S ← Ø

3 Q ← V[G]

4 while Q ≠ Ø

5 do u ← EXTRACT-MIN(Q)

6 S ← S U {u}

7 for each vertex v Adj[u]

8 do RELAX(u, v, w)

Trang 14

24.3 Giải thuật Dijkstra

Trang 15

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

Trang 16

Một số bài toán

Sự cải tiến của Yen đối với thuật toán Bellman-Ford

Giả sử rằng chúng ta ra lệnh giảm bớt đỉnh trong một bước chạy của

thuật toán Bellman-Ford như sau Trước khi chạy lần đầu tiên,

chúng ta gán một thứ tự tuyến tính tùy ý v1, v2,…, v|v| cho các đỉnh của đồ thị đầu vào G=(V,E) Sau đó, chúng ta chia tập cạnh E thành Ef U Eb , với Ef = { ( vi,vj) ϵ E và Eb = {(vi, vj) ϵ E : i > j } ( Giả sử rằng G không chứa những vòng lặp tự động, do đó mọi cạnh thuộc trong hoặc Ef hoặc trong Eb ) Định nghĩa Gf = (V,Ef) và Gb

= ( V, Eb)

 Chứng minh rằng Gf là phi chu trình với loại tôpô { v|v| ,

v|v|-1 , ,vv|v|-1 }

 Lược đồ này có cải tiến được thời gian chạy tiệm cận của thuật

toán Bellman-Ford không ?

Trang 17

Một số bài toán

Những hộp lồng

Một hộp d-chiều với những chiều ( x1,x2, …., x) lồng trong hộp khác với những chiều ( y1,y2… yd) nếu tồn tại một hoán vị trên { 1,2, …, d } như là x(1) < y1, x(2) <y2,…, x(d) <yd

 Biện luận rằng quan hệ lồng nhau là bắc cầu

 Mô tả một phương pháp hiệu quả để quyết định có một hộp d-chiều

lồng trong một hộp khác hay không

 Giả sử rằng cho một tập của n {B1, B2… Bn } hộp d-chiều Mô tả

một thuật toán hiệu quả để quyết định một chuỗi dài nhất ( Bi1 , Bi2 , …., Bik ) của những hộp như là Bij lồng trong Bij+1, đối với

j = 1,2,…,k-1 Diển tả thời gian chạy của thuật toán với thuật ngữ n

và d

Trang 18

Một số bài toán

Buôn chứng khoán

Buôn chứng khoán là việc dùng sự khác nhau trong tỉ lệ trao đổi tiền tệ

để chuyển đổi một đơn vị của tiền tệ thành nhiều hơn một đơn vị của cùng loại tiền Ví dụ, giả sử rằng 1 đô la đổi được 46.4 rupees Ấn Độ, 1 rupees

Ấn Độ đổi được 2.5 Yen Nhật, và 1 Yen Nhật đổi được 0.091 đô la Từ

đó, bằng việc chuyển đổi tiền tệ, một thương gia có thể bắt đầu với 1 đô la,

và mua 46.4 x 2.5 x 0.0091 = 1.0556 đô la, thì được lãi 5.56 phần trăm Giả sử rằng cho n loại tiền c1,c2,…,cn và một bảng n x n R giá trị chuyển đổi, như vậy một đơn vị tiền tệ ci mua R[i,j] đơn vị của loại tiền cj.

tiền ( ci1,ci2, …,cik) như là

gian chạy của thuật toán

Trang 19

Một số bài toán

Thuật toán chia tỉ lệ của Gabow cho những

đường đi ngắn nhất nguồn đơn.

Thuật toán chu trình trọng số trung bình tối

thiểu Karp (Karp's minimum mean-weight cycle algorithm )

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

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

HÌNH ẢNH LIÊN QUAN

Đồ thị 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
th ị có hướng không có chu trình (Trang 8)
Đồ thị 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
th ị có hướng không có chu trình (Trang 9)
Đồ thị 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
th ị có hướng không có chu trình (Trang 10)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w