Bài giảng Toán rời rạc 2 - Bài toán tìm đường đi ngắn nhất cung cấp cho người học các kiến thức: Phát biểu bài toán tìm đường đi ngắn nhất, thuật toán Dijkstra, thuật toán Bellman-Ford, thuật toán Floyd. Mời các bạn cùng tham khảo.
BÀI TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT Tốn rời rạc Nội dung • • • • Phát biểu tốn tìm đường ngắn Thuật tốn Dijkstra Thuật toán Bellman-Ford Thuật toán Floyd Phát biểu toán tìm đường ngắn Phát biểu tốn • Xét đồ thị G=: – Với cạnh (u, v)E, ta đặt tương ứng với số thực A[u][v] gọi trọng số cạnh – Ta đặt A[u,v]= (u, v)E Nếu dãy v0, v1, , vk đường G độ dài đường • Bài tốn dạng tổng qt: – Tìm đường ngắn từ đỉnh xuất phát sV (đỉnh nguồn) đến đỉnh cuối tV (đỉnh đích) – Đường gọi đường ngắn từ s đến t – Độ dài đường d(s,t) gọi khoảng cách ngắn từ s đến t (trong trường hợp tổng quát d(s,t) âm) – Nếu không tồn đường từ s đến t độ dài đường d(s,t)= Một số thể cụ thể tốn • Trường hợp Nếu s cố định t thay đổi: – Tìm đường ngắn từ s đến tất đỉnh lại đồ thị – Với đồ thị có trọng số khơng âm, tốn ln có lời giải thuật toán Dijkstra – Với đồ thị có trọng số âm khơng tồn chu trình âm, tốn có lời giải thuật tốn Bellman-Ford – Trường hợp đồ thị có chu trình âm, tốn khơng có lời giải • Trường hợp Nếu s thay đổi t thay đổi: – Tìm đường ngắn tất cặp đỉnh đồ thị – Bài tốn ln có lời giải đồ thị khơng có chu trình âm – Với đồ thị có trọng số khơng âm, tốn giải cách thực lặp lại n lần thuật tốn Dijkstra – Với đồ thị khơng có chu trình âm, tốn giải thuật tốn Floyd Thuật tốn Dijkstra Mơ tả thuật tốn • Mục đích: – Sử dụng để tìm đường ngắn từ đỉnh s tới đỉnh lại đồ thị – Áp dụng cho đồ thị có hướng với trọng số khơng âm • Tư tưởng: – Gán nhãn tạm thời cho đỉnh – Nhãn đỉnh cho biết cận độ dài đường ngắn tới đỉnh – Các nhãn biến đổi (tính lại) nhờ thủ tục lặp – Ở bước lặp có nhãn tạm thời trở thành nhãn cố định (nhãn độ dài đường ngắn từ s đến đỉnh đó) Thuật tốn Dijkstra Ví dụ 1- Dijkstra (1/2) • Áp dụng thuật tốn Dijkstra tìm đường ngắn từ đỉnh số tới đỉnh cịn lại đồ thị Ví dụ - Dijkstra (2/2) 10 Cài đặt thuật toán Dijkstra • Xem code minh họa 14 Thuật tốn Bellman-Ford Mơ tả thuật tốn • Mục đích – Sử dụng để tìm đường ngắn từ đỉnh s tới đỉnh lại đồ thị – Áp dụng cho đồ thị có hướng khơng có chu trình âm (có thể có cạnh âm) • Tư tưởng – Gán nhãn tạm thời cho đỉnh – Nhãn đỉnh cho biết cận độ dài đường ngắn tới đỉnh – Các nhãn làm tốt dần (tính lại) nhờ thủ tục lặp – Mỗi phát d[v] > d[u] + A[u][v], cập nhật đ*v+= d[u]+A[u][v] 16 Thuật toán Bellman-Ford 17 Ví dụ 1: Bellman-Ford (1/2) • Áp dụng thuật tốn BellmanFord tìm đường ngắn từ đỉnh số tới đỉnh lại đồ thị 18 Ví dụ 1: Bellman-Ford (2/2) 19 Ví dụ Bellman-Ford (1/2) • Áp dụng thuật tốn BellmanFord tìm đường ngắn từ đỉnh số tới đỉnh lại đồ thị biểu diễn dạng ma trận trọng số hình bên 20 Ví dụ Bellman-Ford (2/2) Kết kiểm nghiệm theo thuật toán Bellman-Ford 21 Cài đặt thuật tốn Bellman-Ford • Xem code minh họa 22 Thuật tốn Floyd Mơ tả thuật tốn • Mục đích – Sử dụng để tìm đường ngắn tất cặp đỉnh đồ thị – Áp dụng cho đồ thị có hướng khơng có chu trình âm (có thể có cạnh âm) • Tư tưởng – Thực q trình lặp • Xét đỉnh, với tất đường (giữa đỉnh bất kỳ), đường lớn đường qua đỉnh xét, ta thay lại thành đường qua đỉnh 24 Thuật toán Floyd 25 Kiểm nghiệm thuật tốn • Áp dụng thuật tốn Floyd tìm đường ngắn tất cặp đỉnh đồ thị 26 Cài đặt thuật toán Floyd • Xem code minh họa 27 Bài tập • Làm tập 1, 5, Tài liệu giảng dạy mơn Tốn rời rạc 28 ... 15 Đường đi: 1 -2 - 3-7 - 6-9 – Đường ngắn từ đỉnh đến đỉnh 10: 21 Đường đi: 1 -2 - 3-7 - 6-9 -1 0 – Đường ngắn từ đỉnh đến đỉnh 11: 18 Đường đi: 1 -2 - 3-7 - 8- 1 2- 1 3-1 1 – Đường ngắn từ đỉnh đến đỉnh 12: 18 Đường. .. ngắn từ đỉnh đến đỉnh 2: Đường đi: 1 -2 – Đường ngắn từ đỉnh đến đỉnh 3: Đường đi: 1 -2 - 3 – Đường ngắn từ đỉnh đến đỉnh 4: 10 Đường đi: 1 -2 - 3-4 Đường ngắn từ đỉnh đến đỉnh 5: Đường đi: 1 -2 - 3-7 - 6-5 ... đi: 1 -2 - 3-7 - 6-5 – Đường ngắn từ đỉnh đến đỉnh 6: Đường đi: 1 -2 - 3-7 -6 – Đường ngắn từ đỉnh đến đỉnh 7: Đường đi: 1 -2 - 3-7 – Đường ngắn từ đỉnh đến đỉnh 8: Đường đi: 1 -2 - 3-7 -8 – Đường ngắn từ đỉnh