1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng lý thuyết đồ thị chương 5 tôn quang toại

34 2 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 34
Dung lượng 307,78 KB

Nội dung

CHƯƠNG 5 ĐƯỜNG ĐI NGẮN NHẤT  TRÊN ĐỒ THỊ Tơn Quang Toại Khoa CNTT, Đại học Ngoại ngữ ‐ Tin học TP.HCM Nội dung Các khái niệm mở đầu Phát biểu bài tốn Thuật tốn Dijkstra Thuật tốn Ford – Bellman  Thuật tốn Floyd Các khái niệm mở đầu Đồ thị có trọng số: Đồ thị G=(V, E) có trọng số cạnh e=(u,v) của đồ thị gán với con số w(u,v) và gọi trọng số cạnh e.  Đường đi: Đường 2 đỉnh s và t được cho dãy đỉnh đó: Các khái niệm mở đầu Độ dài đường đi: Độ dài đường tổng trọng số tất cạnh đường 𝑤 𝑝 𝑤 𝑥 ,𝑥 Phát biểu bài tốn Ví dụ: 18 p = (a, d, f, g) w(p) = 6 + 8 + 2 = 16 b a c 12 g d e 14 f Các khái niệm mở đầu Biểu diễn đồ thị trọng số Cách 1: Ma trận trọng số 𝑣 0/∞ 𝑤 𝑖, 𝑗 𝑛ế𝑢 𝑖, 𝑗 ∉ 𝐸 𝑛ế𝑢 𝑖, 𝑗 ∈ 𝐸 int[,] v; int n; Các khái niệm mở đầu Cách 2: Danh sách cạnh LinkedList e; Cách 3: Danh sách kề LinkedList[] v; Phát biểu bài tốn Phát biểu bài tốn: Cho đồ thị G=(V, E) có trọng số và hai đỉnh s và t  cho trước Hãy tìm 1 đường đi từ s đến t sao cho độ dài  đường đi là ngắn nhất Phát biểu bài tốn 18 Ví dụ: b p = (a, d, f, g) w(p) = 6 + 8 + 2 = 16 g=t d pshortest = (s,                   ,t) w(pshortest) =  s=a c 12 e 14 f Thuật tốn Dijkstra Giả định của thuật tốn Dijkstra Khơng có cạnh âm trong đồ thị s và t liên thơng với nhau Ý tưởng thuật tốn Dijkstra: Mỗi đỉnh   của đồ thị, ta gán một giá trị dist[i]: là  độ dài đường đi ngắn nhất từ s đến i Nhiệm vụ: Giảm giá trị mảng dist[ ] từng bước Thuật tốn Bellman – Ford Thuật tốn Dijkstra khơng thể thực hiện khi đồ  thị có cạnh âm (đồ thị vơ hướng) hay đồ thị có  chu trình âm có thể đến được (đồ thị có  hướng) Thuật tốn Bellman – Ford xác định các chu  trình âm hay trả về cây đường đi ngắn nhất Thuật tốn Bellman – Ford Thuật tốn Bellman – Ford  Bước 1 (Khởi tạo) • 𝑑 𝑖 • 𝑑 𝑠 • k=0 ∞, ∀𝑖 ∈ 𝑉 Bước 2 (Lặp) • k = k+1 • Cập Nhật: Với mọi đỉnh a kề̀ b – 𝑑 𝑠 –  𝑑 𝑏 • Kiểm tra:  𝑑 – Nếu  𝑑 𝑖 𝑑 𝑎 𝑤 𝑎, 𝑏 𝑖 , ∀𝑖 ∈ 𝑉 (tức là 𝑑 𝑖  đã ổn định) thì dừng thuật tốn      Lặp cho đến khi k=n Bước 3: Nếu k=n thì đồ thị có chu trình âm Ví dụ Ví dụ 1: Dùng thuật tốn Bellman – Ford Tìm  đường đi ngắn nhất từ a đến các đỉnh cịn lại 18 b s=a c 12 g d e 14 f Ví dụ Ví dụ 2: Tìm đường đi ngắn nhất từ đỉnh a đến  các đỉnh cịn lại bằng thuật tốn Bellman – Ford  3 1 Ví dụ Ví dụ 3: Tìm đường đi ngắn nhất từ đỉnh a đến  các đỉnh cịn lại bằng thuật tốn Bellman – Ford  b a e f -6 c d Thuật toán Floyd – Warshall Thuật toán Floyd – Warshall: Thuật toán Floyd  – Warshall cho chúng ta cách tìm đường ngắn tất cặp đỉnh đồ thị có chu trình âm Thuật tốn Floyd – Warshall Thuật tốn Floyd – Warshall: Input: G=(V, E) Output:  • Ma trận đường đi ngắn nhất giữa các cặp đỉnh  – d[i, j]: độ dài đường đi ngắn nhất từ đỉnh i đến đỉnh j • Ma trận ghi nhận đường đi  – pre[i, j]: ghi nhận đỉnh đi trước đỉnh j trong đường đi ngắn nhất  từ đỉnh i đến đỉnh j Thuật tốn Floyd – Warshall Thuật tốn Floyd – Warshall: Bước 1 (Khởi tạo) • 𝑑 𝑖, 𝑗 𝑎 𝑖, 𝑗 , 𝑖, 𝑗 ∈ 𝑉 ∞, 𝑖, 𝑗 ∉ 𝑉 • pre 𝑖, 𝑗 𝑖 Bước 2 (Lặp) for (int k=0; k

Ngày đăng: 29/08/2023, 12:55