Đồ án tốt nghiệp Công nghệ thông tin Xây dựng bài toán ghép đôi không trọng số

43 16 0
Đồ án tốt nghiệp Công nghệ thông tin Xây dựng bài toán ghép đôi không trọng số

Đ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

a) Đơn đồ thị vô hướng b) Không phải đơn đồ c) Không phải đơn đồ thị vô thị vô hướng do có các hướng do có cạnh nối một cặp cạnh nối cùng một đỉnh với chính nó. cặp đỉnh Tuy nhiên, trên thực tế, cũng có thể trong một hệ thống giao thông vẫn tồn tại nhiều con đường đi nối cùng hai địa điểm, hoặc cũng có thể có một con đường để đi từ một địa điểm nào đó rồi lại quay về chính nó (đây có thể là một con đường nội bộ của một trung tâm mua sắm, …). Khi đó, tính chất của đơn đồ thị vô hướng nhất định nghĩa trên không cho phép n biểu diễn được hệ thống giao thông trong trường hợp này. Muốn vậy, ta phải dùng một loại đồ thị tổng quát hơn, đó là: đa đồ thị vô hướng. Định nghĩa 2: Đa đồ thị vô hướng là một bộ G = , trong đó V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. E là một họ các cặp không có thứ tự của V gọi là các cạnh. Lưu ý: Khi ta nói E là một họ nghĩa là nó có thể có những cặp trùng nhau (khác với khái niệm tập hợp). Các cạnh nối cùng một cặp đỉnh được gọi là các cạnh song song. Các cạnh nối từ một đỉnh với chính nó được gọi là khuyên. Ví dụ e1 a) Đa đồ thị vô hướng: e1 và e2 là b) Đa đồ thị vô hướng: e là khuyên các cạnh song song Điểm chung của hai loại đồ thị đã được định nghĩa ở trên là tính chất vô hướng (hai chiều) của các cạnh. Trong thực tế, cũng có khi ta phải chú trọng đến tính có hướng của các cạnh nối này (chẳng hạn như biểu diễn các con đường một chiều). Từ đó, ta có thêm loại đồ thị: Đơn đồ thị có hướng và đa đồ thị có hướng. Về cơ bản, hai loại này cũng tương tự như hai loại mà ta định nghĩa ở trên, chỉ thêm sự khác biệt là tính chất có thứ tự của các cạnh. Định nghĩa 3: Đơn đồ thị có hướng là một bộ G = , trong đó: V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. E là tập hợp các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.

ĐẠI HỌC KHOA CÔNG NGHỆ THÔNG TIN - - ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC TÊN ĐỀ TÀI XÂY DỰNG BÀI TỐN GHÉP ĐƠI KHƠNG TRỌNG SỐ Họ tên: Chuyên nghành: Công nghệ thông tin Lớp: cntt Khoá: 2016-2020 Hướng dẫn: Tiến sỹ Hà Nội, 12/2020 LỜI CAM ĐOAN Em xin cam đoan: Đồ án tốt nghiệp “ Xây dựng tốn ghép đơi khơng trọng số “ cơng trình nghiên cứu cá nhân em, thực sở nghiên cứu lý thuyết ứng dụng , hướng dẫn khoa học Tiến sĩ Phạm Minh Hoàn , Trường Đại học Kinh tế quốc dân Em xin chịu trách nhiệm lời cam đoan Hà Nội, ngày 12 tháng 12 năm 2020 Tác giả LỜI CÁM ƠN Để hoàn thành nghiên cứu này, em xin chân thành cám ơn Trường Đại học Kinh tế quốc dân, Phịng đào tạo, thầy, giáo giảng dạy lóp Cơng nghệ thơng tin 58B 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 Phạm Minh Hoàn, người dành nhiều thời gian, tam huyết hướng dẫn em suốt trình nghiên cứu hồn thành đồ án Mặc dù cố gắng hoàn thiện luận văn, nhiên chắn cịn nhiều thiếu sót, mong nhận góp ý quý báu quý thầy cô bạn Xin trân trọng cám ơn ! Hà Nội, ngày 12 tháng 12 năm 2020 Tác giả MỤC LỤC LỜI NÓI ĐẦU 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 1.1.1 Khái niệm đồ thị 1.1.2 Các loại đồ thị .9 1.1.3 Biểu diễn đồ thị máy tính 16 1.2 Độ phức tạp tính tốn tính hiệu thuật tốn 21 1.2.1 Định nghĩa thuật toán 21 1.2.2 Phân tích độ phức tạp thuật toán .22 1.2.3 Tối ưu thuật toán .24 1.3 Một số thuật tốn tìm kiếm đồ thị 24 1.3.1 Thuật tốn tìm kiếm theo chiều sâu ( Depth first search ) 24 1.3.2 Thuật tốn tìm kiếm theo chiều rộng (Breadth first search) 26 CHƯƠNG 2: BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TOÁN .29 2.1 Đồ thị hai phía 29 2.2 Bài toán ghép cặp khơng trọng số đồ thị hai phía 30 2.2.1 Các khái niệm .30 2.2.2 Thuật toán đường mở 32 2.2.3 Độ phức tạp thuật toán .33 2.2.4 Cài đặt 34 CHƯƠNG 3: ỨNG DỤNG BÀI TỐN GHÉP ĐƠI TRONG THỰC TẾ 40 3.1 Phát biểu toán .40 3.2 Kết luận 41 TÀI LIỆU THAM KHẢO .42 LỜI NÓI ĐẦU 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 đƣợc 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 taị 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 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 : 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 : 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ố thành phố cho phố qua lần, hay toá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 tố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 toá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 ghép đơi khơng trọng số đồ 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 Báo cáo bố cục thành chương: Chương 1: Cơ sở lý thuyết đồ thị độ phức tạp thuật toán Chương : Bài toán tìm ghép cực đại đồ thị thuật toán Chương 3: Ứng dụng toán ghép đôi thực tế 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 1.1.1 Khái niệm đồ thị - Là cấu trúc rời rạc gồm đỉnh cạnh nối đỉnh Được mơ tả hình thức: G = (V, E) V gọi tập đỉnh, E tập cạnh, Có thể coi E tập cặp (u, v) với u v hai đỉnh V Một số hình ảnh đồ thị: Cạnh liên thuộc, đỉnh kề , bậc Đối với đồ thị vô hướng G = (V, E) Xét cạnh e ϵ E, e = (u,v) ta nói hai đỉnh u v kề cạnh e liên thuộc với đỉnh u đỉnh v Với đỉnh v đồ thị, ta định nghĩa bậc v , ký hiệu deg(v) số cạnh liên thuộc với v Dễ thấy đơn đồ thị số cạnh liên thuộc với v số đỉnh kề với v Định lý: giả sử G = (V, E) đồ thị vô hướng với m cạnh, tổng tất bậc đỉnh V 2m: Đối với đồ thị có hướng G = (V, E) Xét cung e ϵ E, e = (u, v) ta nói u nối tới v v nối từ u, cung e khỏi đỉnh u vào đỉnh v Đỉnh u gọi đỉnh đầu, đỉnh v gọi đỉnh cuối cung e Với đỉnh v đồ thị có hướng, ta định nghĩa : Bán bậc v ký hiệu deg+(v) số cung khỏi nó; bán bậc vào ký hiệu deg(-v) số cung vào đỉnh Định lý: giả sử G = (V, E) đồ thị có hướng với m cung, tổng tất bán bậc đỉnh tổng tất bán bậc vào m: =m 1.1.2 Các loại đồ thị Có thể phân loại đồ thị theo đặc tính số lượng tập cạnh E: Cho đồ thị G = (V, E) Định nghĩa 1: Một đơn đồ thị vô hƣớng G = , đó: - V ≠ Ø tập hợp hữu hạn gồm đỉnh đồ thị - E tập hợp cặp khơng có thứ tự gồm hai phần tử khác V gọi cạnh Như vậy, theo định nghĩa trên, đơn đồ thị khơng thể có cặp cạnh nối cặp đỉnh (do E tập hợp nên khơng thể có cặp trùng nhau), cạnh không phân biệt thứ tự nên cạnh [u,v] cạnh [v,u] coi cạnh nhất, điều phù hợp với việc biểu diễn đường chiều, hiển nhiên khơng có cặp [u,u] E Ví dụ a) Đơn đồ thị vô hướng b) Không phải đơn đồ c) Không phải đơn đồ thị vơ thị vơ hướng có hướng có cạnh nối cặp cạnh nối đỉnh với cặp đỉnh Tuy nhiên, thực tế, hệ thống giao thông tồn nhiều đường nối hai địa điểm, có đường để từ địa điểm lại quay (đây đường nội trung tâm mua sắm, …) Khi đó, tính chất đơn đồ thị vô hướng định nghĩa không cho phép n biểu diễn hệ thống giao thông trường hợp Muốn vậy, ta phải dùng loại đồ thị tổng qt hơn, là: đa đồ thị vơ hướng Định nghĩa 2: Đa đồ thị vô hướng G = , - V ≠ Ø tập hợp hữu hạn gồm đỉnh đồ thị - E họ cặp khơng có thứ tự V gọi - Khi ta nói E họ nghĩa có cạnh Lưu ý: cặp trùng (khác với khái niệm tập hợp) 10 CHƯƠNG 2: BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TỐN 2.1 Đồ thị hai phía Một đơn đồ thị vô hướng G = (V, E) gọi đồ thị hai phía tập đỉnh V phân thành hai tập không rỗng, rời X Y cho cạnh đồ thị nối đỉnh X với đỉnh Y Khi , người ta cịn ký hiệu G ( X Y, E) gọi tập (giả sử tập X) tập đỉnh trái tập lại tập đỉnh phải đồ thị hai phía G Các đỉnh thuộc X cịn gọi X_đỉnh, đỉnh thuộc Y gọi Y_đỉnh X Y Để kiểm tra đồ thị liên thơng có phải đồ thị hai phía hay khơng, ta áp dụng thuật toán sau: Với đỉnh v bất kỳ: X := {v}; Y := ∅; repeat Y := Y ∪ Kề(X); X := X ∪ Kề(Y); 29 until (X∩Y ≠ ∅) or (X Y tối đại - không bổ sung nữa); if X∩Y ≠ ∅ then < Khơng phải đồ thị hai phía > else ; Đồ thị hai phía gặp nhiều mơ hình thực tế Chẳng hạn quan hệ nhân tập người đàn ông tập người đàn bà, việc sinh viên chọn trường, thầy giáo chọn tiết dạy thời khoá biểu, toán xếp lớp học theo học chế tín v.v Tính chất • đồ thị hai phía khơng chứa chu trình lẻ • kích thước phủ đỉnh nhỏ kích thước cặp ghép lớn • kích thước tập độc lập lớn cộng kích thước cặp ghép lớn số đỉnh • đồ thị hai phía liên thơng, kích thước phủ cạnh nhỏ kích thước tập độc lập lớn • đồ thị hai phía liên thơng, kích thước phủ cạnh nhỏ cộng kích thước phủ đỉnh nhỏ số đỉnh • đồ thị hai phía tơ hai màu 2.2 Bài tốn ghép cặp khơng trọng số đồ thị hai phía 2.2.1 Các khái niệm Cho đồ thị hai phía G = (XY, E) X tập đỉnh trái Y tập đỉnh phải G 30 Một cặp ghép (matching) G tập hợp cạnh G đôi khơng có đỉnh chung Bài tốn ghép cặp (matching problem) tìm cặp ghép lớn (nghĩa có số cạnh lớn nhất) G Xét cặp ghép M G  Các đỉnh M gọi đỉnh ghép (matched vertices), đỉnh khác chưa ghép  Các cạnh M gọi cạnh ghép, cạnh khác chưa ghép Nếu định hướng lại cạnh đồ thị thành cung, cạnh chưa ghép định hướng từ X sang Y, cạnh ghép định hướng từ Y X Trên đồ thị định hướng đó: Một đường xuất phát từ X_đỉnh chưa ghép gọi đường pha, đường từ X_đỉnh chưa ghép tới Y_đỉnh chưa ghép gọi đường mở Một cách dễ hiểu, quan niệm sau:  Một đường pha (alternating path) đường đơn G bắt đầu X_đỉnh chưa ghép, theo cạnh chưa ghép sang Y, đến cạnh ghép X, lại đến cạnh chưa ghép sang Y xen kẽ  Một đường mở (augmenting path) đường pha Bắt đầu từ X_đỉnh chưa ghép kết thúc Y_đỉnh chưa ghép Một đường pha P kết thúc đỉnh chưa ghép Y gọi đường mở, sử dụng chuyển M thành cặp ghép lớn Đường mở đóng vai trị quan trọng việc tìm kiếm cặp ghép lớn Chúng ta sử dụng thuật tốn đường mở để tìm cặp ghép lớn 31 1 2 3 X Y 2.2.2 Thuật toán đường mở - Bắt đầu từ cặp ghép M (thông thường cặp ghép khởi gán cặp ghép rỗng hay tìm thuật tốn tham lam) - Sau tìm đường mở, tìm mở rộng cặp ghép M sau: Trên đường mở, loại bỏ cạnh ghép khỏi M thêm vào M cạnh chưa ghép Nếu khơng tìm đường mở cặp ghép thời lớn for (xX) if then Ví dụ: tìm cặp ghép đồ thị hai phía sau: 32 X1 Y1 X2 Y2 X3 Y3 X Y Như ví dụ trên, với cặp ghép hai cạnh M = {(X1, Y1), (X2, Y2)} đường mở tìm gồm cạnh: (X3, Y2)  M (Y2, X2)  M (X2, Y1)  M (Y1, X1)  M (X1, Y3)  M Vậy ta loại cạnh (Y2, X2) (Y1, X1) cặp ghép cũ thêm vào cạnh (X3, Y2), (X2, Y1), (X1, Y3) cặp ghép cạnh 2.2.3 Độ phức tạp thuật tốn Vì đường mở đỉnh chưa ghép thuộc tập X, theo cạnh chưa ghép sang tập Y, theo cạnh ghép tập X,…cuối cạnh chưa ghép tới đỉnh thuộc tập Y chưa ghép Nên ta thấy độ dài đường mở lẻ đường mở số cạnh thuộc M số cạnh khơng thuộc M cạnh Ta sử dụng thuật tốn tìm kiếm theo chiều rộng (BFS) để đường mở tìm đường ngắn nhất, giảm bớt công việc cho bước tăng cặp ghép Người ta chứng minh chi phí thời gian thực giải thuật trường hợp xấu 0(n3) đồ thị dày 0(n(n+m)logn) đồ thị thưa (trong đ n số đỉnh m số cạnh đồ thị ) 33 2.2.4 Cài đặt 2.2.3.1 Biểu diễn đồ thị hai phía Giả sử đồ thị hai phía G = (XY, E) có X_đỉnh ký hiệu X[1], X[2], , X[m] Y_đỉnh ký hiệu Y[1], Y[2], , Y[n] Ta biểu diễn đồ thị hai phía ma trận A cỡ mxn Trong đó: A[i, j] = TRUE có cạnh nối đỉnh X[i] với đỉnh Y[j] A[i, j] = FALSE khơng có cạnh nối đỉnh X[i] với đỉnh Y[j] 2.2.3.2 Biểu diễn cặp ghép Để biểu diễn cặp ghép, ta sử dụng hai mảng: matchX[1 m] matchY[1 n]  matchX[i] đỉnh thuộc tập Y ghép với đỉnh X[i]  matchY[j] đỉnh thuộc tập X ghép với đỉnh Y[j] Tức cạnh (X[i], Y[j]) thuộc cặp ghép matchX[i] = j matchY[j] = i Quy ước rằng:  Nếu X[i] chưa ghép với đỉnh tập Y matchX[i] =  Nếu Y[j] chưa ghép với đỉnh tập X matchY[j] = Để thêm cạnh (X[i], Y[j]) vào cặp ghép ta việc đặt matchX[i] := j matchY[j] := i; Để loại cạnh (X[i], Y[j]) khỏi cặp ghép ta việc đặt matchX[i] := matchY[j] := 0; 2.2.3.3 Tìm đường mở Vì đường mở X_đỉnh chưa ghép, theo cạnh chưa ghép sang tập Y, theo cạnh ghép để tập X, lại cạnh chưa ghép sang tập Y cuối cạnh chưa ghép tới Y_đỉnh chưa ghép Nên thấy độ dài đường mở lẻ đường mở số cạnh  M số cạnh  M cạnh Và dễ thấy giải thuật tìm đường mở nên sử 34 dụng thuật tốn tìm kiếm theo chiều rộng để đường mở tìm đường ngắn nhất, giảm bớt cơng việc cho bước tăng cặp ghép Để tìm đường mở bắt đầu đỉnh x *X, ta khởi tạo hàng đợi (Queue) ban đầu có đỉnh x * Thuật tốn tìm kiếm theo chiều rộng làm việc theo nguyên tắc lấy đỉnh v khỏi Queue lại đẩy Queue nối từ v chưa thăm Như thăm tới Y_đỉnh chưa ghép tức ta tìm đường mở kết thúc Y_đỉnh chưa ghép đó, q trình tìm kiếm dừng Còn ta thăm tới đỉnh yY ghép, dựa vào kiện: từ y tới matchY[y] theo cạnh ghép định hướng ngược từ Y X, nên ta đánh dấu thăm y, thăm matchY[y], đẩy vào Queue phần tử matchY[y]  X (Thăm liền bước) 2.2.3.4 Nhập đồ thị từ file văn B_GRAPH.INP Dòng 1: Ghi hai số m, n (m, n  100) theo thứ tự số X_đỉnh số Y_đỉnh cách dấu cách Các dòng tiếp theo, dòng ghi hai số i, j cách dấu cách thể có cạnh nối hai đỉnh (X[i], Y[j]) 1 2 3 4 B_GRAPH.INP 1 2 2 3 4 OUTPUT Match: 1) X[1] 2) X[2] 3) X[3] 4) X[4] - Y[1] Y[4] Y[3] Y[2] Y X PROG11_1.PAS  Thuật tốn đường mở tìm cặp ghép cực đại program MatchingProblem; const max = 100; var 35 m, n: Integer; a: array[1 max, max] of Boolean; matchX, matchY: array[1 max] of Integer; Trace: array[1 max] of Integer; {với yY, Trace[y] đỉnh X liền trước đỉnh y đường mở} procedure Enter; var f: Text; i, j: Integer; begin FillChar(a, SizeOf(a), False); Assign(f, 'B_GRAPH.INP'); Reset(f); Readln(f, m, n); while not SeekEof(f) begin Readln(f, i, j); a[i, j] := True; end; end; procedure Init; begin FillChar(matchX, SizeOf(matchX), 0); FillChar(matchY, SizeOf(matchY), 0); end; {Tìm đường mở bắt đầu XStart, thấy trả đỉnh kết thúc đường mở, không thấy trả 0} function FindAugmentingPath(xStart: Integer): Integer; 36 var Queue: array[1 max] of Integer; x, y, first, last: Integer; begin FillChar(Trace, SizeOf(Trace), 0); Queue[1] := xStart; first := 1; last := 1; {Khởi tạo Queue gồm đỉnh xuất phát} repeat x := Queue[first]; Inc(first); {Lấy x khỏi Queue} for y := to n {Xét Y_đỉnh, lọc Y_đỉnh chưa thăm kề với x qua cạnh chưa ghép} if (Trace[y] = 0) and a[x, y] and (matchX[x] y) then begin Trace[y] := x; if matchY[y] = then {Nếu y chưa ghép} begin FindAugmentingPath := y; {Xác định đường mở kết thúc y ln} Exit; end; Inc(last); Queue[last] := matchY[y]; {Đẩy matchY[y] vào Queue} end; until first > last; {Hàng đợi rỗng} FindAugmentingPath := 0; {Ở không Exit tức đường mở} end; procedure Enlarge(f: Integer); {Nới rộng cặp ghép đường mở kết thúc f} var x, next: Integer; 37 begin repeat x := Trace[f]; next := matchX[x]; matchX[x] := f; matchY[f] := x; f := next; until f = 0; end; procedure Solve; {Thuật toán đường mở} var x, y: Integer; begin for x := to m begin y := FindAugmentingPath(x); if y then Enlarge(y); end; end; procedure PrintResult; var i, Count: Integer; begin Writeln('Match: '); Count := 0; for i := to m if matchX[i] then 38 begin Inc(Count); Writeln(Count, ') X[', i, '] - Y[', matchX[i], ']'); end; end; begin Enter; Init; Solve; PrintResult; end Khảo sát tính đắn thuật tốn cho ta kết thú vị: Nếu ta thêm đỉnh A cho thêm m cung từ A tới tất đỉnh tập X, thêm đỉnh B nối thêm n cung từ tất đỉnh Y tới B Ta A B mạng với đỉnh phát A đỉnh thu B Nếu đặt khả thông qua X Y cung sau tìm luồng cực đại mạng thuật tốn FordFulkerson theo định lý tính nguyên, luồng tìm cung phải số nguyên (tức 0) Khi dễ thấy cung có luồng từ tập X tới tập Y cho ta cặp ghép lớn Để chứng minh thuật tốn đường mở tìm cặp ghép lớn sau hữu hạn bước, ta chứng minh số cặp ghép tìm thuật toán đường mở giá trị luồng cực đại nói trên, điều dễ để ý kỹ chút đường mở chẳng qua đường tăng luồng đồ thị tăng luồng mà thôi, tên augmenting path cho ta biết điều Vì thuật tốn đường mở trường hợp cách cài đặt hiệu dạng đồ thị đặc biệt, làm 39 cho chương trình sáng sủa nhiều so với phương pháp tìm cặp ghép dựa tốn luồng thuật toán Ford-Fulkerson túy Người ta chứng minh chi phí thời gian thực giải thuật trường hợp xấu O(n3) đồ thị dày O(n(n + m)logn) đồ thị thưa Tuy nhiên, giống thuật toán Ford-Fulkerson, thực tế phương pháp hoạt động nhanh 40 CHƯƠNG 3: ỨNG DỤNG BÀI TỐN GHÉP ĐƠI TRONG THỰC TẾ 3.1 Phát biểu tốn u cầu: Có liệu - n nữ: nữ (thông tin: tên, giới tính , tuổi, chiều cao, cân nặng, thu nhập, … tiêu chí: độ tuổi, chiều cao, cân nặng, thu nhập, ); - m nam: nam (thông tin: tên, giới tính , tuổi, chiều cao, cân nặng, thu nhập, tiêu chí: độ tuổi, chiều cao, cân nặng, thu nhập, ); Ghép n nữ với m nam sao cho : - Hướng 1: Ghép nhiều cặp (theo thuật tốn cặp ghép khơng trọng số) - Hướng 2: Ghép cho hoa hồng cao - Hướng 3: Ghép cho bền vững input.txt A; Nu; 20; 155; 40; 10; 25-40-9; 165-180-5; 60-70-5; 25; B; Nu; 25; 180; 55; 30; 25-40-9; 170-185-5; 60-80-7; 25; C; Nam; 22; 150; 40; 8; 23-30-9; 165-170-8; 55-65-7; 30; D; Nu; 20; 160; 45; 6; 22-28-9; 165-180-8; 55-65-8; 25; E; Nam; 19; 150; 40; 4; 21-27-9; 155-170-8; 50-55-8; 20; F; Nam; 21; 170; 60; 8; 18-25-8; 155-165-8; 40-55-8; 25; 10-20-8; 30-40-8; 10-20-8; 10-20-9; 10-20-8; 4-10-8; Ouput.txt 41 KET QUA GHEP DOI: CAP A Nu 20 && E Nam 19 B Nu 25 && F Nam 21 D Nu 20 && C Nam 22 class conguoi{} class capghep{} class main{} 3.2 Kết luận Trên số nghiên cứu mà em vận dụng trình học lý thuyết đồ thị Thông qua tập cặp ghép đồ thị hai phía trên, học cách xây dựng vận dụng cấu trúc liệu Quee để giải toán đồ thị Để đề tài em hoàn thiện hơn, việc sử dụng đạt hiệu cao hơn, em mong thầy cô bạn đóng góp ý kiến để báo cáo hoàn thiện 42 TÀI LIỆU THAM KHẢO [1] Giáo trình giải thuật lập trình – Lê Minh Hồng [2] Cẩm nang thuật toán ( dịch tiếng Việt) [3] http://vi.wikipedia.org/wiki [4] http://www.eli.sdsu.edu/ [5] http://sage.mc.yu.edu [6] http://www.cs.auckland.ac.nz/software/AlgAnim 43 ... 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... 26 CHƯƠNG 2: BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TOÁN .29 2.1 Đồ thị hai phía 29 2.2 Bài tốn ghép cặp khơng trọng số đồ thị hai phía ... dung nghiên cứu ? ?Bài tốn ghép đơi khơng trọng số đồ 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 Báo cáo bố cục thành chương: Chương 1: Cơ sở lý thuyết đồ thị độ phức

Ngày đăng: 09/03/2021, 11:15

Mục lục

  • LỜI NÓI ĐẦU

  • CHƯƠNG 1 : 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ị

      • Ví dụ

      • Ví dụ

        • Ví dụ

        • Một số thuật ngữ cơ bản

        • Ví dụ

        • Ví dụ

          • 1.1.3. Biểu diễn đồ thị trên máy tính

          • 1.2. Độ phức tạp tính toán và tính hiệu quả của thuật toán

            • 1.2.1. Định nghĩa thuật toán

            • 1.2.2. Phân tích độ phức tạp của thuật toán

            • 1.2.3. Tối ưu thuật toán

            • 1.3. Một số thuật toán tìm kiếm trên đồ thị

              • 1.3.1. Thuật toán tìm kiếm theo chiều sâu ( Depth first search )

              • 1.3.2. Thuật toán tìm kiếm theo chiều rộng (Breadth first search)

              • CHƯƠNG 2: BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TOÁN

                • 2.1. Đồ thị hai phía

                • Tính chất

                  • 2.2. Bài toán ghép cặp không trọng số trong đồ thị hai phía

                    • 2.2.1. Các khái niệm

                    • 2.2.2. Thuật toán đường mở

                    • 2.2.3. Độ phức tạp của thuật toán

                    • 2.2.4. Cài đặt

                    • 2.2.3.1. Biểu diễn đồ thị hai phía

                    • 2.2.3.2. Biểu diễn cặp ghép

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

Tài liệu liên quan