Tải bản đầy đủ (.pdf) (62 trang)

Bài toán ghép cặp và ứng dụng trong công tác tuyển sinh (LV thạc sĩ)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.39 MB, 62 trang )

ĐẠI HỌC THÁI NGUYÊN

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN HỒNG HẢI

BÀI TOÁN GHÉP CẶP VÀ ỨNG DỤNG
TRONG CÔNG TÁC TUYỂN SINH

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Thái Nguyên - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN


2

MỤC LỤC
LỜI CẢM ƠN ............................................................................................................. 4
DANH MỤC VIẾT TẮT ............................................................................................ 5
DANH MỤC CÁC HÌNH ........................................................................................... 6
DANH MỤC CÁC BẢNG.......................................................................................... 7
Lời nói đầu .................................................................................................................. 8
Chương 1: TỔNG QUAN MỘT SỐ VẤN ĐỀ VỀ ĐỒ THỊ .................................... 11
1.1.Các khái niệm cơ bản .......................................................................................... 11
1.1.1.Đồ thị ................................................................................................................ 11
1.1.2.Đồ thị hai phía .................................................................................................. 11
1.1.3.Đồ thị hai phía đầy đủ ...................................................................................... 12
1.2.Bài toán ghép cặp không trọng............................................................................ 14
1.2.1. Bài toán ........................................................................................................... 14
1.2.2.Thuật toán đường mở ....................................................................................... 16


1.3.Bài toán ghép cặp với trọng số cực tiểu .............................................................. 17
1.3.1.Bài toán ............................................................................................................ 17
1.3.2.Các khái niệm ................................................................................................... 18
1.3.3.Thuật toán Hungari .......................................................................................... 19
1.4. Bài toán ghép cặp với trọng số cực đại .............................................................. 21
1.4.1.Bài toán ............................................................................................................ 22
1.4.2.Thuật toán......................................................................................................... 22
1.5.Kết luận chương .................................................................................................. 24
Chương 2: BÀI TOÁN GHÉP CẶP ......................................................................... 25
2.1.Giới thiệu bài toán ............................................................................................... 25
2.1.1.Phát biểu bài toán ............................................................................................. 25
2.2.Bài toán hôn nhân bền vững................................................................................ 27
Số hóa bởi Trung tâm Học liệu – ĐHTN


3

2.2.1.Giới thiệu bài toán ............................................................................................ 27
2.2.2.Đặt bài toán ...................................................................................................... 28
2.2.3.Các đặc trưng của bài toán ............................................................................... 29
2.2.4.Điều kiện giải bài toán ..................................................................................... 30
2.2.5.Thuật toán cho bài toán hôn nhân bền vững .................................................... 30
2.2.5.1.Ý tưởng và lược đồ thuật toán ....................................................................... 30
2.2.5.2.Tính ổn định và bền vững ............................................................................. 35
2.2.6.Triển khai thuật toán ........................................................................................ 40
2.3.Một số ứng dụng phát triển dựa trên thuật toán hôn nhân bền vững .................. 42
2.3.1.Bài toán ghép tạng (cho và nhận thận) ............................................................. 42
2.3.2.Bài toán ghép cặp bác sĩ thực tập và bệnh viện ............................................... 43
2.4.Kết luận chương .................................................................................................. 43
Chương 3: ỨNG DỤNG THUẬT TOÁN GHÉP CẶP TRONG BỐI CẢNH

TUYỂN SINH ĐẠI HỌC Ở NƯỚC TA .................................................................. 45
3.1.Giới thiệu bài toán tuyển sinh ở nước ta ............................................................. 45
3.2.Ý nghĩa bài toán .................................................................................................. 46
3.3.Đặt bài toán ......................................................................................................... 48
3.4.Ý tưởng giải quyết bài toán ................................................................................. 49
3.5.Áp dụng bài toán hôn nhân bền vững ................................................................. 49
3.6.Sự khác nhau giữa bài toán hôn nhân bền vững và tuyển sinh đại học. ............. 50
3.7.Thuật toán............................................................................................................ 51
3.8.Tính ổn định của thuật toán ................................................................................. 56
3.9.Kết luận chương .................................................................................................. 60
KẾT LUẬN ............................................................................................................... 61
TÀI LIỆU THAM KHẢO ......................................................................................... 62

Số hóa bởi Trung tâm Học liệu – ĐHTN


4

LỜI CẢM ƠN
Để hoàn thành luận văn này, tôi xin bày tỏ lòng biết ơn sâu sắc đến cô
giáo hướng dẫn TS. Nguyễn Thị Hồng Minh đã tận tình hướng dẫn tôi trong
suốt quá trình thực hiện luận văn.
Tôi xin chân thành cảm ơn quý Thầy, Cô trong trường Đại học Công nghệ
Thông tin & Truyền thông - Đại học Thái Nguyên; quý Thầy, Cô trong Viện
Công nghệ thông tin đã tận tình truyền đạt kiến thức cho chúng tôi trong 2
năm học tập và nghiên cứu. Với vốn tiếp thu trong khóa học không chỉ là nền
tảng cho quá trình nghiên cứu luận văn này mà còn là hành trang quý báu, nền
tảng vững chắc để tôi tiếp tục nghiên cứu, hoạt động trong lĩnh vực công nghệ
thông tin.
Cuối cùng xin cảm ơn gia đình, bạn bè, đồng nghiệp đã giúp đỡ và

động viên tôi trong công việc và học tập cũng như trong quá trình thực hiện
luận văn này.
Xin chúc mọi người luôn mạnh khoẻ, đạt được nhiều thành tích cao
trong công tác, học tập và nghiên cứu khoa học!
Trân trọng cảm ơn!
Thái Nguyên, ngày 12 tháng 5 năm 2015
Tác giả

Nguyễn Hồng Hải

Số hóa bởi Trung tâm Học liệu – ĐHTN


5

DANH MỤC VIẾT TẮT
Viết tắt

Viết đầy đủ

Ý nghĩa

Đpcm

Điều phải chứng minh

Điều phải chứng minh

THPT


Trung học phổ thông

Trường trung học phổ thông

Số hóa bởi Trung tâm Học liệu – ĐHTN


6

DANH MỤC CÁC HÌNH
Hình 1. Đồ thị ............................................................................................................11
Hình 2. Đồ thị hai phía không có chu trình ...............................................................12
Hình 3. Đồ thị hai phía có chu trình ..........................................................................12
Hình 4.Đồ thị không phải đồ thị hai phía ..................................................................12
Hình 5.Đồ thị hai phía đầy đủ hình sao .....................................................................13
Hình 6. Đồ thị hai phía đầy đủ hình vuốt cây ...........................................................13
Hình 7. Đồ thị hai phía đầy đủ m≠n ..........................................................................14
Hình 8.Đồ thị hai phía đầy đủ m=n ...........................................................................14
Hình 9. Đồ thị hai phía và bộ ghép M .......................................................................16
Hình 10. Chú thích trong 1 ô của bảng ....................................................................32
Hình 11. Khai báo số lượng người đàn ông và số lượng người phụ nữ tham gia
ghép cặp.....................................................................................................................41
Hình 12. Khai báo tập có thứ tự về tiêu chuẩn lựa chọn của mỗi người đàn ông .....41
Hình 13. Khai báo tập có thứ tự về tiêu chuẩn lựa chọn của mỗi người phụ nữ ......41
Hình 14. Kết quả thực hiện chương trình ..................................................................42
Hình 15. Chú thích trong 1 ô của bảng .....................................................................53

Số hóa bởi Trung tâm Học liệu – ĐHTN



7

DANH MỤC CÁC BẢNG
Bảng 1. Tập có thứ tự về tiêu chuẩn lựa chọn của 3 người đàn ông m1, m2, m3 và 3
người phụ nữ w1, w2, w3............................................................................................ 32
Bảng 2.Tập có thứ tự về tiêu chuẩn lựa chọn của 4 người đàn ông m1, m2, m3, m4 và
4 người phụ nữ w1, w2, w3, w4. ................................................................................. 33
Bảng 3.Tập có thứ tự về tiêu chuẩn lựa chọn của 4 người đàn ông m1, m2, m3, m4 và
3 người phụ nữ w1, w2, w3: ....................................................................................... 34
Bảng 4. Tập có thứ tự về tiêu chuẩn lựa chọn của 5 người đàn ông m1, m2, m3, m4,
m5 và 5 người phụ nữ w1, w2, w3, w4, w5 .................................................................. 36
Bảng 5. Tập có thứ tự về tiêu chuẩn lựa chọn 2 người phụ nữ w1, w2 và 2 người đàn
ông m1, m2 ................................................................................................................. 39
Bảng 6. Tập có thứ tự về tiêu chuẩn lựa chọn của 3 trường đại học u1, u2, u3 và 4 thí
sinh s1, s2, s3, s4 .......................................................................................................... 54
Bảng 7. Tập có thứ tự về tiêu chuẩn lựa chọn của 3 trường đại học u1, u2, u3 và 6 thí
sinh s1, s2, s3, s4, s5, s6 ................................................................................................ 55
Bảng 8. Tập có thứ tự về tiêu chuẩn lựa chọn của 3 trường đại học u1, u2, u3 và 6 thí
sinh s1, s2, s3, s4, s5, s6 ................................................................................................ 56
Bảng 9. Tập có thứ tự về tiêu chuẩn lựa chọn của ba trường đại học: u1, u2, u3 và
bốn thí sinh: s1, s2, s3, s4.......................................................................................... 58

Số hóa bởi Trung tâm Học liệu – ĐHTN


8

Lời nói đầu
Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều
ứng dụng hiện đại. Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất

từ những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sĩ
Leonhard Euler. Chính ông là người đã sử dụng đồ thị để giải bài toán nổi
tiếng về các cái cầu ở thành phố Konigsberg. Từ đó lý thuyết đồ thị ngày càng
khẳng định được vị trí quan trọng trong việc áp dụng để giải quyết các bài
toán thực tế nhờ vào việc tìm ra ngày càng nhiều các định lý, công thức và
thuật toán. Các bài toán, thuật toán trong lý thuyết đồ thị không những có
nhiều ứng dụng trong thực tế mà nó còn giúp cho chúng ta mô tả một cách dễ
dàng các bài toán phức tạp cụ thể, để từ đó có thể mã hóa các bài toán đó vào
máy tính.
Thuật toán ghép cặp trong lý thuyết đồ thị là một ví dụ cụ thể: Thuật toán
ghép cặp đạt được những thành công nhất định và được áp dụng tại nhiều
nước châu Âu là thuật toán được nghiên cứu bởi hai nhà khoa học David Gale
và Lloyd Shapley. Thuật toán này đã được giới thiệu và đăng tải trên một tạp
chí toán học vào năm 1962. Sau này, thuật toán còn được biết đến với tên gọi
thuật toán Gale-Shapley. Tuy nhiên, nghiên cứu của hai nhà khoa học David
Gale và Lloyd Shapley chỉ có vẻ đẹp thuần túy về mặt lý thuyết mà khó có thể
áp dụng vào trong thực tiễn. Nhà kinh tế học Alvin Roth đã đi xa hơn bằng
việc sáng tạo ra các luật chơi áp dụng được trong thực tế. Ông và các cộng sự
đã tổ chức các trò chơi kinh tế nho nhỏ để sinh viên tham gia. Sau đó các ông
thu thập và phân tích kết quả thu được và mô hình hóa các tương tác giữa
những người chơi với nhau dựa trên quan sát thực tế. Nói cách khác, ông thiết
kế ra các thị trường mà nếu không có các phát minh của ông thì đã không tồn
tại hoặc tồn tại dưới một dạng rất không hiệu quả.

Số hóa bởi Trung tâm Học liệu – ĐHTN


9

Gần đây nhất, năm 2012, ứng dụng của thuật toán này đã mang lại giải

thưởng Nobel kinh tế cho hai nhà khoa học người Mỹ là Alvin E.Roth và
Lloyd Shapley với nghiên cứu “Lý thuyết phân phối ổn định và thực tiễn thiết
kế thị trường” có khả năng ứng dụng rộng rãi trên khắp thế giới.
Thực tế các lĩnh vực trong cuộc sống có liên quan đến giao dịch có yêu
cầu ghép cặp là rất nhiều như: ghép cặp giữa các cặp đôi trong trung tâm môi
giới hôn nhân, ghép cặp trong trường hợp hiến và ghép tạng; phân công công
tác cho các sinh viên tốt nghiệp ngành y tới các bệnh viện, công tác tuyển sinh
đại học…
Trong các lĩnh vực nêu trên, ở nước ta việc áp dụng thuật toán ghép cặp
vào các lĩnh vực đó là chưa nhiều và chưa phổ biến mặc dù có rất nhiều lĩnh
vực giao dịch có yêu cầu. Tuyển sinh đại học cũng là một trong nhiều lĩnh
vực có yêu cầu giao dịch ghép cặp, đặc biệt là trong khâu tuyển sinh Đại học.
Công tác tuyển sinh ở nước ta hiện đang được áp dụng đó là: Kết thúc kỳ
thi tốt nghiệp THPT quốc gia, các thí sinh sẽ tìm hiểu chỉ tiêu tuyển sinh,
điểm xét tuyển và các điều kiện tuyển sinh khác để lựa chọn những ngành
học, trường học phù hợp với nhu cầu của mình. Sau đó sẽ nộp hồ sơ xét dự thi
vào những trường có khả năng trúng tuyển cao. Mỗi thí sinh đăng ký xét
tuyển đại học sẽ gửi kết quả điểm thi tốt nghiệp THPT và các ngành học đăng
ký vào các trường mà mình muốn học (cho phép thí sinh đăng ký tối đa 4
ngành (hoặc nhóm ngành) của một trường cho mỗi đợt xét tuyển; Các nguyện
vọng này được xếp theo thứ tự ưu tiên từ 1 đến 4). Ngoài ra thí sinh còn
dùng 3 bản chính Giấy chứng nhận kết quả thi dùng cho xét tuyển các nguyện
vọng bổ sung để đăng ký; Kết thúc mỗi đợt xét tuyển nguyện vọng bổ sung,
thí sinh không trúng tuyển được quyền rút hồ sơ đăng ký xét tuyển để đăng ký
xét tuyển đợt tiếp theo.
Số hóa bởi Trung tâm Học liệu – ĐHTN


10


Các trường đại học tiếp nhận hồ sơ ứng tuyển của các thí sinh và sẽ lựa
chọn những thí sinh có điểm từ cao xuống thấp cho đến khi hết chỉ tiêu.
Mô hình tuyển sinh đại học này có rất nhiều điểm tương đồng với mô
hình tuyển sinh đại học và vào các trường trung học ở Mỹ trước năm 2003:
các học sinh trung học được yêu cầu liệt kê 5 trường mà mình ưa thích, tiếp
theo danh sách này được gửi đến các trường đại học. Các trường học sẽ lựa
chọn xem học sinh nào phù hợp và từ chối những học sinh khác. Quá trình
này lặp lại khoảng hơn 2 vòng, và các trường sẽ lựa chọn được những thí sinh
phù hợp với trường mình.
Nhưng với hình thức tuyển sinh như vậy, kết quả là hơn 30.000 thí sinh
phải theo học ở trường mà mình không liệt kê trong danh sách, các trường học
bị loại bớt cơ hội lựa chọn những thí sinh mình mong muốn. Hơn nữa, cơ chế
này dẫn đến việc trình bày sai sở thích của mỗi sinh viên.
Với hình thức tuyển sinh ở nước ta cộng với mối liên quan mật thiết và
tính áp dụng thực tế rất cao như giới thiệu trên của bài toán ghép cặp tôi xin
lựa chọn đề tài: “ Bài toán ghép cặp và ứng dụng trong công tác tuyển
sinh” nhằm mục đích định hướng cho công tác tuyển sinh của các trường đại
học đạt chất lượng và hiệu quả, hỗ trợ các em học sinh được học theo đúng sở
trường, năng lực để có một điều kiện tốt hơn trong tương lai.
Bố cục của luận văn gồm 3 chương. Chương 1 trình bày nội dung tìm
hiểu tổng quan về lý thuyết đồ thị. Tiếp theo chương 2 trình bày bài toán
ghép cặp, bài toán hôn nhân bền vững và các ứng dụng của bài toán hôn nhân
bền vững. Trong chương 3 lấy chương 2 làm tiền đề xây dựng ý tưởng, mô tả
thuật toán ghép cặp ứng dụng cho bài toán tuyển sinh.

Số hóa bởi Trung tâm Học liệu – ĐHTN


11


Chương 1: TỔNG QUAN MỘT SỐ VẤN ĐỀ VỀ ĐỒ THỊ
VÀ ĐỒ THỊ HAI PHÍA

1.1. Các khái niệm cơ bản
1.1.1. Đồ thị
Đồ thị vô hướng G = (V,E) gồm[4]:
- V là tập hợp khác rỗng mà các phần tử của nó gọi là đỉnh (vertex) của G.
- E là đa tập hợp gồm các cặp không sắp thứ tự của hai đỉnh. Mỗi phần tử
của E được gọi là một cạnh (edge) của G.
Đồ thị vô hướng không có cạnh song song và không có khuyên gọi là đồ
thị đơn vô hướng.
Ví dụ:

Hình 1. Đồ thị

1.1.2. Đồ thị hai phía
Một đồ thị đơn vô hướng G:=(V,E) được gọi là hai phía nếu tồn tại một
phân hoạch tập đỉnh V thành hai tập con X1 và X2 độc lập, rời nhau sao cho bất
kì cạnh nào của đồ thị cũng nối một đỉnh thuộc X1 với một đỉnh thuộc X2. Khi
đó người ta còn kí hiệu là: G:=(X1X2,E) với các phân hoạch X1, X2 và gọi
một tập (chẳng hạn X1) là tập các đỉnh trái và tập còn lại (chẳng hạn X2) là tập
Số hóa bởi Trung tâm Học liệu – ĐHTN


12

các đỉnh phải của đồ thị hai phía G. Các đỉnh thuộc X1 gọi là các X1_đỉnh, các
đỉnh thuộc X2 gọi là các X2_đỉnh.
Nếu |X1|=|X2| thì G được gọi là đồ thị hai phía cân bằng.
Ví dụ:


Hình 2. Đồ thị hai phía không có chu trình

Hình 3. Đồ thị hai phía có chu trình

Hình 4.Đồ thị không phải đồ thị hai phía
1.1.3. Đồ thị hai phía đầy đủ
Số hóa bởi Trung tâm Học liệu – ĐHTN


13

Cho G = (V,E) là một đồ thị vô hướng hai phía, một phân hoạch V thành
hai tập con X1 và X2 (X1 ≠ ≠ X2 và X1  X2 = ), sao cho không có cạnh
nối giữa 2 điểm trong cùng một tập con. Khi đó G được gọi là hai phía đầy đủ
nếu: Với mọi cặp đỉnh (i,j) mà iX1 và j X2 thì có đúng một cạnh nối i và j, ij
là một cạnh trong E. Một đồ thị hai phía đầy đủ với các phân chia kích thước
|X1| = m, |X2| = n được kí hiệu là Km,n . Hai đồ thị mà có kí hiệu giống nhau thì
chúng đẳng cấu.
- Đồ thị hai phía đầy đủ Km,n có: m+n đỉnh, m.n cạnh.
- Các dạng đồ thị đầy đủ hai phía:
 K1,n với đồ thị hình sao

Hình 5.Đồ thị hai phía đầy đủ hình sao
 K1,n với đồ thị hình vuốt cây

Hình 6. Đồ thị hai phía đầy đủ hình vuốt cây
Số hóa bởi Trung tâm Học liệu – ĐHTN



14

 Km,n với m≠n

Hình 7. Đồ thị hai phía đầy đủ m≠n
 Km,n với m = n

Hình 8. Đồ thị hai phía đầy đủ m=n

1.2. Bài toán ghép cặp không trọng
1.2.1. Bài toán
Cho một đồ thị hai phía G = (X1X2,E) ở đây X1 là các tập đỉnh trái và X2
là tập các đỉnh phải của G. X1={x1[1], x1[2],…, x1[m]}, X2={x2[1], x2[2],…,
x2[n]}.
Một bộ ghép (matching) của G là một tập các cạnh của G đôi một không
có đỉnh chung.

Số hóa bởi Trung tâm Học liệu – ĐHTN


15

Bài toán ghép cặp (matching problem) là tìm một bộ ghép lớn nhất (nghĩa
là có số cạnh lớn nhất) của G.
Xét một bộ ghép M của G.
- Các đỉnh trong M gọi là các đỉnh đã ghép (matched vertices), các đỉnh
khác là chưa ghép.
- Các cạnh trong M gọi là các cạnh đã ghép, các cạnh khác là chưa ghép.
Nếu định hướng lại các cạnh của đồ thị thành cung, những cạnh chưa ghép
được định hướng từ X1 sang X2, những cạnh đã ghép định hướng từ X2 về X1

.Trên đồ thị định hướng đó: Một đường đi xuất phát từ một X1_đỉnh chưa
ghép gọi là đường pha (alternating path), một đường đi từ một X1_đỉnh chưa
ghép tới một X2_đỉnh chưa ghép gọi là đường mở (augmenting path).
Một cách dễ hiểu, có thể quan niệm như sau:
-

Một đường pha là một đường đi đơn trong G bắt đầu bằng một

X1_đỉnh chưa ghép, đi theo một cạnh chưa ghép sang X2 , rồi đến một cạnh đã
ghép về X1, rồi lại đến một cạnh chưa ghép sang X2… cứ xen kẽ nhau như
vậy.
-

Một đường mở là một đường pha. Bắt đầu từ một X1_đỉnh chưa ghép

kết thúc bằng một X2_đỉnh chưa ghép.
Ví dụ: Với đồ thị hai phía trong hình 9 và bộ ghép
M ={(x1[1],x2[1]),(x1[2],x2[2])}
x1[3] và x2[3] là những đỉnh chưa ghép, các đỉnh khác là đã ghép.
Đường (x1[3], x2[3], x1[2], x2[1]) là đường pha.
Đường (x1[3], x2[3], x1[2], x2[1], x1[1], x2[3]) là đường mở.

Số hóa bởi Trung tâm Học liệu – ĐHTN


16

Hình 9. Đồ thị hai phía và bộ ghép M

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

Thuật toán đường mở để tìm một bộ ghép lớn nhất cho bài toán ghép cặp
phát biểu như sau:
Bước 1:
Bắt đầu từ một bộ ghép bất kỳ M (thông thường bộ ghép được khởi gán
bằng bộ ghép rỗng hay được tìm bằng các thuật toán tham lam).
Bước 2:
Tìm một đường mở.
Bước 3:
Nếu bước 2 tìm được đường mở thì mở rộng bộ ghép M: Trên đường mở,
loại bỏ những cạnh đã ghép khỏi M và thêm vào M những cạnh chưa ghép.
Sau đó lặp lại bước 2.
Nếu bước 2 không tìm được đường mở thì thuật toán kết thúc.
* Mã giả thuật toán:

Số hóa bởi Trung tâm Học liệu – ĐHTN


17

Input: Đồ thị hai phía G = (X1X2,E), X1={x1[1], x1[2],…, x1[m]}, X2={x2[1], x2[2],…, x2[n]}.
Output: Một bộ ghép M lớn nhất của G.
Matching1() 
Khởi tạo một bộ ghép M;
n = số cạnh đã ghép;
While (có đường mở xuất phát từ x1 tới một đỉnh x2 chưa ghép  X2)
xóa các cạnh đã ghép khỏi M;
ghép (x1, x2);
n++;
End.


Như ví dụ trên, với bộ ghép hai cạnh M ={(x1[1],x2[1]),(x1[2],x2[2])} và
đường mở tìm được gồm các cạnh:
(x1[3], x2[2])  M
(x2[2], x1[2])  M
(x1[2], x2[1])  M
(x2[1], x1[1])  M
(x1[1], x2[3])  M
Vậy thì ta sẽ loại đi các cạnh (x2[2], x1[2]) và (x2[1], x1[1]) trong bộ
ghép cũ và thêm vào đó các cạnh (x1[3], x2[2]), (x1[2], x2[1]), (x1[1], x2[3])
được bộ ghép 3 cạnh.
1.3. Bài toán ghép cặp với trọng số cực tiểu
1.3.1. Bài toán

Số hóa bởi Trung tâm Học liệu – ĐHTN


18

Cho một đồ thị hai phía G = (X1X2,E). X1={x1[1], x1[2],…, x1[m]},
X2={x2[1], x2[2],…, x2[n]}. Được cho bởi ma trận vuông C cỡ kk, c[i, j] =
trọng số cạnh nối đỉnh x1[i] với x2[j]. Giả thiết c[i, j]0 (i, j)
Bài toán ghép cặp với trọng số cực tiểu là tìm một bộ ghép đầy đủ trọng số
nhỏ nhất.
Hai định lý sau đây tuy rất đơn giản nhưng là những định lý quan trọng tạo
cơ sở cho thuật toán sẽ trình bày.
Định lý 1: Loại bỏ khỏi G những cạnh trọng số lớn hơn 0. Nếu những
cạnh trọng số 0 còn lại tạo ra bộ ghép k cạnh trong G thì đây là bộ ghép cần
tìm.
Chứng minh: theo giả thiết, các cạnh của G mang trọng số không âm nên
bấy kỳ bộ ghép nào trong G cũng có trọng số không âm, mà bộ ghép ở trên

mang trọng số 0, nên tất nhiên đó là bộ ghép đầy đủ trọng số nhỏ nhất.
Định lý 2: Với đỉnh x1[i], nếu ta cộng thêm một số  (dương hay âm) vào
tất cả những cạnh liên thuộc với x1[i] (tương đương với việc cộng thêm  vào
tất cả các phần tử thuộc hàng i của ma trận C) thì không ảnh hưởng tới bộ
ghép đầy đủ trọng số nhỏ nhất.
Chứng minh: Với một bộ ghép đầy đủ bất kỳ thì có một và chỉ một cạnh
ghép với x1[i]. Nên việc cộng thêm  vào tất cả các cạnh liên thuộc với x1[i]
sẽ làm tăng trọng số bộ ghép đó lên . Vì vậy nếu như ban đầu, M là bộ ghép
đầy đủ trọng số nhỏ nhất thì sau thao tác trên, M vẫn là bộ ghép đầy đủ trọng
số nhỏ nhất.
1.3.2. Các khái niệm
Để cho gọn, ta gọi những cạnh trọng số 0 của G là những 0_cạnh.

Số hóa bởi Trung tâm Học liệu – ĐHTN


19

Xét một bộ ghép M chỉ gồm những 0_cạnh.
- Những đỉnh  M gọi là những đỉnh đã ghép, những đỉnh còn lại gọi là
những đỉnh chưa ghép.
- Những 0_cạnh  M gọi là những 0_cạnh đã ghép, những 0_cạnh còn lại
là những 0_cạnh chưa ghép.
Nếu ta định hướng lại các 0_cạnh theo cách: Những 0_cạnh chưa ghép
cho hướng từ tập X1 sang tập X2, những 0_cạnh đã ghép cho hướng từ tập X2
về tập X1. Khi đó:
- Đường pha là một đường đi cơ bản xuất phát từ một X1_ đỉnh chưa ghép
đi theo các 0_cạnh đã định hướng ở trên. Như vậy dọc trên đường pha, các
0_cạnh chưa ghép và những 0_cạnh đã ghép xen kẽ nhau. Vì đường pha chỉ là
đường đi cơ bản trên đồ thị định hướng nên việc xác định những đỉnh nào có

thể đến được từ x  X1 bằng một đường pha có thể sử dụng các thuật toán tìm
kiếm trên đồ thị. Những đỉnh và những cạnh được duyệt qua tạo thành một
cây pha gốc x.
- Một đường mở là một đường pha đi từ một X1_ đỉnh chưa ghép tới một
X2_đỉnh chưa ghép.
Như vậy:
- Đường đi trực tiếp từ một X1_đỉnh chưa ghép tới một X2_đỉnh chưa ghép
qua một 0_cạnh chưa ghép cũng là một đường mở.
- Dọc trên đường mở, số 0_cạnh chưa ghép nhiều hơn số 0_cạnh đã ghép
đúng 1 cạnh.
1.3.3. Thuật toán Hungari
Bước 1: Khởi tạo
Một bộ ghép M :=
Số hóa bởi Trung tâm Học liệu – ĐHTN


20

Bước 2: với mọi đỉnh x  X1, ta tìm cách ghép x:
Bắt đầu từ đỉnh x, thử tìm đường mở bắt đầu ở x bằng thuật toán tìm kiếm
trên đồ thị. Có hai khả năng có thể xảy ra:
- Hoặc tìm được đường mở thì dọc theo đường mở, ta loại bỏ những cạnh
đã ghép khỏi M và thêm vào M những cạnh chưa ghép, ta được một bộ ghép
mới nhiều hơn bộ ghép cũ 1 cạnh và đỉnh x trở thành đã ghép.
- Hoặc không tìm được đường mở thì có thể xác định được:
VisitedX1= {Tập những X1_đỉnh có thể đến được từ x bằng một đường
pha}
VisitedX2= {Tập những X2_đỉnh có thể đến được từ x bằng một đường
pha}
Gọi  là trọng số nhỏ nhất của các cạnh nối giữa một đỉnh thuộc VisitedX1

với một đỉnh không thuộc VisitedX2. Dễ thấy  >0 bởi nếu =0 thì tồn tại một
0_cạnh (x1, x2) với x1VisitedX1 và x2VisitedX2. Vì x đến được x1 bằng một
đường pha và (x1, x2) là một 0_cạnh nên x cũng đến được x2 bằng một đường
pha, dẫn tới x2  VisitedX2, điều này vô lý.
Biến đổi đồ thị G: với x1 VisitedX1, trừ  vào trọng số những cạnh liên
thuộc với x1, với  x2  VisitedX2, cộng  vào trọng số những cạnh liên thuộc
với x2.
Lặp lại thủ tục tìm kiếm trên đồ thị thử tìm đường mở xuất phát ở x cho
tới khi tìm ra đường mở.
Bước 3: Sau bước 2 thì mọi X1_đỉnh đều được ghép, in kết quả về bộ ghép
tìm được.
* Mã giả thuật toán

Số hóa bởi Trung tâm Học liệu – ĐHTN


21

Input: Đồ thị hai phía G = (X1X2,E). X1={x1[1], x1[2],…, x1[m]}, X2={x2[1], x2[2],…,
x2[n]}.
Ma trận vuông C cỡ kk, c[i, j] = trọng số cạnh nối đỉnh x1[i] với x2[j]. Giả thiết c[i,
j]0 (i, j)
Output: Bộ ghép đầy đủ trọng số nhỏ nhất.
Matching2() 
Khởi tạo M:=;
While (xX1)
Tìm đường mở xuất phát ở x;
if (Không tìm thấy đường mở)
:= trọng số nhỏ nhất của các cạnh nối;
If (x1 VisitedX1),

trừ  vào trọng số những cạnh liên thuộc với x1;
else
cộng  vào trọng số những cạnh liên thuộc với x2;
endif;
else
xóa các cạnh đã ghép khỏi M;
thêm vào M những cạnh chưa ghép;
endif;
End.

1.4. Bài toán ghép cặp với trọng số cực đại
Số hóa bởi Trung tâm Học liệu – ĐHTN


22

1.4.1. Bài toán
Cho một đồ thị hai phía G = (X1X2,E). X1={x1[1], x1[2],…, x1[m]},
X2={x2[1], x2[2],…, x2[n]}. Được cho bởi ma trận vuông C cỡ kk, c[i, j] =
trọng số cạnh nối đỉnh x1[i] với x2[j]. Giả thiết c[i, j]0 (i, j)
Bài toán ghép cặp với trọng số cực đại nhằm tìm ra một bộ ghép đầy đủ
trọng số cực đại.
1.4.2. Thuật toán
Bài toán ghép cặp với trọng số cực đại cũng có thể giải nhờ phương pháp
Hungari bằng cách đổi dấu tất cả các phần tử ma trận chi phí.
Bước 1: Khởi tạo:
M:=;
Khởi tạo hai dãy Fx1 và Fx2 thỏa mãn: i, j: Fx1[i] + Fx2[j]  c[i, j];
chẳng hạn ta có thể đặt Fx1[i] := Phần tử lớn nhất trên dòng i của ma trận C và
đặt các Fx2[j] :=0.

Bước 2: Với mọi đỉnh xX1 ta tìm cách ghép x:
Bắt đầu từ đỉnh x, thử tìm đường mở bắt đầu ở x, có hai khả năng xảy ra:
- Hoặc tìm đường mở thì dọc theo đường mở, ta loại bỏ những cạnh đã
ghép khỏi M và thêm vào M những cạnh chưa ghép.
- Hoặc không tìm được đường mở thì xác định được:
VisitedX1 = {Tập những X1_đỉnh có thể đến được từ x bằng một đường
pha}
VisitedX2 = {Tập những X2_đỉnh có thể đến được từ x bằng một đường
pha}

Số hóa bởi Trung tâm Học liệu – ĐHTN


23

Đặt := min{Fx1[i] + Fx2[j] – c[i,j] |  x1[i]  VisitedX1; x2[j]
VisitedX2}
Xoay trọng số cạnh:
Với  x1[i]  VisitedX1: Fx1[i]:= Fx1[i] - 
Với x2[j] VisitedX2: Fx2[j]:= Fx2[j] + 
Lặp lại thủ tục tìm đường mở xuất phát tại x cho tới khi tìm ra đường mở.
Bước 3: Sau bước 2 thì mọi X1_đỉnh đều đã ghép, ta được một bộ ghép đầy
đủ k cạnh với trọng số lớn nhất.
* Mã giả thuật toán:
Input: Một đồ thị hai phía G = (X1X2,E). X1={x1[1], x1[2],…, x1[m]}, X2={x2[1],
x2[2],…, x2[n]}. Được cho bở ma trận vuông C cỡ kk, c[i, j] = trọng số cạnh nối đỉnh x1[i] với
x2[j]. Giả thiết c[i, j]0 (i, j)
Output: Bộ ghép đầy đủ trọng số cực đại
Matching2() 
Khởi tạo M:=;

Khởi tạo Fx1 và Fx2 thỏa mãn: i, j: Fx1[i] + Fx2[j]  c[i, j];
While (xX1)
Tìm đường mở xuất phát ở x;
if (Không tìm thấy đường mở)
:= min{Fx1[i] + Fx2[j] – c[i,j];
if (x1[i]  VisitedX1)
Fx1[i]:= Fx1[i] - ;
else
Fx2[j]:= Fx2[j] + ;
Số hóa bởi Trung tâm Học liệu – ĐHTN


24

endif;
else xóa các cạnh đã ghép khỏi M;
thêm vào M những cạnh chưa ghép;
endif;
End.

1.5. Kết luận chương
Như vậy, chương 1 đã tổng quan một số vấn đề về đồ thị và đồ thị hai
phía. Đây là những kiến thức cơ sở chuẩn bị cho những nghiên cứu tiếp theo
của bản luận văn này.
Phần đầu của chương giới thiệu những khái niệm cơ bản về đồ thị và đồ
thị hai phía, một số dạng đồ thị. Tiếp theo là các bài toán ghép cặp trên đồ thị
hai phía.
Nội dung chính của chương tập trung vào tìm hiểu về đồ thị hai phía và
các bài toán ghép cặp cơ bản trên đồ thị hai phía. Đây là những cơ sở quan
trọng để tiến hành ứng dụng thuật toán ghép cặp vào bài toán tuyển sinh sẽ

được trình bày ở các chương tiếp theo.

Số hóa bởi Trung tâm Học liệu – ĐHTN


25

Chương 2: BÀI TOÁN GHÉP CẶP
Trong chương 2 trình bày bài toán ghép cặp tổng quát và bài toán hôn
nhân bền vững. Bài toán hôn nhân bền vững là một trường hợp cụ thể của bài
toán ghép cặp và đây cũng là cơ sở để ứng dụng vào bài toán tuyển sinh đại
học ở nước ta.
2.1. Giới thiệu bài toán

2.1.1. Phát biểu bài toán
Cho tập X và Y. Mỗi phần tử của X có thể ghép với một số phần tử của
Y. Vấn đề đặt ra là tìm cách ghép mỗi phần tử của X với một số phần tử của
Y sao cho số cặp ghép là lớn nhất.
2.1.2. Các định nghĩa
Các định nghĩa dưới đây được sử dụng cho bài toán ghép cặp:
Định nghĩa 1 (Ghép cặp): Cho 2 tâ ̣p rời nhau C và S. Một phép ghép :
C  S → C  S  {∅} là một phép ghép một đối tượng trong một tập cho
một hoặc nhiều đối tượng trong tập khác hoặc một đối tượng rỗng. Nếu một
đối tượng được ghép cặp với một đối tượng rỗng, chúng ta nói rằng các đối
tượng là "không ghép cặp được".
Một cách lý tưởng nhất đó là chúng ta phải thiết kế một thuật toán có thể
đáp ứng được những định nghĩa dưới cho bài toán ghép đôi:
Định nghĩa 2 (Tính hợp lý riêng): Một phép ghép μ là hợp lý riêng nếu
không tồn tại trường hợp: đối tượng i đã được ghép cặp với μ(i) nhưng đối
tượng này lại thấy không phù hợp với μ(i).


Số hóa bởi Trung tâm Học liệu – ĐHTN


×