Toán rời rạc 2 chương 4 bài toán tìm đường đi ngắn nhất

16 33 0
Toán rời rạc 2 chương 4 bài toán tìm đường đi ngắn nhất

Đ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

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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 2) Mô t thu t toá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] CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 4) Độ phức tạp tính tốn Giải thuật Dijkstra có độ phức tạp O(n2) CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 4) Độ phức tạp tính tốn Thuật tốn Bellman-ford có độ phức tạp O(n3) 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 3) Độ phức tạp tính tốn Thuật tốn floyd có độ phức tạp O(n3) 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... 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 CuuDuongThanCong.com... 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... có trọng số G hìmh bên Tìm đường ngắn xuất phát từ đỉnh a 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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

Ngày đăng: 13/09/2021, 13:31

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan