Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 83 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
83
Dung lượng
1,23 MB
Nội dung
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 thacc̣ si K ̃ hoa 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ế” 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àdưới 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êṃ vềlời cam đoan 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, cô 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 trình nghiên cứu hoà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 hoàn thành luận văn Măcc̣ dùđãcốgắng hoàn thiêṇ luâṇ văn, nhiên chắn nhiều thiếu sót, mong sư c̣góp ýqbáu q thầy vàcác baṇ 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 đề .1 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 .4 1.1.1 Khái niệm đồ thị .4 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 toán 16 1.2.2 Phân tích độ phức tạp thuật tố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 tố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 tố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 toá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 TOÁ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 tố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 tốn xây dựng thuật tố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 MUCC̣ CÁC HÌNH VE 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 .6 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 .8 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 xun 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, chuyên gia Toán, Toá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 toán học chuyên ngành quan tâm, số Lý thuyết đồ thị Đồ thị biểu diễn nhiều cấu trúc, nhiều toá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 hoá, 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 toán toán tính số tổ hợp khác chuyến xe hai thành phố mạng giao thông, toá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 toá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, toá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ị 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 tố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 toán: Chương này trình bày khái niệm Lý thuyết đồ thị và độ phức tạp thuật toán Chương Bài tốn tìm ghép cực đại đồ thị thuật toán: Chương này phát biểu dạng bài tốn tìm ghép cực đại đồ thị, trình bày thuật tốn và đánh giá độ phức tạp thuật toán Chương Một số tốn ứng dụng thực tế: Tìm hiểu số bài toán ứng dụng thực tế: Bài toán điều hành taxi, bài 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 bài toán này ứng dụng bài toá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: Số lượng học phần sinh viên muốn theo học cho bảng sau: 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; } Voi 1< t -2 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 } 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 ứng dungc̣ vàtính thiết thực lĩnh vực này, luận văn đãđaṭđươcc̣ kết quảnhư 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 tốn giải tố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 đươcc̣ môṭsốứng dungc̣ Lýthuyết đồthi c̣ vàbước đầu biết cách ứng dungc̣ lýthuyết đểtriển khai áp dungc̣ giải hai toán thưcc̣ tế: Bài toán xếp lớp hocc̣ theo tín chỉvà tốn điều hành taxi -Cài đặt thửnghiêṃ chương trình mơ thṭtố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 toá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 dungc̣ vào công viêcc̣ đào taọ Trường TCKT Vinh̃ Phúc Bên cạnh đó, luận văn cịn mơṭ sốnhươcc̣ điểm như: Chương trình mơ thuật tốn, chưa mơ tả vàgiải hết yêu cầu phát sinh thưcc̣ 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 ứng dungc̣ Lý thuyết đồ thi c̣ để giải toán thưcc̣ 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 Hồng, Giải thuật và 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 và thuật toán, NXB KH&KT, 2001 [4] Nguyễn Đức Nghĩa – Nguyễn Tơ Thành, Tố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 ... tìm ghép cực đại đồ thị, trình bày thuật tốn và đánh giá độ phức tạp thuật toán Chương Một số tốn ứng dụng thực tế: Tìm hiểu số bài toán ứng dụng thực tế: Bài toán điều hành taxi, bài toán. ..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:... 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 CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA