「穩定婚姻演算法」雨夜談 M N資源匹配問題

2021-09-02 18:49:15 字數 1532 閱讀 8015

連續數月的陰雨綿綿,江南煙雨似乎沒有停止的跡象,近日又迎來了下半年目前為止最猛烈的寒潮,無論哪乙個都是我超級期待和喜歡的,這樣的天氣,不適合睡覺。

乙個很不錯的演算法,穩定婚姻演算法

:穩定婚姻問題/12760040

:這個話題起源於一次相親活動,最終落實到了乙個演算法。演算法簡要記述如下:

初始:兩個單身集合:男-m,女-f

演算法過程:

while m非空

m = m取出乙個

f = 未拒絕過m的f集合中自己最心儀的

if f是單身

f嫁給m

m從m集合移除

else

if f比現有丈夫m'更喜歡m

f和m'離婚

f重新嫁給m

m'進入單身集合m

else

m重新進入單身集合m

end-if

end-if

end-while

演算法本身本文不再贅述,本文聊一些不那麼技術的東西,來看看這個穩定婚姻匹配演算法都用在什麼場合。

名字說是穩定婚姻演算法,但實際上,這個演算法最不適用的場景就是配婚的場景,或者說,真正的婚姻可能一輩子都在實施這個演算法,而不是在配婚的當時。至少可以肯定的是,婚姻完全是乙個超級複雜的話題,不可能用算術加加減減就能理清的…

這個演算法有點名不符實了。

本質上,這個名不符實的演算法是乙個m對n的資源/使用者配對演算法。典型的場景就是房產中介,網際網路公司獵頭,gslb,推薦系統等。

事實上,只要是m對n的匹配系統,均可以用穩定婚姻演算法來求最優解,這個和1對n的系統是不同的。我來簡單說明一下。

1對n系統,典型就是lvs負載均衡,當乙個請求來到時,顯而易見,需要在n個伺服器中選擇乙個最適合的,演算法就結束了。然而如果同時來了m個請求,就不能這麼簡單了,我們為這m個請求中的其中1個請求假設為c1,按照負載均衡演算法分配了一台伺服器k,但是k是不是更適合服務另乙個請求c2呢?這就是乙個問題,所以為c1這個請求分配伺服器的過程並沒有就此結束,c1只是暫時和k配成了對,搞不好最終的結果會推翻這個結論,讓c2和k配成一對。

這裡要解釋的一點是,如果k已經許給了c1,那麼k為什麼不能再許給c2呢?並不是因為這可能會增加k的負載,構成乙個非最優的匹配,而是因為k許給了c1這件事會改變系統的穩定性

所以,m對n的匹配系統必須執行某種程度的雙向匹配機制,但是匹配的過程必然是按照某種順序在進行,每一輪的過程必然會沉澱下來一定的穩定組合,所以必然存在匹配集合雙方一方越來越高概率匹配到更好的,而另一方則越來越高概率匹配到更差的

。因此,沒有什麼所謂的雙向選擇機制是完全對等的!這可以很好的解釋甲方和乙方的非對等性。

一直在下雨,非常爽!有幾多皮鞋?進水溼,更有幾多皮鞋進水胖?

浙江溫州皮鞋溼,下雨進水不會胖!

穩定婚姻匹配演算法

問題概述 n名男青年和n名女青年參加乙個相親會。經過了解,每名男青年在心目中都對所有女青年作了乙個排序,而每名女青年同樣也對男青年作了排序。問這些男女青年之間怎樣才能進行理想的配對。給出男青年和女青年的偏好矩陣 演算法求解過程 演算法設計 1 根據男性的偏好矩陣來進行遍歷 2 在男性的偏好矩陣中依次...

穩定婚姻匹配

要求按照書中 page 5 的 g s 演算法寫乙個匹配程式 由男方發起邀請 第一行資料表示 man woman 的數目 n 接下來的資料中,第乙個 n n 的資料塊表示 man 的優先列表 另乙個 n n 的資料塊表示 woman 的優先列表 5 man woman 的數目 n 2 1 4 5 3...

穩定匹配問題 穩定婚姻演算法設計

include using namespace std bool finish or not int,int bool current male is better int num,int male rank in female,int current,int chasing int main fo...