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
528,28 KB
Nội dung
ĐẠI HỌC KHOA CÔNG NGHỆ THÔNG TIN - - Đ ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC án tn tố TÊN ĐỀ TÀI gh XÂY DỰNG BÀI TỐN GHÉP ĐƠI KHƠNG TRỌNG SỐ p iệ Họ tên: Chun nghành: Cơng nghệ thơng tin Lớp: cntt Khố: 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ả Đ án p iệ gh tn tố 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 hoà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 ý q báu q thầy bạn Xin trân trọng cám ơn ! Đ Hà Nội, ngày 12 tháng 12 năm 2020 án Tác giả p iệ gh tn tố 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 .8 1.1 Các khái niệm .8 1.1.1 Khái niệm đồ thị .8 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 tốn tìm kiếm theo chiều rộng (Breadth first search) 26 án 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 tố 2.1 Đồ thị hai phía .29 tn 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 gh 2.2.2 Thuật toán đường mở 32 p iệ 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 TOÁ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 án trang web có website, tồn taị cạnh có hướng nối từ tố trang A tới trang B A có chứa liên kết tới B Do vậy, iệ gh khoa học máy tính tn phát triển thuật toán xử l đồ thị mối quan tâm p 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 án ứng tn tố 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 gh nên đồ thị giữ vai trò quan trọng sống, đặc biệt iệ lĩnh vực công nghệ thông tin, dựa vào đồ thị thuật tốn p đồ 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 tố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 tố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ị: Đ án p iệ gh tn tố 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 ( v )=2 m vϵV Đố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: ∑ deg−¿(v) =∑ deg+ ¿(v) ¿ ¿= m vϵV v ϵV Đ 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: án gh tn Định nghĩa 1: tố Cho đồ thị G = (V, E) p iệ 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 án thông tồn nhiều đường nối hai địa điểm, tố có đường để từ địa điểm lại quay tn (đây đường nội trung tâm mua gh sắm, …) Khi đó, tính chất đơn đồ thị vơ hướng định nghĩa iệ không cho phép n biểu diễn hệ thống giao thông p 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ụ e1 e2 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 án chất vơ hướng (hai chiều) cạnh Trong thực tế, có ta tn tố 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 gh đồ thị có hướng đa đồ thị có hướng Về bản, hai loại iệ tương tự hai loại mà ta định nghĩa trên, thêm khác biệt p 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 TOÁ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 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 gọi X_đỉnh, Đ đỉnh thuộc Y gọi Y_đỉnh án p Y iệ gh tn tố X Để 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); 28 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ệ hôn 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 án • đồ thị hai phía khơng chứa chu trình lẻ gh tn tố • 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 p iệ 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 án đường pha, đường từ X_đỉnh chưa ghép tới Y_đỉnh chưa ghép tn tố gọi đường mở Một cách dễ hiểu, quan niệm sau: gh Một đường pha (alternating path) đường đơn G bắt đầu iệ X_đỉnh chưa ghép, theo cạnh chưa ghép sang Y, p đế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 tố thời lớn án cạnh chưa ghép Nếu khơng tìm đường mở cặp ghép iệ gh for (xX) tn 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 (X2, Y1) M tn tố (X1, Y3) M án (Y1, X1) M Đ (Y2, X2) M gh Vậy ta loại cạnh (Y2, X2) (Y1, X1) cặp ghép cũ thêm iệ vào cạnh (X3, Y2), (X2, Y1), (X1, Y3) cặp ghép cạnh p 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] tn Quy ước rằng: tố matchY[j] = i án Tức cạnh (X[i], Y[j]) thuộc cặp ghép matchX[i] = j gh Nếu X[i] chưa ghép với đỉnh tập Y matchX[i] = p 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 đó, 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 án Dòng 1: Ghi hai số m, n (m, n 100) theo thứ tự số X_đỉnh số tố Y_đỉnh cách dấu cách có cạnh nối hai đỉnh (X[i], Y[j]) B_GRAPH.INP 1 2 2 3 4 OUTPUT Match: 1) X[1] 2) X[2] 3) X[3] 4) X[4] iệ gh tn Các dòng tiếp theo, dòng ghi hai số i, j cách dấu cách thể p 2 3 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 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); p a[i, j] := True; iệ Readln(f, i, j); gh begin tn while not SeekEof(f) tố Readln(f, m, n); án Assign(f, 'B_GRAPH.INP'); Reset(f); 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 tố Trace[y] := x; án begin gh begin tn if matchY[y] = then {Nếu y chưa ghép} Exit; p iệ FindAugmentingPath := y; {Xác định đường mở kết thúc y ln} 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 x, next: Integer; 36 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 p end; iệ if y then Enlarge(y); gh y := FindAugmentingPath(x); tn begin tố for x := to m án begin Đ x, y: Integer; end; procedure PrintResult; var i, Count: Integer; begin Writeln('Match: '); Count := 0; for i := to m if matchX[i] then 37 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 Nếu ta thêm đỉnh A cho tố thêm m cung từ A tới tất đỉnh tn tập X, thêm đỉnh B nối p A đỉnh thu B Nếu đặt khả iệ tới B Ta mạng với đỉnh phát B gh thêm n cung từ tất đỉnh Y A 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 toán đường mở trường hợp cách cài đặt hiệu dạng đồ thị đặc biệt, 38 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 Đ án p iệ gh tn tố 39 CHƯƠNG 3: ỨNG DỤNG BÀI TOÁN GHÉP ĐƠI TRONG THỰC TẾ 3.1 Phát biểu tốn Yê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 án - Hướng 3: Ghép cho bền vững 10-20-8; 30-40-8; p iệ gh 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; tn tố input.txt 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 toán án đồ thị Để đề tài em hoàn thiện hơn, việc sử dụng đạt hiệu cao p iệ gh tn hoàn thiện tố hơn, em mong thầy cô bạn đóng góp ý kiến để báo cáo 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 Đ án p iệ gh tn tố 42