日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图论 —— 稳定婚姻问题与延迟认可算法

發布時間:2025/3/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图论 —— 稳定婚姻问题与延迟认可算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【穩定婚姻問題】

1.集合 M 表示 n 個男性

2.集合 F 表示 n 個女性

3.對于每個人我們都按異性的中意程度給出一份名單(從最中意的到最不中意的)

如果沒有?,f 對 m 比對她的配偶中意的同時 m 對 f 比對他的配偶更加中意,那么這個婚姻是穩定的。

如果一個穩定配對不存在另一個穩定婚姻配對,那么這樣的配對方案是穩定的。

用 A、B 給男性標號,用 1、2 給女性標號,將所有男性從上到下列在左側,括號里的數字表示對所有女性的排名,再把所有女性列在右側,用括號里的字母表示她們對所有男性的排名。

如下圖,每個男的都喜歡女 1,但女 1 更喜歡男 B,女2 更喜歡男 A,若按 A-1,B-2 進行搭配,則男 B 和女 1都更喜歡對方,這樣的婚姻搭配就是不穩定的。

但若按 A-2,B-1 的方案進行搭配,這樣的搭配就是穩定的了

【修補策略】

可能很多人會立即想到一種尋找穩定婚姻搭配的策略:不斷修補當前搭配方案,如果兩個人互相都覺得對方比自己當前的伴侶更好,就讓這兩個人成為一對,剩下被甩的那兩個人一對。如果還有想要私奔的男女對,就繼續按照他們的愿望互換情侶,直到最終消除所有的不穩定組合。

容易看出,應用這種 “修補策略” 所得到的最終結果一定滿足穩定性,但這種策略的問題在于,它不一定存在 “最終結果”,應用這種策略反復調整方案,最終可能會陷入一個死循環,因為該策略不能保證得出一個確定的方案來。

【延遲認可算法】

1.概述

延遲認可算法是由 David Gale 和 Lloyd Shapley 發明的一種尋找穩定婚姻的策略,因此也叫 Gale-Shapley 算法。

該算法的最大意義在于,并不需要親自了解每個人的偏好,去計算穩定婚姻匹配,只需按照這個算法組織一個活動,將算法流程當作游戲規則告訴每個人,當活動結束后,會自動得到一個大家都滿意的婚姻匹配。

2.算法流程

在這種策略中,男性將一輪一輪的去追求他中意的女性,女性可以選擇接受或者拒絕她的追求者。

1)第一輪

每個男性都去選擇自己名單上排名首位的女性,向她表白。

此時,一個女性可能面對的有三種情況:① 沒有人向她表白;② 只有一個人向她表白 ③ 不止有一個人向她表白

在情況 ① 下,這個女性事情都不用做,只需等待下一輪

在情況 ② 下,接受那個人表白,并暫時與他在一起

在情況 ③ 下,選擇所有追求者最中意的一位,并暫時和他在一起

第一輪結束后,有些男性已經有女朋友了,但有些男性仍然是單身。

2)第二輪

每個單身男性都從所有還沒拒絕過自己的女性中選擇自己最中意的那個,不管她是否單身。

與第一輪一樣,女性們需要選出自己最中意的那個,并暫時和他在一起。如果這個女性已經有男朋友了,當她遇到了更好的追求者時,她必須拒絕掉現在的男友,投向新的追求者的懷抱。

這樣,一些單身男性將會得到女友,那些已經有了女友的人可能重新單身。

3)以后的每一輪

以第一、二輪為例,在以后的每一輪,單身男性繼續追求其列表中的下一個女性,女性則從包括現男友在內的所有追求者中選擇最好的一個。

這樣一輪一輪的繼續下去,直到某個時候所有人都不再單身,下一輪將不會再有新的表白發生,整個過程自動結束,此時的婚姻搭配一定是穩定的。

3.穩定性證明

隨著輪數的增加,總有一個時候所有人都能配對,不會像之前的 “修補策略” 一樣出現無法終止的情況。

由于在每一輪中,至少有一個男性向某個女性告白,因此總的告白次數將隨著輪數的增加而增加,倘若這個流程一直沒有因所有人都配上對了而終止,最終必然會出現某個男性追遍了所有女性的情況,而一個女性只要被人追過一次,以后就不可能單身了。既然所有女性都被這個男性追過,那么就說明所有女性現在都不是單身,也就是說此時所有人都已配對。

隨著輪數的增加,一個男性追求女性的對象總是越來越糟,但一個女性的男友只可能變得越來越好。假設男 A 和女 1 各有各自的對象,但比起現在的對象,男 A 更喜歡女 1,因此男 A 之前肯定向女 1 表白過,既然女 1 最后沒有跟男 A 在一起,那么說明女 1 拒絕了男 A,也即說明女 1 有了比男 A 更好的男性。

這就證明了,兩個 人雖然不是一對,但都覺得對方比自己現在的伴侶好的情況絕不會發生。?

4.算法簡述與有利性分析

整個算法可以簡述為:每個人都去做自己想做的事情,對于男性來說,從最喜歡的女性開始追是順理成章的,對于女性來說,不斷選擇最好的男性符合她的利益,因此所有人會自動遵循規則,不用擔心有人虛報偏好。

事實上,穩定婚姻搭配往往不止一種,然而上述算法的結果可以保證,每一位男性得到的伴侶都是所有可能的穩定婚姻搭配方案中最理想的,同時每一位女性得到的伴侶都是所有可能的穩定婚姻搭配方案中最差的。

【實現】

int couple;//總共多少對 int Male_Like[N][N];//男性對女性的喜歡程度 int Female_Like[N][N];//女性對男性的喜歡程度 int Male_Choice[N];//男性的選擇 int Female_Choice[N];//女性的選擇 int Male_Name[N],Female_Name[N];//姓名的hash queue<int> Free_Male;//沒有配對的男性 char str[N]; int main(){scanf("%d",&couple);while(!Free_Male.empty())//清空隊列Free_Male.pop();for(int i=0;i<couple;i++){//存入男性名字,初始都沒有配對scanf("%s",str);Male_Name[i]=str[0]-'a';Free_Male.push(Male_Name[i]);}for(int i=0;i<couple;i++){//存入女性名字,初始都沒有配對scanf("%s",str);Female_Name[i]=str[0]-'A';}sort(Male_Name,Male_Name+couple);//對名字排序for(int i=0;i<couple;i++){//男性對女性的印象,按降序排列scanf("%s",str);for(int j=0;j<couple;j++)Male_Like[i][j]=str[j+2]-'A';}for(int i=0;i<couple;i++){//女性對男性的印象,添加一虛擬人物,編號為couple,為女性初始對象scanf("%s",str);for(int j=0;j<couple;j++)Female_Like[i][str[j+2]-'a']=couple-j;Female_Like[i][couple]=0;}memset(Male_Choice,0,sizeof(Male_Choice));//所有男性初始選擇都是最喜歡的女性for(int i=0;i<couple;i++)//先添加女性的初始對象Female_Choice[i]=couple;while(!Free_Male.empty()){int male=Free_Male.front();//找出一個未配對的男性int female=Male_Like[male][Male_Choice[male]];//男性心儀的女性//女性對男性的喜愛度大于當前對象if(Female_Like[female][male]>Female_Like[female][Female_Choice[female]]){Free_Male.pop();//男性脫單if(Female_Choice[female]!=couple){//如果有前男友且不為虛擬對象coupleFree_Male.push(Female_Choice[female]);//其前男友進入隊列,重新變為光棍Male_Choice[Female_Choice[female]]++;//其前男友考慮其下一對象}Female_Choice[female]=male;//當前男友為當前男性}else//如果被女性拒絕Male_Choice[male]++;//考慮下一對象}for(int i=0;i<couple;i++){printf("%c ",Male_Name[i]+'a');ptintf("%c\n",Male_Like[Male_Name[i]][Male_Choice[Male_Name[i]]]+'A');}return 0; }

【例題】

  • The Stable Marriage Problem(POJ-3487):點擊這里

總結

以上是生活随笔為你收集整理的图论 —— 稳定婚姻问题与延迟认可算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。