Đư Đư ờ ờ ng đi ng ng đi ng ắ ắ n nh n nh ấ ấ t 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 Gi Gi ả ả i thu i thu ậ ậ t Dijkstra 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??? Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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 Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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} Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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. Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra kstra Ví dụ: Tìm đường đi ngắn nhất từ A G Shortest Tập hợp A AB=2,AC=4.AD=7,AF=5 A,B AB=2 AC=4.AD=7,AF=5,BE=3 ,BG=8,BD=6 A,B,C AB=2,AC=4 AD=7,AF=5,BE=3,BG=8 , A,B,C,E AB=2,AC=4,BE=3 AD=7,AF=5,BG=8 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 Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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 Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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: Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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(n 2 +m). - Nếu sử dụng cấu trúc heap O((n+m)*log2(n)) Gi Gi ả ả i thu i thu ậ ậ t Floyd t Floyd - - Warshall 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) . 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ừ. 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. toán đường đi ngắn nhất có được không??? Gi Gi ả ả i thu i thu ậ ậ t D t D ị ị kstra 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.