Đường đi ngắn nhấtGiới thiệu: Bài toán tìm đường đi ngắn nhất là bài toán quan trọng trong lý thuyết đồ thi.. Được ứng dụng trong thực tế: Giao thông, viễn thông… Bài toán chia làm 2 loạ
Trang 1Đường đi ngắn nhất
Giới thiệu: Bài toán tìm đường đi ngắn nhất là bài toán quan trọng trong lý thuyết đồ thi Được ứng dụng trong thực tế: Giao thông, viễn thông…
Bài toán chia làm 2 loại:
Tìm đường đi ngắn nhất giữa 1 cặp đỉnh: Cho 2
đỉnh u,v thuộc G, tìm đường đi ngắn nhất từ u đến
v : Dịkstra
Tìm đường đi ngắn nhất giữa tất cả các cặp
đỉnh: Tìm đường đi ngắn nhất từ đỉnh u đến đỉnh
v, với mọi cặp đỉnh u,v thuộc G: Floyd-Warshall
Trang 2Giải thuật Dijkstra
Giới thiệu:
- Giải thuật Dijkstra giải bài toán đường đi ngắn nhất nguồn đơn (Single Source Shortest Path) trên một đồ thị có trọng số cạnh đều không âm
- Xác định đường đi ngắn nhất giữa 2 đỉnh a,b cho trước
Đặt vấn đề: Ứng dụng giải thuật cây bao trùm tối thiểu để giải quyết bài toán đường đi ngắn nhất có được không???
Trang 3Giải thuật Dịkstra
Nhận xét:
- Giải thuật để giải bài toán MST sẽ không ứng dụng được cho bài toán đường đi ngắn nhất
- Vì sao??
- Vì vậy cần phải chỉnh sửa giải thuật trên để phù
hợp với bài toán đường đi ngắn nhất
Trang 4Giải thuật Dịkstra
Giải thuật:
- Ở mỗi đỉnh v, giải thuật Dijkstra xác định 3 thông
tin: kv,dv,pv
• kv = 0 hoặc 1 – xác định trạng thái của đỉnh v ( 0 – chưa chọn, 1 – đã chọn)
• dv: Chiều dài đường đi tìm thấy tại thời điểm đang xét từ a đến v
• pv: là đỉnh trước của đỉnh v trên đường đi ngắn nhất từ a
b Đường đi ngắn nhất từ a đến b có dạng
{a,…,pv,v,…,b}
Trang 5Giải thuật Dịkstra
B1: Khởi tạo: k v =0,∀v∈V; d v= ∞,∀v ∈ V \ {a}; d a =0
B2: Chọn v∈V sao cho k v =0 và d v = min {d t / t∈V,k t =0 }
– Nếu d v = ∞ thì kết thúc, không tồn tại đường đi từ a b.
B3: Đánh dấu đỉnh v, k v = 1.
B4: Nếu v=b thì kết thúc và d b là độ dài đường đi ngắn
nhất từ a b.
Ngược lại nếu v ≠ b sang B5.
B5: Với mỗi đỉnh u kề với v mà k u = 0, kiểm tra
Nếu d u > d v + w (v,u) thì d u = d v + w (v,u)
Ghi nhớ đỉnh v: p u := v Quay lại B2.
Trang 6Giải thuật Dịkstra
Ví dụ: Tìm đường đi ngắn
nhất từ A G
A,B
AB=2
A,B,C
AB=2,AC=4
, A,B,C,E
AB=2,AC=4,BE=3
A,B,C,E,F
AB=2,AC=4,BE=3
BG=8,FD=1
A,B,C,E,F,D
AB=2,AC=4,BE=3,FD
=1
BG=8
Trang 7Giải thuật Dịkstra
- Hình bên là cây đường đi ngắn nhất từ đỉnh A đến các đỉnh
- Với ví dụ: AG, giải thuật sẽ kết thúc nếu tìm thấy đỉnh G
Trang 8Giải thuật Dịkstra
Tìm cây đường đi ngắn nhất từ đỉnh C đến các đỉnh còn lại của đồ thị sau:
Trang 9Giải thuật Dịkstra
Độ phức tạp của thuật toán:
- Bình thường thuật toán Dijkstra có độ phức tạp O(n2+m)
- Nếu sử dụng cấu trúc heap O((n+m)*log2(n))
Trang 10Giải thuật Floyd-Warshall
Bài toán: Tìm đường đi ngắn nhất của mỗi cặp đỉnh trong đồ thị (All-Pairs Source Shortest Path)