1. Trang chủ
  2. » Tất cả

TÌM ĐƯỜNG ĐI NGẮN NHẤT BẰNG THUẬT TOÁN MOOREDIJKSTRA DÙNG THUẬT TOÁN PRIM TIM CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT

17 19 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

Trong quá trình học tập các môn của học kỳ ba của năm 2.Đối với môn lý thuyết đồ thị giúp cho em có kiến thức cơ bản về lý thuyết đồ thị và các ứng dụng của nó.Và sao đây em sẽ thuyết giảng lại về hai chủ đề mà em đã chọn thuyết trình là bài toán điềm đường đi ngắn nhất với giải thuật Dijkstra và tìm trọng lượng của cây khung nhỏ nhất với giải thuật Prim của đồ thị vô hướng

TRƯỜNG ĐẠI HỌC BẠC LIÊU KHOA CÔNG NGHỆ THÔNG TIN TIỂU LUẬN HỌC PHẦN LÝ THUYẾT ĐỒ THỊ TÊN ĐỀ TÀI: ĐƯỜNG ĐI NGẮN NHẤT ĐỐI VỚI ĐỒ THỊ VÔ HƯỚNG BẰNG GIẢI THUẬT MORE DIJKSTRA & CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT BẰNG GIẢI THUẬT KRUSKAL CHỮ KÝ (Ký ghi rõ họ tên) Nguyễn Thành Quận SINH VIÊN: NGUYỄN THÀNH QUẬN MÃ SỐ SV: 207480201025 LỚP: 14DTH1 GVHD:NGUYỄN VĂN TRỌNG Bạc Liêu, ngày tháng năm 2022 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG MỤC LỤC MỞ ĐẦU NỘI DUNG CHƯƠNG I: LÝ THUYẾT CƠ BẢN Đồ thị vô hướng CHƯƠNG II: ĐƯỜNG ĐI NGẮN NHẤT ĐỐI VỚI ĐỒ THỊ VÔ HƯỚNG BẰNG GIẢI THUẬT MORE DIJKSTRA Bài toán đường ngắn Thuật toán Dijkstra ➢ Định lý ➢ Mệnh đề ➢ Code giải thuật Dijkstra Kết luận Cho Ví dụ cụ thể 6-9 CHƯƠNG III: CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT BẰNG GIẢI THUẬT KRUSKAL Cây khung nhỏ 10 Định nghĩa 10 Tính chất 10 ➢ Tính chất chu trình 10 ➢ Đường hẹp 10 ➢ Tính 10 ➢ Tính chất cạnh nhỏ 10 Thuật tốn tìm khung nhỏ 11 ➢ Thuật toán kruskal 11 ➢ Tính đắn thuật toán 11 ➢ VD 12 Kết luận 13 ➢ Chương trình tìm khung nhỏ theo thuật toán Kruska 13-15 TÀI LIỆU THAM KHẢO 16 ĐÁNH GIÁ CỦA GIẢNG VIÊN 17 NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG MỞ ĐẦU Lý thuyết đồ thị ngành học phát triển từ lâu lại có nhiều ứng dụng đại Những ý tưởng nhà tốn học Thụy sĩ vĩ đại Leonhard Euler đưa từ kỷ 18 Đồ thị cấu trúc rời rạc gồm đỉnh cạnh nối đỉnh Đây cơng cụ hữu hiệu để mơ hình hóa giải tốn nhiều lĩnh vực khoa học, kỹ thuật, kinh tế, xã hội, Môn lý thuyết đồ thị môn học hấp dẫn, mang tính thực tế cao Những vấn đề mơn học như: toán đường đi, cây, mạng tốn tơ màu nhiều người quan tâm, nghiên cứu Bài tốn tìm đường ngắn toán quan trọng Lý thuyết đồ thị, áp dụng để giải nhiều toán thực tế điều khiển tối ưu, giao thông vận tải, mạng viễn thông Và Bài tốn tìm khung nhỏ đồ thị số toán tối ưu đồ thị tìm ứng dụng nhiều lĩnh vực khác đời sống Vì lí đó, nên em chọn đề tài: ''Đường ngắn đồ thị vô hướng giải thuật more dijkstra & khung có trọng lượng nhỏ giải thuật kruskal'' để viết tiểu luận NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG CHƯƠNG I: LÝ THUYẾT CƠ BẢN Đồ thị vô hướng: Đồ thị vô hướng đồ thị mà cạnh khơng có hướng Mỗi cạnh ln mối quan hệ hai chiều cạnh duyệt qua hai hướng Đồ thị vô hướng đồ thị G cặp khơng có kí tự (unordered pair) G:=(V, E) đó: • V, tâp đỉnh nút • E, tập cặp khơng kí tự chứa đỉnh phân biệt, gọi cạnh Hai đỉnh thuộc cạnh gọi đỉnh đầu cuối cạnh Trong nhiều tài liệu, tập cạnh bao gồm đỉnh không phân biệt, cạnh gọi khuyên V E thường hữu hạn , phần lớn kết nghiên cứu biết không (khác) áp dụng cho đồ thị vơ hạn (infinite graph) nhiều luận khơng dùng trường hợp vô hạn CHƯƠNG II: ĐƯỜNG ĐI NGẮN NHẤT ĐỐI VỚI ĐỒ THỊ VÔ HƯỚNG BẰNG GIẢI THUẬT MORE DIJKSTRA ➢ BÀI TOÁN VỀ ĐƯỜNG ĐI NGẮN NHẤT Cho đơn đồ thị liên thơng, có trọng số G=(V,E) Tìm khoảng cách d(u0,v) từ đỉnh u0 cho trước đến đỉnh v G tìm đường ngắn từ u0 đến v Phương pháp thuật toán Dijkstra là: xác định đỉnh có khoảng cách đến u0 từ nhỏ đến lớn Trước tiên, đỉnh có khoảng cách đến a nhỏ a, với d(u0,u0)=0 Trong đỉnh v  u0, tìm đỉnh có khoảng cách k1 đến u0 nhỏ Đỉnh phải đỉnh kề với u0 Giả sử u1 Ta có: d(u0,u1) = k1 Trong đỉnh v  u0 v  u1, tìm đỉnh có khoảng cách k2 đến u0 nhỏ Đỉnh phải đỉnh kề với u0 với u1 Giả sử u2 Ta có: d(u0,u2) = k2 NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG Tiếp tục trên, tìm khoảng cách từ u0 đến đỉnh v G Nếu V={u0, u1, , un} thì: = d(u0,u0) < d(u0,u1) < d(u0,u2) < < d(u0,un) ➢ THUẬT TOÁN DIJKSTRA: ➢ Định lý: Thuật tốn Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vơ hướng liên thơng có trọng số ❖ Chứng minh: Định lý chứng minh quy nạp Tại bước k ta có giả thiết quy nạp là: (i) Nhãn đỉnh v không thuộc S độ dài đường ngắn từ đỉnh a tới đỉnh này; (ii) Nhãn đỉnh v S độ dài đường ngắn từ đỉnh a tới đỉnh đường chứa đỉnh (ngồi đỉnh này) khơng thuộc S Khi k=0, tức chưa có bước lặp thực hiện, S=V \ {a}, độ dài đường ngắn từ a tới đỉnh khác a  độ dài đường ngắn từ a tới (ở đây, cho phép đường khơng có cạnh) Do bước sở Giả sử giả thiết quy nạp với bước k Gọi v đỉnh lấy khỏi S bước lặp k+1, v đỉnh thuộc S cuối bước k có nhãn nhỏ (nếu có nhiều đỉnh có nhãn nhỏ chọn đỉnh làm v) Từ giả thiết quy nạp ta thấy trước vào vịng lặp thứ k+1, đỉnh khơng thuộc S gán nhãn độ dài đường ngắn từ a Đỉnh v phải gán nhãn độ dài đường ngắn từ a Nếu điều khơng xảy cuối bước lặp thứ k có đường với độ dài nhỏ Lk(v) chứa đỉnh thuộc S (vì Lk(v) độ dài đường ngắn từ a tới v chứa đỉnh không thuộc S sau bước lặp thứ k) Gọi u đỉnh đường thuộc S Đó đường với độ dài nhỏ Lk(v) từ a tới u chứa đỉnh không thuộc S Điều trái với cách chọn v Do (i) cuối bước lặp k+1 Gọi u đỉnh thuộc S sau bước k+1 NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG Đường ngắn từ a tới u chứa đỉnh không thuộc S chứa v khơng Nếu khơng chứa v theo giả thiết quy nạp độ dài Lk(v) Nếu chứa v tạo thành đường từ a tới v với độ dài ngắn chứa đỉnh không thuộc S khác v, kết thúc cạnh từ v tới u Khi độ dài Lk(v)+m(v,u) Điều chứng tỏ (ii) Lk+1(u)=min(Lk(u), Lk(v)+m(v,u)) ➢ Mệnh đề: Thuật tốn Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vô hướng liên thơng có trọng số có độ phức tạp O(n2 ) ❖ Chứng minh: Thuật tốn dùng khơng q n−1 bước lặp Trong bước lặp, dùng không 2(n−1) phép cộng phép so sánh để sửa đổi nhãn đỉnh Ngồi ra, đỉnh thuộc Sk có nhãn nhỏ nhờ không n−1 phép so sánh Do thuật tốn có độ phức tạp O(n2 ) ➢ Code giải thuật Dijkstra procedure Dijkstra (G=(V,E) đơn đồ thị liên thơng, có trọng số với trọng số dương) {G có đỉnh a=u0, u1, , un=z trọng số m(ui,uj), với m(ui,uj) =  (ui,uj) không cạnh G} for i := to n L(ui) :=  L(a) := S := V \ {a} u := a while S   begin for tất đỉnh v thuộc S if L(u) +m(u,v) < L(v) then L(v) := L(u)+m(u,v) u := đỉnh thuộc S có nhãn L(u) nhỏ {L(u): độ dài đường ngắn từ a đến u} S := S \ {u} NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG End ➢ KẾT LUẬN VD: a/ Dùng thuật giải Dijkstra tìm dường ngắn từ đỉnh A đến đỉnh lại: Lặp 1: Khởi tạo S = S\{A} = {B,C,D,E,F,I} A B,D,E,C Ti Πi Pi B A,D,I 15 A C A,E 135 A D A,B,I,F 15 A E A,C,F 10 A F D,E,I ∞ - I B,D,F ∞ - Lặp 2: Vì S ≠ ∅ xét: Πi = {π(B) π(C), π(D), π(E), π(F), π(I)} = {15, 135, 15, 10, ∞, ∞} = 10 = π(E) Chọn i = E, S = S\{E} = {B,C,D,F,I} M = S∩TE = {C,F} • Với j = C, gán q= π(C) = 135 π(C) = (π(C), π(E) + lEC) = min(135, 10 + 125) = 135 • Với j = F, gán q = π(F) = ∞ π(F) = min(π(F), π(E) + lEF)= min(∞, 10 + 200) = 210 q> π(F) => P(F) = E Lặp 3: Vì S ≠ ∅ xét: Πi = {π(B) π(C), π(D), π(F), π(I)} = {15, 135, 15, 210, ∞} = 15 = π(B) Chọn i = B, S = S\{B} = {C,D,F,I} M = S∩TB = {D,I} • Với j = D, gán q = π(D) = 15 π(D) = (π(D), π(B) + lBD) = min(15, 15 + 17) = 15 NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG • Với j = I, gán q = π(I) = ∞ π(I) = (π(i), π(B) + iBI) = min(∞, 15 + 11) = 26 q> π(I) => P(I) = B Lặp 4: Vì S ≠ ∅ xét: Πi = {π(C), π(D), π(F), π(I)} = {135, 15, 210, 26} = 15 = π(D) Chọn i = D, S=S\{D} = {C,F,I} M = S∩TD = {F,I} • Với j = F, gán q = π(F) = 210 π(F) = (π(F), π(D) + lDF) = min(210, 15 + 27) = 42 q> π(F) => P(F) =D • Với j = I, gán q = π(I) = 26 π(I) = (π(i), π(B) + lBI) = (26, 15 + 11) = 26 Lặp 5: Vì S ≠ ∅ xét: Πi = {π(C), π(F), π(I)} = {135, 42, 26} = 26 = π(I) Chọn i = I, S=S\{I} = {C,F} M = S∩TD = {F} • Với j = F, gán q = π(F) = 42 π(F) = (π(F), π(I) + lIF) = (42, 26 + 27) = 42 Lặp 6: Vì S ≠ ∅ xét: Πi = {π(C), π(F)} = {135, 42} = 42 = π(F) Chọn i = F, S=S\{F} = {∅} NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG M = S∩TD = {∅} Lặp 7: Vì S ≠ ∅ xét: Πi = {π(C)} = {135} = 135 = π(C) Chọn i = C, S=S\{C} = {∅} M = S∩TC = {∅} Ti Πi Pi A B,D,E,C B A,D,I 15 A C A,E 135 A D A,B,I,F 15 A E A,C,F 10 A F D,E,I 42 D I B,D,F 26 B A B C I D E F Bài toán tìm đường ngắn tốn hay, khơi dậy khả tốn học cho người học, đồng thời kích thích óc sáng tạo tư định hướng cho người học Bài toán hút quan tâm nhiều người tính đa dạng ứng dụng Do vậy, việc học tập, nghiên cứu chủ đề bổ ích giải nhiều vấn đề nảy sinh từ thực tế sống NGUYỄN THÀNH QUẬN 14DTH1 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG CHƯƠNG III CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT BẰNG GIẢI THUẬT KRUSKAL CÂY KHUNG NHỎ NHẤT Định nghĩa: Theo lý thuyết đồ thị, biết đồ thị biểu diễn cơng thức G=(V,E)G=(V,E), đồ thị GG bao gồm tập đỉnh VV tập cạnh EE Cây khung (spanning tree) đồ thị tập hợp cạnh đồ thị thỏa mãn tập cạnh không chứa chu trình liên thơng (từ đỉnh tới đỉnh khác theo mà dùng cạnh khung) Trong đồ thị có trọng số, khung nhỏ (minimum spanning tree) khung có tổng trọng số cạnh nhỏ TÍNH CHẤT ➢ Tính chất chu trình: Trong chu trình CC bất kỳ, ee cạnh có trọng số lớn tuyệt đối (khơng có cạnh có trọng số ee) ee nằm khung nhỏ ➢ Đường hẹp nhất: Xét đỉnh uu, vv đồ thị Nếu ww trọng số cạnh lớn đường từ uu đến vv khung nhỏ đồ thị ta khơng thể tìm đường từ uu đến vv đồ thị ban đầu qua cạnh có trọng số nhỏ ww ➢ Tính nhất: Nếu tất cạnh có trọng số khác có khung nhỏ Ngược lại, vài cạnh có trọng số giống có nhiều khung nhỏ ➢ Tính chất cạnh nhỏ nhất: Nếu ee cạnh có trọng số nhỏ đồ thị, khơng có cạnh có trọng số ee ee nằm khung nhỏ đồ thị NGUYỄN THÀNH QUẬN 14DTH1 10 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG THUẬT TỐN TÌM CÂY KHUNG NHỎ NHẤT ➢ Thuật toán Kruskal Ý tưởng thuật toán: Ban đầu đỉnh riêng biệt, ta tìm khung nhỏ cách duyệt cạnh theo trọng số từ nhỏ đến lớn, hợp lại với Cụ thể hơn, giả sử cạnh xét nối đỉnh uu vv, đỉnh nằm khác ta thêm cạnh vào khung, đồng thời hợp chứa uu vv Giả sử ta cần tìm khung nhỏ đồ thị GG Thuật toán bao gồm bước sau: Khởi tạo rừng FF (tập hợp cây), đỉnh G tạo thành riêng biệt Khởi tạo tập SS chứa tất cạnh GG Chừng SS khác rỗng FF gồm • Xóa cạnh nhỏ SS • Nếu cạnh nối hai khác FF, thêm vào FF hợp hai kề với làm • Nếu khơng loại bỏ cạnh • Khi thuật toán kết thúc, rừng gồm khung nhỏ đồ thị G ➢ Tính đắn thuật tốn: Rõ ràng đồ thị thu theo thuật tốn có n−1 cạnh khơng có chu trình Vì theo Định lý 6.1.3, khung đồ thị G Như cịn phải T có độ dài nhỏ Giả sử tồn khung S đồ thị mà m(S) ➢ VD: Tìm khung có trọng lượng nhỏ giải thuật Kruskal NGUYỄN THÀNH QUẬN 14DTH1 11 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG 25 B D 260 20 260 A 300 30 25 C 260 G 30 20 E Lặp Cạnh Chọn/Không chọn 10 11 EG-20 DG-20 AC-25 BD-25 DE-30 CD-30 AB-260 BC-260 CE-260 CG-300 Chọn Chọn Chọn Chọn Không Chọn Chọn Không chọn Không chọn Không chọn Không chọn Trọng lượng W(J) 20 40 65 90 90 120 120 120 120 120 Vậy khung có trọng lượng nhỏ 120 biểu diễn sau: 25 B D 20 G A 30 25 C NGUYỄN THÀNH QUẬN 14DTH1 E 20 12 TIỂU LUẬN MÔN LÝ THUYẾT ĐỒ THỊ GVHD: NGUYỄN VĂN TRỌNG KẾT LUẬN ➢ Chương trình tìm khung nhỏ theo thuật toán Kruskal #include using namespace std; #define MAX 50 #define TRUE #define FALSE int n, m, minl, connect; int dau[500], cuoi[500], w[500];//mảng chứa đỉnh đầu, cuối độ dài cạnh đồ thị int daut[50], cuoit[50], father[50]; void Init(void){ freopen("baotrum.in", "r",stdin); cin>>n>>m; cout

Ngày đăng: 26/02/2023, 11:04

Xem thêm: