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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数学与算法】二部图、匈牙利匹配、稳定婚配

發(fā)布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数学与算法】二部图、匈牙利匹配、稳定婚配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

二部圖系列視頻

關(guān)于匈牙利匹配可以聯(lián)系下面兩篇博客更容易理解和補盲:
帶你入門多目標(biāo)跟蹤(三)匈牙利算法&KM算法
趣寫算法系列之–匈牙利算法

14.1 二部圖

廣度優(yōu)先搜索
廣度優(yōu)先,可以使用隊列來操作:

  • 依次遍歷節(jié)點,首先遍歷第一個節(jié)點A,判斷節(jié)點A是否遍歷過,如果節(jié)點A沒有遍歷過,就把節(jié)點A添加進隊列。
  • 然后取出隊列中的第一個元素A,對于和節(jié)點A連接的某節(jié)點B和節(jié)點C等,把節(jié)點B和c進行標(biāo)記(標(biāo)記就是根據(jù)題目的具體要求進行操作,即你的目的是什么你就干什么),并且如果節(jié)點B和c沒有遍歷過,那么把節(jié)點B和C添加進隊列。
  • 然后再取出隊列中的第一個元素,就是節(jié)點B,遍歷到了B節(jié)點,再對和B節(jié)點連接的節(jié)點D進行標(biāo)記,并且判斷D是否遍歷過,沒有遍歷過的話就添加到隊列。
  • 然后再取出隊列第一個元素,為節(jié)點C。以此類推

14.2 無權(quán)二部圖的最大匹配,最大流問題,其中有個網(wǎng)絡(luò)最大流方法,貪心算法找最大匹配可能會失敗。
貪心算法,每次局部最優(yōu),得到全局最優(yōu)。
例如,每次只能從錢箱子里面取一張鈔票,那肯定是每次都拿里面面值最大的一張,這樣就會得到最優(yōu)結(jié)果。
無權(quán)二部圖的每條邊權(quán)重都是一樣的,為1。無權(quán)并不是說權(quán)重為0。

14.3有權(quán)二部圖的最大匹配和最小匹配,把圖邊制作一個鄰接矩陣。我們的目標(biāo)是尋找權(quán)重之和最大的匹配。最大匹配限制條件:每一個節(jié)點都只能擁有一條邊。注意,二部圖并不是每個節(jié)點只有一條邊。
以寵物收養(yǎng)為例,有權(quán)二部圖的邊的權(quán)重表示人對寵物的喜好程度,沒有邊表示喜好程度是0,也就是完全不喜歡。
寵物收養(yǎng)機構(gòu)應(yīng)該尋找有權(quán)二部圖中的最大匹配。最大匹配,意味著讓人領(lǐng)養(yǎng)最喜歡的寵物,獲得最大的幸福感。

對于有權(quán)圖,最大匹配和最小匹配是可以相互轉(zhuǎn)化的。只需要把所有權(quán)重乘以?1\color{blue}-1?1全都變?yōu)樨?fù)數(shù)即可。即,本來求最大值,最大值乘以 ?1\color{blue}-1?1 就變成了最小值了。

最大匹配是最優(yōu)匹配,即所有匹配權(quán)重之和(函數(shù)值)最大。
最小匹配也是最優(yōu)匹配,即所有匹配權(quán)重之和(函數(shù)值)最小。

  • 最大匹配可以理解為人對物體的喜好程度,每個人對分配給他的物體的喜好的和值最大的匹配對,就是最大匹配;
  • 最小匹配可以理解為兩種物體的差異,所有物體差異的和值最小,就是最小匹配。

匈牙利算法用來尋找有權(quán)二部圖中的最小匹配。但是匈牙利匹配中有一個限制,就是兩個集合中的節(jié)點數(shù)都一樣為n,即鄰接矩陣必須是一個 n?n\color{blue}n*nn?n 的方陣。匈牙利算法的時間復(fù)雜度是 n3\color{blue}n^3n3

問:匈牙利算法的輸入必須要是方陣嗎,也就是左右數(shù)目一樣嗎?

答:匈牙利算法不需要,KM算法必須得是完全匹配(可以補權(quán)值為零的邊得到)。
但是在自動駕駛中,一般直接用匈牙利算法代指KM算法,里面調(diào)用的就是KM算法。
所以,自動駕駛中指代額匈牙利算法,是一個方陣n*n。如果有一條邊權(quán)值為0,就表示二者沒有邊。
所以,如果匈牙利算法+KM算法最終得到的二者匹配的一對,如果邊的權(quán)重為0,就表示不匹配。并不表示強行把二者給匹配起來。

匈牙利算法是解決最小匹配的問題,但是我們實際問題如果是要求最大匹配,應(yīng)該怎么辦呢?我們可以把最大匹配等價轉(zhuǎn)換為最小匹配,即,把權(quán)重全部取反,這樣就把喜愛程度變成厭惡程度了,然后再調(diào)用匈牙利算法即可。
最小匹配的理解就是幸福度最低,我們最開始是+10\color{blue}+10+10,表示特別喜歡某只寵物,取負(fù)數(shù)就變成了特別不喜歡這只寵物,如果每個人都分配到了最最不喜歡的寵物,那么就是最小匹配。所以最小匹配并不是說被領(lǐng)養(yǎng)的寵物最少,而是最差匹配。最大匹配應(yīng)該理解為最優(yōu)匹配,最小匹配應(yīng)該理解為最差匹配。

不過,不要狹隘的理解最大匹配和最小匹配的匹配結(jié)果是一樣的。因為最大匹配是權(quán)值之和最大的匹配,而最小匹配是權(quán)值之和最小的匹配。兩個集合中,最大匹配和最小匹配肯定不會是同一種匹配結(jié)果。前面介紹的最大匹配和最小匹配的互相轉(zhuǎn)化,最終的匹配結(jié)果是同一種,只不過因為最小化更容易求解,例如匈牙利匹配就是根據(jù)尋找權(quán)重之和的最小值來求解問題的。

【14-4: 匈牙利算法 Hungarian Algorithm-嗶哩嗶哩】

匈牙利算法只需要操作鄰接矩陣

最大匹配并不唯一,可能有多種匹配方式都能達到同樣幸福度。

14.6 穩(wěn)定婚配問題
Gale-shapley解決穩(wěn)定婚配問題。就是n\color{blue}nn個男人分別對n\color{blue}nn個女人進行愛慕程度排序,n\color{blue}nn個女人也分別對n\color{blue}nn個男人進行愛慕程度排序。
每個男性都首先選擇最喜歡的女性,如果女性的愛慕程度的最優(yōu)選擇不是你,你就劃掉該女性,下次匹配不會再考慮她,然后你再選擇你第二愛慕的女性,直到配對成功。并且每次匹配之后,依舊單身的男性先選擇女性,無論女性是否已配對,可以挖墻腳,把已配對的男性變成單身。直到最后所有男人配對成功(此時所有女人也會配對成功)。

總結(jié)

以上是生活随笔為你收集整理的【数学与算法】二部图、匈牙利匹配、稳定婚配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。