問題背景:
n個男生和m個女生進行匹配約會,當然一個男生至多和一個女生約會,一個女生也至多和一個男生約會,並且每個男生心中都有一個對女生的排名表,即表示了這個男生更願意與哪個女生約會,不同男生的排名表不一定相同,每個女生也都有一個對男生的排名表。現在要求你求一個匹配,這個匹配不含 不穩定因素。
不穩定因素:一個男生A,一個女生B,A與A‘匹配,B與B’匹配,但A更願意與B匹配,B也更願意與A匹配,具有這種性質的(A,B)就被稱為不穩定因素。
數學模型:
兩個點集:M,W,M={m1,m2,m3……,mn},W={w1,w2,w3……,wm},M和W的交集為空集,記M*W為M與的笛卡爾積,也就是所有(m,w)形成的二元有序對所構成的集合。匹配S為M*W的子集,且滿足每個M的元素和每個W的元素至多出現在S的一個有序對中。
每個m對所有的w都有一個排名,每個w也對所有的m有一個排名。
穩定匹配是不包含不穩定因素的匹配。
不穩定因素:是一個有序對(m,w'),且(m,w),(m',w')屬於匹配S,但m對w'的排隊(m所認為的w'的排名)高於m對w的排名,且w對m的排名高於m對w'的排名,這樣(m,w')就是一個不穩定因素。
穩定匹配集求解算法:Gale-Shapley算法
初始,所有人都是自由的,稱所有人的狀態為自由。一個男生m向他的排名表上排名最高的女生w發起邀請,待所有男生都發送完邀請后,女生開始篩選邀請,即挑選她認為的排名最高的男生,二人的狀變為約會。
然后那些仍處於自由狀態的男生,按照他的排名表 順序 邀請下一個人(也就是說,如果一個男生上一次邀請了排名為i的女生,這次他將邀請排名為i+1的女生),不管他所邀請的人是否處於約會狀態。待所有自由狀態的男生發送完邀請后,女生再次篩選邀請。重復此過程,直至所有男生都不再發送邀請,這時所得的匹配即為穩定匹配。
算法的有窮性:
因為一個男生不會邀請同一個女生兩次,邀請次數最多為N*M時算法一定結束。
另一種思路:讓人數少的集合表示男生,人數多的集合表示女生,即N<=M;假設存在一個男生邀請了M次后仍然沒有匹配結果,那么此時M個女生都已經匹配(否則這個男生會被沒有匹配結果的女生所接受),又每個女生的匹配對象不相同,男生中至少有一個人沒有匹配對象,所以M<N,與假設相悖,所以假設錯誤,所有的男生都已經匹配。
正確性證明:反證法
假定結束時仍存在不穩定因素(m,w'),此時m與w匹配,m'與w'匹配。分兩種情況考慮:
第一:m在邀請w之前邀請過w',但w'的最終匹配對象變成了m',這就說明了w'認為m'更加優秀,與我們的假設相悖。
第二:m沒有邀請過w',也就直接說明了m認為w'更加優秀,與我們的假設相悖。
所以,假設錯誤,不存在不穩定因素。
結果的唯一性:
在選定了發起邀請的集合后,算法執行的結果是一定的。
定義匹配狀態:執行完某輪邀請篩選后男女生的匹配狀況。
證明:
狀態轉移的唯一性。開始所有人都處於自由狀態,匹配狀態唯一。進行第一輪,每個男生所邀請的對象都是確定的(他們排名表上的第一名),所以每個女生所接受到的邀請都是一定的,那么她們所接受的邀請也是一定的(她們排名表上靠前的那個)。所以進行完第一輪后匹配狀態是一定的,然后第二輪中發送邀請的男生確定(仍處於自由狀態的男生),他們邀請的對象確定(排名表上的下一名),因而第二輪結束后匹配狀態也一定。重復下去,結束時匹配結果就是確定的。因而該算法執行結果唯一(前提:選定了發出邀請的一方)。
G-S性質:發起邀請的一方在算法執行過程中其匹配對象越變越差,接受邀請的一方在匹配過程中其匹配對象越變越好。
注意:穩定匹配存在多種,G-S算法求出的只是其中一種。但G-S算法所求出的匹配對發出邀請方最為有利,對邀請接受方最為不利。
定義:
有效伴侶:若存在一個穩定匹配使得m是w的匹配對象,則稱m是w的有效伴侶。
最佳有效伴侶:在m的所有有效伴侶中m最滿意的伴侶w為最佳有效伴侶,記作best(m)=w;
證明:G-S算法所求出的匹配中,邀請發出方中每個人都與其最佳有效伴侶相匹配。
假設G-S算法執行結束后存在男生沒有和最佳有效伴侶組合,這樣的男生叫做倒霉男,倒霉男都被自己的最佳有效伴侶拒絕過,取其中第一個被最佳有效伴侶拒絕的人,記為m,其最佳有效伴侶為w。記M被W拒絕時M的匹配對象為w’。(1、M邀請W時,W因為M‘拒絕M;2、M’邀請W導致M被拒)
又w是m的最佳有效伴侶,所以存在一個穩定匹配S’,m和w組合,假設在這個匹配中m'和w'組合,所以w'也是m'的有效伴侶。
第一種情況:對m'來說w'優於w,那么在S中,在m被w拒絕前,m'被w'拒絕,這也就說明了m'早於m被有效伴侶拒絕,那么m'一定更早的被最佳有效伴侶拒絕了,這與m是第一個被最佳有效伴侶拒絕的相矛盾。
第二種情況:對m'來說w由於w',那么在S‘中,m',w形成不穩定因素,這與S’是一個穩定匹配矛盾。
綜合這這兩種情況,G-S算法中不存在倒霉男。
擴展:該算法在一對多的時候也適用,即X部可以匹配多個或者Y部可以匹配多個,但當X部和Y部同時可以匹配多個點的時候不適用。
假設Y部點可以匹配多個點。則以X部點作為發出邀請方,Y部點在接收邀請時,檢測是否能優化自身目前的選擇,(優化:將一個好感度比當前邀請低的舍棄,使得整體的好感度上升)。
資料:http://www.icourses.cn/web/sword/portal/shareDetails?cId=3271#/course/chapter 第四章 時間:39:30 PS:這個老師講的更加通俗易懂
比較詳細的PPT:https://www.docin.com/p-2042973211.html 大力推薦!!!!!!