Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
899,96 KB
Nội dung
ĐẠ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ị 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 toá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 tố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 tố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 đƣợ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 toá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 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 : người ta dùng đồ thị để biểu diễn cạnh tranh loà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 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 tố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 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 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 tố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: ∑𝑣 𝜖 𝑉 deg(𝑣) = 2𝑚 Đố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 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 quát 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) Các cạnh nối cặp đỉnh gọi cạnh song song khuyên Các cạnh nối từ đỉnh với gọi Ví dụ e2 e1 e a) Đa đồ thị vơ hướng: e1 e2 b) Đa đồ thị vô hướng: e khuyên cạnh song song Điểm chung hai loại đồ thị định nghĩa tính chất vơ hướng (hai chiều) cạnh Trong thực tế, có ta phải trọng đến tính có hướng cạnh nối (chẳng hạn biểu diễn đường chiều) Từ đó, ta có thêm loại đồ thị: Đơn đồ thị có hướng đa đồ thị có hướng Về bản, hai loại tương tự hai loại mà ta định nghĩa trên, thêm khác biệt tính chất có thứ tự cạnh Định nghĩa 3: Đơn đồ thị có hướng G = , đó: - V ≠ Ø tập hợp hữu hạn gồm đỉnh đồ thị - E tập hợp cặp có thứ tự gồm hai phần tử khác V gọi cung 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); until (X∩Y ≠ ∅) or (X Y tối đại - không bổ sung nữa); 28 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 = (XY, E) X tập đỉnh trái Y tập đỉnh phải G 29 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 30 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 (xX) if then Ví dụ: tìm cặp ghép đồ thị hai phía sau: 31 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ị ) 32 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 = (XY, 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ử 33 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 yY 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 X 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 PROG11_1.PAS Thuật tốn đường mở tìm cặp ghép cực đại program MatchingProblem; const max = 100; var 34 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 yY, 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; 35 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 khơng có đường mở} end; procedure Enlarge(f: Integer); {Nới rộng cặp ghép đường mở kết thúc f} var 36 x, next: Integer; 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 37 if matchX[i] then 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 toá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 A B thêm n cung từ tất đỉnh Y tới B Ta mạng với đỉnh phát A đỉnh thu B Nếu đặt khả X Y thông qua cung sau tìm luồng cực đại mạng thuật tốn Ford-Fulkerson theo định lý tính ngun, 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 tố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ở 38 trường hợp cách cài đặt hiệu dạng đồ thị đặc biệt, làm 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 toá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 39 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 40 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 tốn đồ thị Để đề tài em hồn thiện hơn, việc sử dụng đạt hiệu cao hơn, em mong thầy bạn đóng góp ý kiến để báo cáo hồn thiện 41 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 42 ... 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... ? ?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 tố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ị