Bài toán tìm bộ ghép cực đại trên đồ thị ứng dụng giải một số bài toán trong thực tế

80 73 1
Bài toán tìm bộ ghép cực đại trên đồ thị ứng dụng giải một số bài toán trong thực 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

i ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG VŨ MINH TIỆP BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ, ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TRONG THỰC TẾ LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2015 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ii ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG VŨ MINH TIỆP BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ, ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TRONG THỰC TẾ Chuyên ngành: Khoa học máy tính Mã số: 60 48 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Trương Hà Hải Thái Nguyên - 2015 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn iii LỜI CAM ĐOAN Em xin cam đoan: Luận văn tha ̣c si ̃ Khoa học máy tính “ Bài tốn tìm ghép cực đại đồ thị, ứng dụng giải số toán thực tế” nà y cơng trình nghiên cứu thực cá nhân em, thực sở nghiên cứu lý thuyết và hướng dẫn khoa học Tiến sĩ Trương Hà Hải, Trường Đại học Công nghệ Thông tin Truyền thông Em xin chiụ trách nhiê ̣m về lời cam đoan này Thái Nguyên, ngày tháng năm 2015 Tác giả Vũ Minh Tiệp Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn iv LỜI CẢM ƠN Để hoàn thành luận văn, em xin chân thành cảm ơn Trường Đại học Công nghệ Thông tin Truyền thơng, Phịng Đào tạo, thầy, giáo giảng dạy lớp cao học Khoa học máy tính K12E quan tâm, tạo điều kiện thuận lợi, tận tình giảng dạy giúp đỡ em thời gian theo học trường Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến TS Trương Hà Hải, người dành nhiều thời gian, tâm huyết hướng dẫn em suốt q trình nghiên cứu hồn thành luận văn Em xin cảm ơn cán bộ, giảng viên đồng nghiệp Trường Trung Cấp Kỹ Thuật Vĩnh Phúc tạo điều kiện thời gian để em học tập hồn thành luận văn Mă ̣c dù đã cố gắ ng hế t sức hoàn thiê ̣n luâ ̣n văn, nhiên chắ c chắ n vẫn còn nhiều thiế u sót, rấ t mong sự góp ý quý báu của quý thầ y cô và ba ̣n Xin trân trọng cảm ơn Thái Nguyên, ngày tháng năm 2015 Tác giả Vũ Minh Tiệp Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn v MỤC LỤC Đặt vấn đề CHƯƠNG CƠ SỞ LÝ THUYẾT VỀ ĐỒ THỊ VÀ ĐỘ PHỨC TẠP THUẬT TOÁN 1.1 CÁC KHÁI NIỆM CƠ BẢN 1.1.1 Khái niệm đồ thị 1.1.2 Các loại đồ thị 1.1.3 Biểu diễn đồ thị 11 1.2 ĐỘ PHỨC TẠP TÍNH TỐN VÀ TÍNH HIỆU QUẢ CỦA THUẬT TỐN 16 1.2.1 Định nghĩa thuật tốn 16 1.2.2 Phân tích độ phức tạp thuật toán 17 1.2.3 Tối ưu thuật toán 18 1.3 MỘT SỐ THUẬT TỐN TÌM KIẾM TRÊN ĐỒ THỊ 19 1.3.1 Thuật tốn tìm kiếm theo chiều sâu (DEPTH FIRST SEARCH) 19 1.3.2 Thuật toán tìm kiếm theo chiều rộng (BREADTH FIRST SEARCH) 21 CHƯƠNG BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TOÁN 24 2.1 ĐỒ THỊ HAI PHÍA 24 2.1.1 Định nghĩa 24 2.1.2 Các toán đồ thị hai phía 26 2.2 BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA 26 2.2.1 Bài tốn ghép đơi khơng trọng khái niệm 26 2.2.2 Thuật toán đường mở 28 2.2.3 Độ phức tạp thuật toán 29 2.3 BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI VỚI TỔNG TRỌNG SỐ CỰC ĐẠI HOẶC CỰC TIỂU TRÊN ĐỒ THỊ HAI PHÍA 29 2.3.1 Bài tốn phân cơng 29 2.3.2 Thuật tốn tìm cặp ghép với tổng trọng số cạnh lớn nhỏ 30 2.3.3 Thuật toán Hung-ga-ri 33 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn vi 2.3.4 Phương pháp đối ngẫu Kuhn-Munkres 37 2.3.5 Đánh giá độ phức tạp cải tiến thuật toán 39 2.4 BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ TỔNG QUÁT 42 2.4.1 Các khái niệm 42 2.4.2 Thuật toán Edmonds (1965) 44 2.4.3 Thuật toán Lawler (1973) 46 CHƯƠNG MỘT SỐ BÀI TOÁN ỨNG DỤNG TRONG THỰC TẾ 50 3.1 BÀI TOÁN ĐIỀU HÀNH TAXI 50 3.1.1 Phát biểu toán 50 3.1.2 Phân tích tốn xây dựng thuật toán 50 3.2 BÀI TOÁN XẾP LỚP HỌC THEO TÍN CHỈ 60 3.2.1 Mơ hình đào tạo theo học chế tín 60 3.2.2 Phát biểu toán 61 3.2.3 Phân tích toán xây dựng thuật toán 62 TÀI LIỆU THAM KHẢO 73 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn vii DANH MỤC CÁC HÌ NH VẼ Hình 1: Ví dụ mơ hình đồ thị Hình 2: Đơn đồ thị vô hướng đơn đồ thị vô hướng Hình 3: Đa đồ thị vơ hướng Hình 4: Đơn đồ thị có hướng khơng phải đơn đồ thị có hướng Hình 5: Đa đồ thị có hướng Hình 6: Đơn đồ thị vô hướng Hình 7: Đồ thị có hướng 10 Hình 8: Ví dụ biểu diễn đồ thị danh sách cạnh 12 Hình 9: Ví dụ biểu diễn đồ thị danh sách liền kề 13 Hình 10: Ví dụ biểu diễn đồ thị ma trận kề 14 Hình 11: Ví dụ biểu diễn đồ thị ma trận liên thuộc 16 Hình 12: Quá trình tìm kiếm theo chiều sâu 20 Hình 13: Cây BFS 21 Hình 14: Quá trình tìm kiếm theo chiều rộng 23 Hình 15: Ví dụ đồ thị hai phía khơng phải đồ thị hai phía 24 Hình 16: Đồ thị hai phía 28 Hình 17: Ví dụ tốn tìm ghép cực đại đồ thị 43 Hình 18: Phép chập Blossom 45 Hình 19: Nở Blossom để dị đường xuyên qua Blossom 46 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn Đặt vấn đề Ngày việc giải toán lớn cho hệ thống đòi hỏi hợp tác chặt chẽ chuyên gia lĩnh vực chuyên mơn, chun gia Tốn, Tốn ứng dụng chuyên gia Tin học, kỹ sư lập trình Việc thiết lập mơ hình hợp lý, phản ánh chất toán thực tế đồng thời khả thi phương diện tính tốn ln điều đáng quan tâm Đặc biệt chuyên ngành liên quan tốn học chun ngành quan tâm, số Lý thuyết đồ thị Đồ thị biểu diễn nhiều cấu trúc, nhiều tốn thực tế biểu diễn đồ thị Ví dụ, cấu trúc liên kết website biểu diễn đồ thị có hướng sau: đỉnh trang web có website, tồn cạnh có hướng nối từ trang A tới trang B A có chứa liên kết tới B Do vậy, phát triển thuật toán xử lý đồ thị mối quan tâm khoa học máy tính Mặc dù Lý thuyết đồ thị khoa học phát triển từ lâu lại có nhiều ứng dụng đại, đặc biệt thuật tốn đồ thị có nhiều ứng dụng nhiều lĩnh vực khác như: Mạng máy tính, Lý thuyết mã, Tối ưu hố, Kinh tế học Những ý tưởng lý thuyết đồ thị nhà toán học Thụy sĩ Leonhard Euler đưa từ kỷ 18 Ông dùng lý thuyết đồ thị để giải toán cầu Konigsberg tiếng Đồ thị dùng để giải nhiều toán thuộc lĩnh vực khác như: người ta dùng đồ thị để biểu diễn cạnh tranh lồi mơi trường sinh thái, dùng đồ thị biểu diễn có ảnh hưởng đến tổ chức dùng đồ thị để giải tốn tốn tính số tổ hợp khác chuyến xe hai thành phố mạng giao thơng, tốn tham quan tất phố Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn thành phố cho phố qua lần, hay tốn tìm số màu cần thiết để tô vùng khác đồ, Đồ thị với trọng số gán cho cạnh dùng để giải tốn tốn tìm đường ngắn hai thành phố mạng giao thơng, tốn phân cơng lao động cho tổng lợi nhuận thu lớn Đặc biệt, nhiều tốn thực tế sử dụng mơ hình đồ thị thuật toán đồ thị giải hiệu như: toán điều hành taxi, tốn xếp lớp học theo tín đưa mơ hình tốn tìm ghép cực đại đồ thị sử dụng thuật tốn tương ứng Chính đồ thị sử dụng để giải nhiều toán thuộc nhiều lĩnh vực khác cách dễ dàng phổ biến nên đồ thị giữ vai trò quan trọng sống, đặc biệt lĩnh vực công nghệ thông tin, dựa vào đồ thị thuật toán đồ thị người ta xây dựng nên phần mềm hữu ích giải tốn thực tế cách nhanh chóng tối ưu Nhận thấy tính thiết thực vấn đề gợi ý giảng viên hướng dẫn, chọn nội dung nghiên cứu “Bài tốn tìm ghép cực đại đồ thị, ứng dụng giải số toán thực tế.” làm đề tài cho luận văn tốt nghiệp Luận văn bố cục thành chương: Chương Cơ sở lý thuyết đồ thị độ phức tạp thuật tốn: Chương trình bày khái niệm Lý thuyết đồ thị độ phức tạp thuật tốn Chương Bài tốn tìm ghép cực đại đồ thị thuật toán: Chương phát biểu dạng tốn tìm ghép cực đại đồ thị, trình bày thuật tốn đánh giá độ phức tạp thuật toán Chương Một số toán ứng dụng thực tế: Tìm hiểu số tốn ứng dụng thực tế: Bài toán điều hành taxi, toán xếp lớp học theo tín Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn chỉ,…, xây dựng chương trình thử nghiệm giải toán ứng dụng tốn xếp lớp học theo tín trường Trung cấp Kỹ thuật Vĩnh Phúc Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 59 int dem = 0; public void Tim(int tt, int x, int y) { int tg = this.T[x][y]; if (tg == -1) { if (dem == || (dem > && x != this.Ng[tt][dem 1])) { dem++; this.Ng[tt][dem - 1] = x; } dem++; this.Ng[tt][dem - 1] = y; } else { Tim(tt, x, tg); Tim(tt, tg, y); } } public void KetQua() { string text = string.Empty; DateTime TDateTime = DateTime.Now; int j, z, tt, tong; this.Ng = new int[this.k][]; for(int i=0; iN đủ số lượng sinh viên i muốn học tức P[i] Bước 2: Repeat Tao_day_voi; // tạo cột đầy, cột vơi Gán_số; Nếu tìm dãy vơi sửa; Until khơng tìm dãy vơi Trong đó: Tao_day_voi: Tìm mảng a tổng t cột có tổng số số Duyệt từ cột đến cột N, cột có tổng số = t cột gọi cột đầy, cột có tổng số < t - gọi cột vơi Gán số: Xét cột: Nếu cột j cột đầy thì: { Gán số cho cột j; Xét tất hàng i, gán số j cho hàng i chưa gán sô; } Xét hàng: Nếu hàng i gán số Nếu sinh viên i theo học học phần j (coi ô [i, j] ô trắng ) Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 64 Gán số i cho cột j chưa gán số Tìm vơi: Tìm xem hàng cịn tồn cột vơi hay khơng Nếu tìm cột vơ sửa lại dây chuyền xen kẽ ô xanh ô trắng, với ô xanh ô a[i,j] gán giá trị Ví dụ: Có sinh viên đăng ký học, sinh viên đánh số từ đến 8, nhà trường dự kiến mở lớp dạy học phần kí hiệu từ đến Thông tin phiếu đăng ký sinh viên biểu diễn bảng sau: 0 2 2 0 0 2 2 2 0 0 0 2 2 0 2 0 2 2 0 2 0 0 Số lượng học phần sinh viên muốn theo học cho bảng sau: 4 3 Thực ví dụ theo thuật tốn ta có kết sau: Sinh viên 1: Học học phần: 1, 6, Sinh viên 2: Học học phần: 2, 3, 4, Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 65 Sinh viên 3: Học học phần: 1, Sinh viên 4: Học học phần: 1, 2, 3, Sinh viên 5: Học học phần: 2, 4, 5, Sinh viên 6: Học học phần: 2, 3, Sinh viên 7: Học học phần: 1, 6, Sinh viên 8: Học học phần: 3, 4, 5, Một số giao diện chương trình Giao diện Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 66 Chức thêm học phần cho học kỳ Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 67 Chức đăng ký học phần Chức xem kết Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 68 Các hàm thủ tục chương trình: using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; namespace DangKyTinChi.Common { public class Hungari { public int[] P = null/*So Hoc Phaan sv muon hoc*/, Day = null/*Day day hay voi*/ , Gc = null/*Gan cot*/, Gh = null/*Gan hang*/; public int[][] A = null; public int M = 0/*So SV*/, N = 0/*So Hoc Phan*/, J0 = 0; public void Prepare() { this.P = new int[this.M]; this.Gc = new int[this.N]; this.Gh = new int[this.M]; this.Day = new int[this.N]; this.A = new int[M][]; for (int i = 0; i < this.M; i++) this.A[i] = new int[this.N]; for (int i = 0; i < this.M; i++) for (int j = 0; j < this.N; j++) this.A[i][j] = 2; } private void Hang(int i) { int dem = 0; for (int j = 0; j < this.N; j++) { if (this.A[i][j] == && dem < this.P[i]) { this.A[i][j] = 1; dem++; } } } /// Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 69 /// Tao Phuong An Ban Dau /// public void Pal() { for (int i = 0; i < this.M; i++) { this.Hang(i); } } private int TongCot(int j) { int p = 0; for (int i = 0; i < this.M; i++) { if (this.A[i][j] == 1) p++; } return p; } private void TaoDayVoi() { for (int j = 0; j < this.N; j++) this.Day[j] = 0; int t = this.TongCot(0); for (int j = 1; j < this.N; j++) { int tongCotJ = this.TongCot(j); if (t < tongCotJ) t = tongCotJ; } for (int j = 0; j < this.N; j++) { int tongCotJ = this.TongCot(j); if (t == tongCotJ) this.Day[j] = 1; //Cot Day //if (t >= tongCotJ + 2) this.Day[j] = -1; //Cot Voi 1< t -2 if (tongCotJ < t - 2) this.Day[j] = -1; } } private void Gan1() { for (int j = 0; j < this.N; j++) Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 70 { if (this.Day[j] == 1) { this.Gc[j] = 0; for (int i = 0; i < this.M; i++) { if (this.A[i][j] == 1) if (this.Gh[i] == -1) this.Gh[i] = j; } } } } private void Gan2() { for (int i = 0; i < this.M; i++) { if (this.Gh[i] > 0) { for (int j = 0; j < this.N; j++) { if (this.A[i][j] == 0) if (this.Gc[j] == -1) this.Gc[j] = i; } } } } private void GanSo() { int dem = 0; for (int i = 0; i < this.M; i++) { this.Gh[i] = -1; for (int j = 0; j < this.N; j++) { this.Gc[j] = -1; dem = 0; { Gan1(); Gan2(); dem++; } while (dem == (this.N + this.M)); } } Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 71 } private bool TimVoi() { for (int j = 0; j < this.N; j++) { if (this.Day[j] == -1 && this.Gc[j] > 0) { // j 0:=j; this.J0 = j; return true; break; } } return false; } private void Sua(int i, int j) { while (i > && j > 0) { i = this.Gc[j]; this.A[i][j] = - this.A[i][j]; j = this.Gh[i]; if (j > 0) this.A[i][j] = - this.A[i][j]; } } public void ThucHien() { { TaoDayVoi(); GanSo(); if (TimVoi()) Sua(this.Gc[this.J0], this.J0); } while (TimVoi()); } } } Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 72 KẾT LUẬN Kết luận Sau thời gian nghiên cứu về Lý thuyết đồ thị, tìm hiể u những ứng du ̣ng và tính thiết thực lĩnh vực này, luận văn đã đa ̣t đươc̣ những kế t quả sau: Phần lý thuyết: -Tìm hiểu khái niệm đồ thị, đồ thị hai phía -Tìm hiểu thuật toán giải toán ghép cực đại đồ thị hai phía đồ thị tổng quát Phần thực nghiệm: - Tìm hiể u đươc̣ mô ̣t số ứng du ̣ng của Lý thuyế t đồ thi ̣ và bước đầ u biế t cách ứng du ̣ng lý thuyế t để triể n khai áp du ̣ng giải hai bài toán thực tế: Bài toán xế p lớp ho ̣c theo tín chỉ bài toán điề u hành taxi -Cài đặt thử nghiê ̣m chương trình mô phỏng thuâ ̣t toán Hungari giải tốn xếp lớp học theo học chế tín Đây tốn có tính thực tế cao -Các thuật tốn sử dụng tìm ghép cực đại với trọng số cực tiểu đồ thị hai phía thuật tốn theo thuật tốn Hung-ga-ri -Thời gian chạy toán nhanh -Giao diện thân thiện và có thể nâng cấ p để áp du ̣ng vào công viê ̣c đào ta ̣o của Trường TCKT Viñ h Phúc Bên cạnh đó, luận văn cịn mơ ̣t số nhươc̣ điể m như: Chương trình mới mô phỏng thuật tốn, chưa mơ tả và giải qú t hế t các yêu cầ u phát sinh thực tế Hướng phát triển đề tài: Tiếp tục tìm hiểu mơ hình đào tạo theo học chế tín để xây dựng phần mềm hồn chỉnh, với đầy đủ chức phục vụ cho công việc đào tạo theo học chế tín - mơ hình đào tạo cịn cịn nhiều khó khăn Tìm hiể u thêm những ứng du ̣ng Lý thuyế t đồ thi ̣ để giải quyế t các bài toán thực tế Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 73 TÀ I LIỆU THAM KHẢO Tiếng Việt [1] Lê Minh Hoàng, Giải thuật lập trình, Đại học sư phạm Hà Nội 1999-2002 [2] Nguyễn Cam, Chu Đức Khánh, Lý thuyết đồ thị, NXB Thành phố Hồ Chí Minh, 1999 [3] Đinh Mạnh Tường, Cấu trúc liệu thuật toán, NXB KH&KT, 2001 [4] Nguyễn Đức Nghĩa – Nguyễn Tô Thành, Toán rời rạc, NXB Đại học Quốc Gia Hà Nội, 2003 [5] Kenneth H.Rosen – Toán rời rạc ứng dụng Tin học (Bản dịch), NXB Khoa học Kỹ thuật, 2003 Tiếng Anh [6] S Dasgupta, C H Papadimitriou, and U V Vazirani, Algorithms, 2006 [7] Edmonds, Jack (1965) "Paths, trees, and flowers" Canad J Math 17: 449– 467 doi:10.4153/CJM-1965-045-4 [8] Hopcroft,JohnE.;RajeevMotwani,JeffreyD.Ullman, Introduction to Automata Theory, Languages and Computation,1stedition,Addison-Wesley, 1979 [9] Narsingh Deo "Graph Theory with Applications to Engineering and Computer Science", New Delhi-110001, 2006 [10] Aho A., The design and analysis of computer algorithms Addison Wesley Pub Comp, London 1976 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ...ii ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN & TRUYỀN THƠNG VŨ MINH TIỆP BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ, ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TRONG THỰC TẾ Chuyên ngành:... tốn thực tế sử dụng mơ hình đồ thị thuật toán đồ thị giải hiệu như: toán điều hành taxi, tốn xếp lớp học theo tín đưa mơ hình tốn tìm ghép cực đại đồ thị sử dụng thuật toán tương ứng Chính đồ thị. .. đồ thị hai phía phát biểu Một số tốn : - Bài tốn ghép đơi khơng trọng - Bài tốn phân cơng - Bài tốn tìm ghép cực đại với tổng trọng số cực đại cực tiểu đồ thị hai phía - … 2.2 BÀI TỐN TÌM BỘ GHÉP

Ngày đăng: 24/02/2021, 21:36

Từ khóa liên quan

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

Tài liệu liên quan