Tìm cây bao trùm nhỏ nhất (tiếng Anh: minimum spanning tree) là bài tốn tối ưu có nhiều ứng dụng trong thực tế. Nó là bài tốn tìm hệ thống liên thông với chi phí nhỏ nhất
Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN (Học kỳ II, Niên khóa 2008-2009) GIÁO VIÊN HƯỚNG DẪN : STT HỌ VÀ TÊN MSCB Nguyễn Thành Quí 001945 SINH VIÊN THỰC HIỆN : STT HỌ VÀ TÊN MSSV 1081642 Huỳnh Hải Đăng THƯỞNG (Tối đa điểm) I HÌNH THỨC( Tối đa 0,5 điểm) Bìa (tối đa 0,25 điểm) Các tiêu đề : Trường ĐHCT, Khoa CNTT, Bộ môn Các niên luận : Tên đề tài Giáo viên hướng dẫn : chức danh, họ tên Thông tin sinh viên thực : họ tên, mã số, lớp Năm thực Bố cục (tối đa 0,25 điểm) Nhận xét giáo viên hướng dẫn giáo viên chấm Mục lục : cấu trúc chương, mục tiểu mục Phụ lục (nếu có) Tài liệu tham khảo II NỘI DUNG (Tối đa 3,5 điểm) Tổng Quan (tối đa 0,5 điểm) Mô tả tốn, mục tiêu cần đạt (0,25 điểm) Hướng giải kế hoạch thực (0,25 điểm) Lý thuyết (tối đa 0,5 điểm) Các khái niệm sử dụng đề tài Kết vận dụng lý thuyết đề tài Ứng dụng (tối đa 2,0 điểm) Phân tích yêu cầu tốn, xây dựng cấu trúc liệu cần thiết (0,5 điểm) Giải thuật (Lưu đồ - Ngôn ngữ giả ) (1,0 điểm) Giới thiệu chương trình (0,5 điểm) Kết luận (tối đa 0,5 điểm) Nhận xét kết đạt Hạn chế Hướng phát triển III CHƯƠNG TRÌNH DEMO (Tối đa 5,0) Giao diện thân thiện với người dùng (tối đa 1,0 điểm) Hướng dẫn sử dụng (0,5 điểm) Kết thực với kết cảu phần ứng dụng (3,5 điểm) Cần Thơ, ngày tháng năm 2010 GIÁO VIÊN HƯỚNG DẪN SVTH: Huỳnh Hải Đăng Trang 1/16 ĐIỂM Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí NHẬN XÉT CỦA GIÁO VIÊN Cần Thơ, ngày… tháng năm Giáo viên hướng dẫn MỤC LỤC SVTH: Huỳnh Hải Đăng Trang 2/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí NHẬN XÉT CỦA GIÁO VIÊN Mô tả .4 KẾT LUẬN- ĐÁNH GIÁ .15 I Kết đạt 15 II Hạn chế chương trình 15 III Hướng phát triển 15 PHỤ LỤC 16 16 Hướng dẫn chạy chương trình: .16 Khởi động tập tin main.exe 16 Nhập liệu cho đồ thị bấm phím số 16 Chạy giải thuật Prim bấm phím số 16 Thốt lưu liệu hành vào tệp graph.txt bấm phím số .16 Duyệt đồ thị theo chiều sâu bấm phím số 16 Duyệt đồ thị theo chiều rộng bấm phím số .16 Các tài liệu tham khảo 16 TỔNG QUAN Tìm bao trùm nhỏ (tiếng Anh: minimum spanning tree) tốn tối ưu có nhiều ứng dụng thực tế Nó tốn tìm hệ thống liên thơng với chi phí nhỏ Hai thuật tốn tìm bao trùm nhỏ thường nhắc đến thuật tốn Prim thuật tốn Krusskal Cho G=(X,E) đồ thị liên thông Ngồi ra, hàm trọng số W(e), xác định tập cạnh E G Cả hai thuật tốn Prim Kruskal dựa tư tưởng giải thuật tham ăn : Ở bước thuật tốn ta chọn bổ sung vào cạnh có trọng số nhỏ Ở ta đề cập đến thuật tốn Prim Giải thuật Prim Vài nét R C Prim Robert Clay Prim (sinh 1921 Sweetwater, Texas) nhà tốn học khoa học máy tính Mỹ Năm 1941 ông lấy cử nhân khoa kỹ thuật điện đại học Princeton Sau năm SVTH: Huỳnh Hải Đăng Trang 3/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí 1949, ông nhận Ph.D tốn học Giải thuật mang tên Prim tìm từ năm 1930 nhà tốn học Vojtěch Jarník Prim hồn thiện vào năm 1957 asd Mô tả Gọi T bao trùm xây dựng Chọn đỉnh s G cho vào T Khi T có đỉnh chưa có cạnh Nếu T gồm tất đỉnh G T bao trùm cần tìm Kết thúc Nếu G cịn có đỉnh khơng thuộc T, G liên thơng nên có cạnh nối đỉnh T với đỉnh ngồi T, chọn cạnh có trọng số nhỏ số cho vào T Quay lại I Các mục tiêu cần đạt được: - Dữ liệu nhập từ bàn phím ma trận trọng số - Thiết kế giải thuật Prim xuất hình khung có trọng lượng nhỏ II Hướng giải quyết: - Viết chương trình nhập vào ma trận trọng số - Sử dụng giải thuật Prim để tìm khung có trọng lượng nhỏ - Xuất hình đồ họa bước trong giải thuật Prim III Kế hoạch thực Tuần Tuần - Phân tích yêu - Cài đặt cấu trúc Tuần - Cải tiến chương cầu liệu cần thiết trình chạy chế - Tìm kiếm tài kiểm tra tính độ đồ họa liệu đắn chúng - Kiểm tra vét cạn tất - Giải tốn - Viết chương trình trường hợp mẫu giấy chạy chế độ text - Cải tiến để chương - Phân tích giải - Kiểm tra tính trình chịu tốn đắn chương trình sai xót ngơn ngử giả SVTH: Huỳnh Hải Đăng khâu nhập liệu Trang 4/16 Tuần - Viết báo cáo Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí LÝ THUYẾT I Các khái niệm Một đồ thị G bao gồm tập hợp V đỉnh tập hợp E cạnh, ký hiệu G=(V,E) Các đỉnh gọi nút (node) hay điểm (point) Các cạnh nối hai đỉnh, hai đỉnh trùng Đồ thị gọi liên thông với mõi cặp cạnh i,j bất ky ln tìm đường nối i với j Hai đỉnh có cạnh nối gọi hai đỉnh kề (adjacency) Một cạnh nối hai đỉnh v, w coi cặp điểm (v,w) Nếu cạnh đồ thị G có thứ tự G gọi đồ thị có hướng (directed graph) Nếu cạnh đồ thị G khơng có thứ tự đồ thị G đồ thị vô hướng (undirected graph) Đường đồ thị dãy đỉnh: cho, đỉnh dãy (không kể đỉnh đầu tiên) kề với đỉnh trước cạnh đó, nghĩa là: ∀ i = 2, 3, … , k-1, k : (xi-1, xi) ∈ E SVTH: Huỳnh Hải Đăng Trang 5/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Q Ta nói đường từ đỉnh đầu x1 đến đỉnh cuối xk Số cạnh đường gọi độ dài đường Đường đơn đường mà đỉnh khác đôi Đồ thị vô hướng G=(V,E) gọi liên thông với cặp đỉnh i, j ln tìm đường nối i j Đường nối i j đường nối j i Cây đồ thị vô hướng, liên thơng, khơng có chu trình Cây Cây khung: Cho G đơn đồ thị Một gọi khung G đồ thị G chứa tất đỉnh G Cây khung nhỏ nhất: Nói chung, ta định nghĩa khung nhỏ cho đồ thị G sau: Nếu cạnh eij = (vi, vj) có trọng số cij, khung nhỏ tập hợp cạnh ký hiệu Espan, cho: C = sum( cij | ∀eij ∈ Espan ) nhỏ II Các cách biểu diễn đồ thị : Có nhiều cách biểu diễn đồ thị biểu diễn ma trận đỉnh-cung, ma trận đỉnhcạnh, ma trận trọng số, danh sách liên kết, ….Ở nghiên cứu cách biểu diễn đồ thị ma trận trọng số sau : Với đồ thị G=(V,E) , người ta thường gán cho cung hay cạnh (i,j) giá trị c ij gọi trọng số cung hay cạnh Ma trận A biểu diễn đồ thị G=(V,E) có dạng : A=[aij] với i,j V Trong : aij=0 cạnh/cung (i,j) khơng thuộc E, aij=wij cạnh/cung (i,j) thuộc E Ví dụ : Xét đồ thị vơ hướng có trọng số : 5 SVTH: Huỳnh Hải Đăng Trang 6/16 11 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí Ma trận trọng số biểu diễn đồ thị : 0 0 0 11 11 III Duyệt đỉnh đồ thị : Xét đồ thị G=(V,E) Gọi i đỉnh G Ký hiệu L cấu trúc liệu kiểu danh sách lưu trữ đỉnh G Thuật tốn duyệt đỉnh G trình bày cách tổng quát sau : Nạp đỉnh i vào danh sách L Lấy đỉnh x khỏi đầu danh sách Nếu x chưa duyệt duyệt đỉnh x Nạp đỉnh kề với x chưa duyệt vào danh sách L Nếu L khác rỗng quay lên bước Dừng Duyệt đồ thị theo chiều sâu DFS (Depth-First Search) Nếu thuật tốn duyệt đỉnh đồ thị, danh sách L tổ chức theo kiểu ngăn xếp (vào trước sau) ta có phương pháp duyệt theo chiều sâu Trong phương pháp lần duyệt đỉnh ta duyệt đến tận nhánh chuyển sang duyệt nhánh khác Duyệt đồ thị theo chiều rộng BFS (Breadth-First Search) Nếu thuật tốn duyệt đỉnh đồ thị, danh sách L tổ chức theo kiểu hàng đợi (vào trước trước) ta có phương pháp duyệt theo chiều rộng Trong phương pháp việc duyệt có tính chất lan rộng Một đỉnh duyệt xong sau xét hết tất đỉnh kề với Kiểm tra tính liên thơng đồ thị : Hai giải thuật duyệt theo chiều sâu DFS duyệt theo chiều rộng BFS thường sử dụng để kiểm tra tính liên thơng đồ thị Khi duyệt đỉnh đồ thị tập hợp đỉnh đánh số tạo thành phận liên thông đồ thị Nếu tất đỉnh đồ thị đánh số kết luận đồ thị liên thơng, ngược lại đỉnh chưa duyệt, áp dụng lại giải thuật tập hợp đỉnh chưa duyệt để tìm phận liên thơng IV Giải thuật Prim : Mô tả Gọi T bao trùm xây dựng SVTH: Huỳnh Hải Đăng Trang 7/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí Chọn đỉnh s G cho vào T Khi T có đỉnh chưa có cạnh Nếu T gồm tất đỉnh G T bao trùm cần tìm Kết thúc Nếu G cịn có đỉnh khơng thuộc T, G liên thơng nên có cạnh nối đỉnh T với đỉnh ngồi T, chọn cạnh có trọng số nhỏ số cho vào T Quay lại Kết vận dụng lý thuyết vào đề tài: Nhập vào đồ thị vô hướng sau: Kiểm tra tính liên thơng đồ thị : đồ thị liên thong Bước khởi đầu: U={1},T=∅ Bước ta chọn cạnh (1,3) = cạnh ngắn thỏa điều kiện giải thuật Prim Ta có U={1,3},T={(1,3)} Kế tiếp cạnh (3,6) = cạnh ngắn thỏa điều kiện giải thuật Prim Ta có U={1,3,6},T={(1,3)(3,6)} Kế tiếp cạnh (6,4) = cạnh ngắn thỏa điều kiện giải thuật Prim Ta có U={1,3,6,4},T={(1,3)(3,6)(6,4)} Tiếp tục, cạnh (3,2) = cạnh ngắn thỏa điều kiện giải thuật Prim Ta có U={1,3,6,4,2},T={(1,3),(3,6), (6,4),(3,2)} Cuối cạnh (2,5)=3 cạnh ngắn thỏa điều kiện giải thuật Prim Ta có U={1,3,6,4,2,5},T={(1,3),(3,6), (6,4),(3,2),(2,5),} Giải thuật dừng ta có bao trùm hình bên SVTH: Huỳnh Hải Đăng Trang 8/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí begin Sai Ứng Dụng G=(V,E) đồ thị liên thông I Lưu đồ giải thuật Prim: Đúng U={1},T=∅ Sai U= V = ∞ For i ∈ U Đúng Kết thúc for For j ∈ G-U End Sai min>(i,j) and (i,j) ≠ Đúng min=(i,j) u=i, v=j Kết thúc for U=U+v T=T+(u,v) SVTH: Huỳnh Hải Đăng Trang 9/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim II.Lưu đồ duyệt theo chiều sâu đỉnh i begi n Duyệt đỉnh i Xét đỉnh j kề với i chưa duyệt Đ S Duyệt đỉnh j end III Lưu đồ duyệt theo chiều rộng đỉnh i begi n Duyệt đỉnh i Đánh dấu duyệt tất j kề i Xét đỉnh j kề với i duyệt Đ Đ Duyệt đỉnh j end SVTH: Huỳnh Hải Đăng Trang 10/16 S GVHD: Nguyễn Thành Q Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim IV Giới thiệu chương trình Chương trình gồm chức sau: Nhập đồ thị Vẽ đồ thị Tìm bao trùm theo giải thuật Prim Thốt lưu trạng liệu vào file graph.txt Duyệt đồ thị theo chiều rộng Duyệt đồ thị theo chiều sâu Nhập đồ thị Người dùng nhập số đỉnh đồ thị nhập trọng số cạnh SVTH: Huỳnh Hải Đăng Trang 11/16 GVHD: Nguyễn Thành Q Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim Vẽ đồ thị: SVTH: Huỳnh Hải Đăng Trang 12/16 GVHD: Nguyễn Thành Quí Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí Giải thuật Prim Bắt đầu từ đỉnh 1, chương trình thực chọn cạnh có trọng số nhỏ người dung nhấn phím Chương trình dừng vào thông báo trọng lượng bao trùm tối thiểu tất đỉnh chọn Duyệt theo chiều rộng Người dùng chọn đỉnh chương trình thị thứ tự duyệt theo chiều rộng Dyệt theo chiều sâu SVTH: Huỳnh Hải Đăng Trang 13/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí Người dùng chọn đỉnh chương trình thị thứ tự duyệt theo chiều sâu SVTH: Huỳnh Hải Đăng Trang 14/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Quí KẾT LUẬN- ĐÁNH GIÁ I Kết đạt Nhìn chung chương trình đáp ứng mục tiêu cần đạt đề tài đặt Ngồi qua trình thực chương trình, thân rút số kinh nghiệm trình xây dựng thiết kế chương trình Giúp nâng cao khả tư duy, khả vận dụng kiến thức lý thuyết học vào việc giải tốn , vấn đề thực tế II Hạn chế chương trình Chương trình chạy DOS đồ họa khơng đẹp không chạy hệ điều hành Không gian biểu diễn đồ thị 2D nên khó quan sát số lượng đỉnh đồ thị tăng 15.( Vì lý nên chương trình giới hạn số đỉnh người dùng nhập 20, chương trình chạy với n đỉnh ) III Hướng phát triển Viết chương trình VC++ chạy hệ điều hành mới, sử dụng chuẩn đồ họa OpenGL để biểu diễn đồ thị không gian 3D, làm cho người dùng quan sát dễ dàng số lượng đồ thị lớn SVTH: Huỳnh Hải Đăng Trang 15/16 Đề Tài:Tìm khung có trọng lượng nhỏ giải thuật Prim GVHD: Nguyễn Thành Q PHỤ LỤC Hướng dẫn chạy chương trình: Khởi động tập tin main.exe Nhập liệu cho đồ thị bấm phím số Vẽ đồ thị hình bấm phím số Chạy giải thuật Prim bấm phím số Thốt lưu liệu hành vào tệp graph.txt bấm phím số Duyệt đồ thị theo chiều sâu bấm phím số Duyệt đồ thị theo chiều rộng bấm phím số Các tài liệu tham khảo [1] Bài giảng: TỐN RỜI RẠC (Bộ Môn Hệ Thống Thông Tin – Tốn Ứng Dụng, Khoa Công Nghệ Thông Tin, Trường Đại Học Cần Thơ) [2] Side giảng đồ thị Thạc sĩ Nguyễn Văn Linh – Trường Đại Học Cần Thơ [3] Giáo trình Lập Trình Hướng Đối Tượng C++ Thạc sĩ Trương Văn Trí Cơng – Trường Đại Học Cần Thơ [4] Giáo Trình Lập Trình C++ Lập Trình Hướng Đối Tượng GS Phạm Văn Ất – Nhà xuất khoa học kỹ thuật Hà Nội [5]http://vi.wikipedia.org/wiki/C%C3%A2y_bao_tr%C3%B9m_nh%E1%BB%8F_nh %E1%BA%A5t SVTH: Huỳnh Hải Đăng Trang 16/16 ... trận trọng số - Thiết kế giải thuật Prim xuất hình khung có trọng lượng nhỏ II Hướng giải quyết: - Viết chương trình nhập vào ma trận trọng số - Sử dụng giải thuật Prim để tìm khung có trọng lượng. .. lại giải thuật tập hợp đỉnh chưa duyệt để tìm phận liên thông IV Giải thuật Prim : Mô tả Gọi T bao trùm xây dựng SVTH: Huỳnh Hải Đăng Trang 7/16 Đề Tài :Tìm khung có trọng lượng nhỏ giải thuật Prim. .. kiện giải thuật Prim Ta có U={1,3,6,4,2,5},T={(1,3),(3,6), (6,4),(3,2),(2,5),} Giải thuật dừng ta có bao trùm hình bên SVTH: Huỳnh Hải Đăng Trang 8/16 Đề Tài :Tìm khung có trọng lượng nhỏ giải thuật