Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
219,05 KB
Nội dung
CH ƠNG BÀI TỐN TÌM Đ 4.1 Đ NG ĐI NG N NH T ng ng n nh t xu t phát từ đỉnh 4.1.1 Thu t toán Dijkstra 1) Đặt toán: Input: Đồ thị G gồm n đỉnh cho ma trận trọng số a với phần tử 0, a[i][j]= max khơng có cạnh nối i với j; Đỉnh s; Output: Độ dài d[v] đường từ s đến v pr[v] đỉnh trước v đường từ s đến v 2) Mơ t thu t tốn Khởi tạo: d[v]= a[s][v]; pr[v]= s; vs[v]= 0; (1) Bắt đầu tìm kiếm từ s: d[s]= 0; pr[s]= 0; vs[s]= 1; (2) Tìm đỉnh u cho d[u]= min{d[i] | vs[i] = 0} Nếu khơng tìm chuyển sang (5) Nếu tìm sang (3) (3) Đặt vs[u]= (4) Đối với tất v G thỏa mãn (vs[v]= 0) & (d[v]> d[u] + a[u][v]) thay thế: pr[v]= u; d[v]= d[u] + a[u][i]; quay lại (2) (5) Xuất d[v] pr[v] 3) Kiểm nghiệm thu t tốn Ví dụ: Cho đồ thị có trọng số G hìmh bên Tìm đường ngắn xuất phát từ đỉnh a Gi i: Lần lượt có: i Kết qu : a 0; B 2; a 2; a c 9; a 3; b 3; b d m; a 6; b 6; b 6; b e 10; a 10; a 10; a 8; d 8; d Độ dài đường ngắn từ a đến b 2: a b Độ dài đường ngắn từ a đến c 3: a b c Độ dài đường ngắn từ a đến d 6: a b d Độ dài đường ngắn từ a đến e 8: a b d e Ghi chú: Trong thực tế thường sử dụng giải thuật vào toán sau: Input: Đồ thị G gồm n đỉnh cho ma trận trọng số a với phần tử 0, a[i, j]= max khơng có cạnh nối i với j; Hai đỉnh s t; Output: Độ dài d[t] đường từ s đến t đường từ s đến t Gi i thu t: Khởi tạo: d[i]= a[s, i]; pr[i]= s; vs[i]= 0; (1) Bắt đầu tìm kiếm từ s: d[s]= 0; pr[s]= 0; vs[s]= 1; (2) Tìm đỉnh u cho d[u]= min{d[i] | vs[i] = 0} Nếu khơng tìm chuyển sang (5) Nếu tìm sang (3) (3) Đặt vs[u]= Nếu u= t chuyển sang (5); ngược lại chuyển sang (4); (4) Đối với tất i G thỏa mãn (vs[i]= 0) & (d[i]> d[u] + a[u,v]) thay thế: pr[i]= u; d[i]= d[u] + a[u, i]; quay lại (2) (5) Nếu d[t] < max xuất d[t] đường từ s đến t; ngược lại xuất khơng có đường từ s đến t V́ ḍ Cho đồ thị G = (V,E), với V = {1, 2, 3, 4, 5} biểu dĩn hình ṽ sau, tìm đường ngắn từ đỉnh đến đỉnh Kết qu : đường ngắn 1 độ dài 4) Độ phức tạp tính tốn Giải thuật Dijkstra có độ phức tạp O(n2) 4.1.2 Thu t toán Bellman-Ford 1) Đặt toán: Input: Đồ thị G gồm n đỉnh cho ma trận trọng số a khơng chứa chu trình âm, a[i][j]= max khơng có cạnh nối i với j; Đỉnh s; Output: Độ dài d[v] đường từ s đến v pr[v] đỉnh trước v đường từ s đến v 2) Mơ t thu t tốn Khởi tạo: d[v]= a[s][v]; pr[v]= s; vs[v]= 0; (1) Bắt đầu tìm kiếm từ s: d[s]= 0; pr[s]= 0; vs[s]= 1; (2) Thực n-2 lần lặp: (2.1) Với đỉnh v V\{s} thực (2.2) Với đỉnh u V thực Nếu d[v]> d[u] + a[u][v] thay thế: pr[v]= u; d[v]= d[u] + a[u][i]; (3) Xuất d[v] pr[v] 10 3) Kiểm nghiệm thu t tốn Ví dụ: Cho đồ thị có trọng số G hìmh bên Tìm đường ngắn xuất phát từ đỉnh a 11 Gi i: Lần lượt có: k Kết qu : a 0; B 2; a 2; a 2; a 2; a 2; a c 9; a 3; b 3; b 3; b 3; b d ∞; a 6; b 6; b 6; b 6; b e 10; a 8; a 8; a 8; a 8; a Độ dài đường ngắn từ a đến b 2: a b Độ dài đường ngắn từ a đến c 3: a b c Độ dài đường ngắn từ a đến d 6: a b d Độ dài đường ngắn từ a đến e 8: a b d e 12 4) Độ phức tạp tính tốn Thuật tốn Bellman-ford có độ phức tạp O(n3) 13 4.2 Đ ng ng n nh t cặp đỉnh 1) Đặt toán Input: Đồ thị G gồm n đỉnh cho ma trận trọng số a với phần tử 0, a[i][j]= max khơng có cạnh nối i với j; Output: Độ dài d[i][j] đường từ i đến j pr[i][j] đỉnh trước j đường từ i đến j 14 2) Gi i thu t Floyd - Khởi tạo: d[i][j]= a[i][j]; pr[i][j]= i; - Với k G, i G, j G cho (d[i][j]> d[i][k] + d[k][j]) thay thế: pr[i][j]= k; d[i][j]= d[i][k] + d[k][j]; - Xuất d[i][j] pr[i][j] 15 3) Độ phức tạp tính tốn Thuật tốn floyd có độ phức tạp O(n3) 16 ... s đến v 2) Mơ t thu t tốn Khởi tạo: d[v]= a[s][v]; pr[v]= s; vs[v]= 0; (1) Bắt đầu tìm kiếm từ s: d[s]= 0; pr[s]= 0; vs[s]= 1; (2) Thực n -2 lần lặp: (2. 1) Với đỉnh v V{s} thực (2. 2) Với đỉnh... lượt có: k Kết qu : a 0; B 2; a 2; a 2; a 2; a 2; a c 9; a 3; b 3; b 3; b 3; b d ∞; a 6; b 6; b 6; b 6; b e 10; a 8; a 8; a 8; a 8; a Độ dài đường ngắn từ a đến b 2: a b Độ dài đường ngắn từ... ngắn 1 độ dài 4) Độ phức tạp tính tốn Giải thuật Dijkstra có độ phức tạp O(n2) 4.1 .2 Thu t toán Bellman-Ford 1) Đặt toán: Input: Đồ thị G gồm n đỉnh cho ma trận trọng số a không chứa chu trình