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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

edmonds算法matlab,匈牙利算法的matlab实现

發布時間:2023/12/3 循环神经网络 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 edmonds算法matlab,匈牙利算法的matlab实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匈牙利算法

算法簡介

算法原理

算法實現(附代碼)

測試

算法簡介

下面摘用百度百科中的解釋。

匈牙利算法(Hungarian method)是由匈牙利數學家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性證明的思想,它是二分圖匹配最常見的算法,該算法的核心就是尋找增廣路徑,它是一種用增廣路徑求二分圖最大匹配的算法。

簡單來說,匈牙利算法就是為了解決匹配問題的一種算法。

可以設想這樣一個問題,有三個工人要共同完成三件任務。每個人只能專注完成一件任務。且工人完成不同任務所需要的時間是不一樣的。當然這里可以直接通過枚舉的方式來遍歷所有的分配方式來進行求解。但當求解的問題的維度變得比較大時,這樣處理就顯得不太明智了。所以,為了解決這一類問題,匈牙利算法得以提出。

算法原理

算法的輸入時一個代價矩陣c c,其中cij c i j表示工人i在任務j上的工作時長。

算法總的來說分成幾步。

step1

將矩陣c c化為每行每列都至少有一個0的矩陣。

例如輸入矩陣c=(1243) c = ( 1 4 2 3 )

首先處理行

找到每行中的最小1元素,如第一行中找到的是1,第二行中是2。每行中所有元素都減去該最小元素得(0031) ( 0 3 0 1 )。

之后處理列

這里檢查列發現第二列中沒有0元素。故繼續找到第二列總最小元素,并用第二列中的元素減去該最小元素,得(0020) ( 0 2 0 0 ).

step2

檢查矩陣中是否有相互獨立0的元素。也就是說能否找到與矩陣維度相同數目的0,它們占據不同的行列位置。如上的例子就可以找到這樣的兩個零元素,c11 c 11和c22 c 22。當然也有不是這種情況的例子。如[

????????02090531086005032070620542???????? ( 0 5 0 2 2 2 3 0 0 0 0 10 5 7 5 9 8 0 0 4 0 6 3 6 2 ) ]

如果在該步能找到獨立零,則算法就可在此結束。如上的例子,可以輸出

(1122) ( 1 2 1 2 ) .表示工人1完成任務1,工人2完成任務2。否則繼續執行下面步驟。

step3

以每一個0元素為中心畫十字架(即選中所有零元素所在的行元素和列元素)。找出沒有被選中的元素。然后將沒有被選中的元素所在的行進行標記。然后執行以下兩個步驟

1. 對以標記的行中的零元素所在的列進行標記。

2. 對已標記的列中的零元素所在的行進行標記。

重復進行上述操作,直至不能再進行標記為止。

可以證明,沒有標記的行以及標記了的列可以覆蓋所有的零元素。

step4

對沒有覆蓋的元素,找到里面值最小的一個。將標記了的行中的所有元素減去這個值,將標記了的列中的元素加上這個值。這樣的操作可以確保在未被覆蓋的區域內至少產生一個0,且原本的0元素不會改變。

之后跳轉到step2。

代碼

傳送門

簡要說明一下。Hungarian.m文件是主程序。

兩個輔助程序:

1. fix.m用于查找最佳分配,如果答案則可在all中得到所有最佳匹配。否則all為空,result中保存次最佳匹配。

2. findMin.m用于找到指定下標范圍內的最小元素。

測試結果

輸入

輸出

輸入

輸出

總結

以上是生活随笔為你收集整理的edmonds算法matlab,匈牙利算法的matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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