婚姻演算法
婚姻演算法是由gale和shapley提出,不考慮版本是雇主和員工還是男女情侶,現在我們只討論男女情侶,討論另外一種也可以,其中包含的條件都是相似的。要在已知每個人喜好排名的情況下,安排出匹配。使得婚姻穩定,現在就急需乙個穩定機制使得每個人都擁有一段穩定婚姻。
穩定婚姻要求完美匹配且穩定。完美匹配要求每個人最終都會跟某人結婚,沒有落單,且一夫一妻。穩定匹配要求在已有的匹配下不能出現以下情況:在匹配中(m1,w1)和(m2,w2)為兩對匹配,m1相比於w1更喜歡w2,且w2相比於m2更喜歡m1,否則會出現出軌或者私奔情況。
在g-s演算法中基本思路如下,男女狀態都有三個:自由,約會,已婚。根據以下規則構成匹配
·起初每個人都是自由,自由男向優先表中排名最靠前的女方表白,此時(m,w)立即成為約會狀態。
·已約會女方可被其他自由男表白,若此自由男比現有的約會物件在排名上高,則拋棄現有約會物件,與此自由男進入約會關係(m1,w)。自由男會不停的按照排名依次向女方表白,直到最後,但不會拋棄現有的約會物件。
·最後所有人都進入約會狀態,此時所有的約會物件變成結婚物件,狀態變成已婚。
看起來相當簡單的一種演算法,若表示成**形式只需幾個迴圈:
m∈m,w∈w,分別表示男方,女方。
初始化所有的m∈m,w∈w為自由
while存在男士m是自由且還沒對所有女方表白
//若男士m優先表中沒有表白的女方排名最高的是女士w
if 女士w為自由
(m,w)進入約會狀態;
else 女士w在與m1約會
if 女士w更喜歡m1,then 男士m繼續單身,(w,m1)戀愛狀態不變;
if 女士w更喜歡m,then男士m1進入單身,(w,m)進入戀愛狀態;
待迴圈結束,輸出所有的匹配結果。
儘管g-s演算法看起來相當簡單,但我們不敢確定演算法會返回乙個完美穩定匹配結果,我們需要證明來肯定我們的觀點:
①首先要證明g-s演算法返回乙個完美匹配結果:首先要肯定在男士一次次的表白後,進入約會狀態的男女對數只增不減,因為只有更好的男士追求了女方,女方才會拋棄現有的約會物件,所有被表白的女方都是處於約會狀態的。不會出現某個男士m是自由的,但所有的女方都被其表白。因為若所有的表白的女方都進入約會狀態,需要所有的男士都進入約會狀態,與前提有乙個男士對所有的女士都表白但還是處於單身相違背。即在所有迴圈結束後,會得到乙個完美匹配結果。
②再證g-s演算法返回乙個穩定匹配結果:首先我們先從已有的約會集合中判斷是否穩定。當第乙個男士向第乙個女士表白後有(m,w),顯然是穩定的,因為沒有其他的約會物件使得已有的約會物件不穩定。若有新的匹配物件出現(m1,w1),是否還穩定?首先m1沒有向w表白,證明男士m1的排名表上w1的排名要高於w;或者m1在向w表白後,w拒絕了m1的表白,因為w的排名表上m的排名比m1的排名高。兩種情況都是穩定的因為女方會在現有被追求的男士中挑選最好的,使得匹配穩定。以後的每一次表白也遵循這樣的規則使得匹配一直穩定。結合①即演算法最後會返回乙個完美穩定匹配結果
在返回了乙個完美穩定的演算法之後,我們會想是不是完美穩定的匹配結果是唯一的。我們考慮這種情況:
m1的優先表:w1 w2
m2的優先表:w2 w1
w1的優先表:m2 m1
w2的優先表 : m1 m2
在g-s演算法中給出的完美穩定匹配為(m1,w1),(m2,w2)。但我們看(m1,w2),(m2,w1)也是穩定的。只是g-s演算法只會給出多個穩定匹配中的乙個。
沒有看到結果前,貌似男士在g-s演算法中吃了大虧,因為總會被女士拋來拋去,在女方有了更喜歡的男士表白,就扔下現有的約會物件,跟那個表白的人約會。
所以要從更深的意義上理解為什麼出現這種情況,為何看似男士一直被女方拋棄但演算法是偏向男士的。
在演算法中,女士被第一次表白必定成功這是肯定的。這就說明女士的擇偶標準沒有下限,她的排序表只在被表白的時候才能體現,而在沒有被表白的時候,她不能主動的去表白,在所有的匹配結果中女士的主動權幾乎喪失。而男士則一直在排序表從上至下的表白,一直尋找到乙個最佳的有效約會物件。所有排名比現有的女伴要高的女士都把此男士拒絕過,而且此女士是沒有拒絕男士中排名最高的。所以g-s演算法對於男士來說所得到的伴侶是所有穩定匹配中最好的。
事實上g-s演算法給出的穩定匹配結果是女士所有可能的匹配的男士結果中最差的,以下給出證明。
g-s演算法在現實生活中的意義在於,在得知現有已有人群的需求列表的基礎上。把總體的期望值達到最高。而且這是一種非常簡單的辦法,簡單到你不用了解每個人的各種細節的偏好,只需要把他們的排序表拿出來,根據演算法肯定可以得到乙個大家都滿意的穩定結果。
在g-s演算法沒有被提出之前,美國就開始用這種辦法給醫學院的學生安排工作,這被稱為」全國住院醫師配對專案「。各醫院從沒有拒絕本學院的學生中選出最佳人選並表示可以聘用,然後同學在收到醫院的聘用通知後,系統根據所填寫的意願表將他自動分配到意願最高的醫院並拒絕其他的聘請,直到迴圈結束。最後便可以使所有學生分配到工作。但當時只是使用了這個演算法,並不知道演算法的穩定性,只是感覺上演算法是合理的。其實演算法是真的合理。也確實解決了當時的醫師匹配專案問題。
g-s演算法可以真正的用於婚姻中,比如男女相親欄目,作為欄目的組織者,只需讓男女雙方在開始的時候了解每乙個異性,給異性排名,然後根據演算法用男女的排序表自動就可以得出n對穩定情侶。省時省力,幾百對情侶估計幾秒或者更短的時間就被演算法得出。當人們質疑這種演算法的優質的匹配效率的時候,g-s演算法恰被證實是一種穩定的匹配。
在此g-s演算法也解決了高考志願問題,但我們沒有考慮學校分專業問題,若我們把學校的每個專業作為婚姻演算法中的乙個物件也可以解決多專業問題。實際上操作起來便沒有那麼輕鬆。因為要收集的資訊量激增,每個學生要對所有大學的所有專業做出排名。然後根據g-s演算法得出匹配結果。
雖在收集資料的時候多花費了很多時間,但這完美解決了志願填寫問題,因為現有的志願填寫很大程度上束縛了學生的自由意志。若學生給出了所有選擇的排序而不是只有幾個志願,顯然使學生的公平性有了質的提公升。
把g-s演算法推廣到更深,g-s演算法可以解決眾多的對立的多個體多選擇的競爭問題上。其中對立指所有的物件氛圍兩陣營,如男女,學生和大學,雇主和職員。雖然其中存在著選擇與被選擇的優劣性問題。多個體指每個陣營中有著不少的個體,有著不少的基數。多選擇指每個個體對另外乙個陣營的個體有著自己的選擇次序。競爭是指在被選擇方的要求人數到達上限時,會選擇性的把最優的留下,剩下的拒絕。
不可否認的是g-s演算法的不公平性,因為選擇方得到的結果是所有匹配結果中最好的,被選擇方得到的結果是所有匹配結果中最差的。所以在現實生活中使用此演算法應該有所顧忌。但g-s給我們的啟示不僅如此。
根據g-s演算法我們應該想,生活中在追求事物時多嘗試,你總是等待機會出現然後選擇最好的,但不去自己追求。最後的結果就是在g-s演算法中充當被選擇方,最後得到的是你可以得到的所有選擇中最差的。所有的嘗試都不是徒勞的,你在一次次被拒絕後,你身心疲憊,得到的卻是最好的。或許你不可能嘗試每乙個喜歡的選擇,但是你每次的嘗試都會給你乙個更好的定位。
完。
穩定婚姻匹配演算法
問題概述 n名男青年和n名女青年參加乙個相親會。經過了解,每名男青年在心目中都對所有女青年作了乙個排序,而每名女青年同樣也對男青年作了排序。問這些男女青年之間怎樣才能進行理想的配對。給出男青年和女青年的偏好矩陣 演算法求解過程 演算法設計 1 根據男性的偏好矩陣來進行遍歷 2 在男性的偏好矩陣中依次...
穩定婚姻問題學習筆記
1.uva1175 ladies choice 最簡單的板子,直接上 抄的大劉的 include include include include include include include include include include include include using namespa...
穩定匹配婚姻 c 版GS演算法
給出乙個 n 個男性的集合 m和 n 個女性的集合 w,找到乙個 穩定 匹配。每位男性根據對女性的心儀程度從高至低進行排名 每位女性根據對男性的心儀程度從高至低進行排名。初始讓所有男孩女孩處於空閒狀態 while 存在任意男孩m是空閒的,且沒有對每個女孩求過婚 選擇這個男孩m 假設w是男孩m還沒求過...