當前位置:首頁 » 操作系統 » 匈牙利演算法

匈牙利演算法

發布時間: 2022-02-05 21:51:55

Ⅰ 旅行商的匈牙利演算法

設一個Shortest_Path變數

先說用窮舉法求解,待會再介紹匈牙利演算法
用for循環,
默認是從A出發遍歷,
那麼有A-B-C-DA,A-B-D-CA,ACBDA,ACDBA,ADBCA,ADCBA(還有從BCD出發的等等等等)
然後就是一個個求
例如ABCD,那麼就是6+9+8+6(我猜A-B是6哪個,如果不是那就是8,反正方向是你自己設的)

就這么一個個的求出來所有最短路徑,每次當有更小的時候就記錄到Shortest_Path,最後就能得到了~~

至於匈牙利演算法我沒做過。。。但是其實本質是一樣的,只不過相當於做一個分支分別求解,這樣地演算法效率更高而已,具體的匈牙利程序網路里有很多 ~~

http://ke..com/view/501092.htm?fr=ala0_1_1

如果我講的不清楚你可以在網路hi上直接問我

Ⅱ 指派問題的匈牙利演算法,由B2得出最優指派這一步是怎麼算的

這是看對應的列向量最小值(即0)。第一列的最小量0在第2行,代表著第一個人對應第二個任務,第二列最小量0在第一行,代表著第二個人對應第一個任務,第三列的在第三行,第四列只能分配第四個,所以就有圖中的最優指派。

Ⅲ 求匈牙利演算法的原理

對於一個點x和一個點i,如果x和i匹配,那麼就匹配;如果i已和j匹配,那麼就看j能否和別的點匹配,如果能就可以x和i匹配,匹配數+1。

Ⅳ 匈牙利演算法具體怎麼操作啊

匈牙利演算法(Edmonds演算法)步聚:(1)首先用(*)標記X中所有的非M頂點,然後交替進行步驟(2),(3)。(2)選取一個剛標記(用(*)或在步驟(3)中用(yi)標記)過的X中頂點,例如頂點xi,如果xi與y為同一非匹配邊的兩端點,且在本步驟中y尚未被標記過,則用(xi)去標記Y中頂點y。重復步驟(2),直至對剛標記過的X中頂點全部完成一遍上述過程。(3)選取一個剛標記(在步驟(2)中用(xi)標記)過的Y中結點,例如yi,如果yi與x為同一匹配邊的兩端點,且在本步驟中x尚未被標記過,則用(yi)去標記X中結點x。重復步驟(3),直至對剛標記過的Y中結點全部完成一遍上述過程。 (2),(3)交替執行,直到下述情況之一出現為止: (I)標記到一個Y中頂點y,它不是M頂點。這時從y出發循標記回溯,直到(*)標記的X中頂點x,我們求得一條交替鏈。設其長度為2k+1,顯然其中k條是匹配邊,k+1條是非匹配邊。(II)步驟(2)或(3)找不到可標記結點,而又不是情況(I)。 (4)當(2),(3)步驟中斷於情況(I),則將交替鏈中非匹配邊改為匹配邊,原匹配邊改為非匹配邊(從而得到一個比原匹配多一條邊的新匹配),回到步驟(1),同時消除一切現有標記。(5)對一切可能,(2)和(3)步驟均中斷於情況(II),或步驟(1)無可標記結點,演算法終止(演算法找不到交替鏈).

以上演算法說穿了,就是從二分圖中找出一條路徑來,讓路徑的起點和終點都是還沒有匹配過的點,並且路徑經過的連線是一條沒被匹配、一條已經匹配過交替出現。找到這樣的路徑後,顯然路徑里沒被匹配的連線比已經匹配了的連線多一條,於是修改匹配圖,把路徑里所有匹配過的連線去掉匹配關系,把沒有匹配的連線變成匹配的,這樣匹配數就比原來多1個。不斷執行上述操作,直到找不到這樣的路徑為止。

Ⅳ 什麼是匈牙利演算法

談匈牙利演算法自然避不開Hall定理,即是:對於二部圖G,存在一個匹配M,使得X的所有頂點關於M飽和的充要條件是:對於X的任意一個子集A,和A鄰接的點集為T(A),恆有: │T(A)│ >= │A│
匈牙利演算法是基於Hall定理中充分性證明的思想,其基本步驟為:
1.任給初始匹配M;
2.若X已飽和則結束,否則進行第3步;
3.在X中找到一個非飽和頂點x0,作V1 ← {x0}, V2 ← Φ;
4.若T(V1) = V2則因為無法匹配而停止,否則任選一點y ∈T(V1)\V2;
5.若y已飽和則轉6,否則做一條從x0 →y的可增廣道路P,M←M?E(P),轉2;
6.由於y已飽和,所以M中有一條邊(y,z),作 V1 ← V1 ∪{z}, V2 ← V2 ∪ {y}, 轉4;

設數組up[1..n] --- 標記二分圖的上半部分的點。
down[1..n] --- 標記二分圖的下半部分的點。
map[1..n,1..n] --- 表示二分圖的上,下部分的點的關系。
True-相連, false---不相連。
over1[1..n],over2[1..n] 標記上下部分的已蓋點。
use[1..n,1..n] - 表示該條邊是否被覆蓋 。

首先對讀入數據進行處理 ,對於一條邊(x,y) ,起點進集合up,終點進集合down。 標記map中對應元素為true。

1. 尋找up中一個未蓋點 。
2. 從該未蓋點出發 ,搜索一條可行的路線 ,即由細邊出發, 由細邊結束, 且細粗交錯的路線 。
3. 若找到 ,則修改該路線上的點所對應的over1,over2,use的元素。重復步驟1。
4. 統計use中已覆蓋的邊的條數total,總數n減去total即為問題的解。

Ⅵ 匈牙利演算法的簡介

設G=(V,E)是一個無向圖。如頂點集V可分割為兩個互不相交的子集V1,V2
選擇這樣的子集中邊數最大的子集稱為圖的最大匹配問題(maximal matching problem)
如果一個匹配中,|V1|<=|V2|且匹配數|M|=|V1|則稱此匹配為完全匹配,也稱作完備匹配。特別的當|V1|=|V2|稱為完美匹配。

Ⅶ 匈牙利演算法 java

#include<stdio.h>
#include<string.h>
bool g[201][201];
int n,m,ans;
bool b[201];
int link[201];
bool init()
{
int _x,_y;
memset(g,0,sizeof(g));
memset(link,0,sizeof(link));
ans=0;
if(scanf("%d%d",&n,&m)==EOF)return false;
for(int i=1;i<=n;i++)
{
scanf("%d",&_x);
for(int j=0;j<_x;j++)
{
scanf("%d",&_y);
g[ i ][_y]=true;
}
}
return true;
}
bool find(int a)
{
for(int i=1;i<=m;i++)
{
if(g[a][ i ]==1&&!b[ i ])
{
b[ i ]=true;
if(link[ i ]==0||find(link[ i ]))
{
link[ i ]=a;
return true;
}
}
}
return false;
}
int main()
{
while(init())
{
for(int i=1;i<=n;i++)
{
memset(b,0,sizeof(b));
if(find(i))ans++;
}
printf("%d\n",ans);
}
}
Pascal:
Program matching;
Const
max = 1000;
Var
map : array [1..max, 1..max] of boolean; {鄰接矩陣}
match: array [1..max] of integer; {記錄當前連接方式}
chk : array [1..max] of boolean; {記錄是否遍歷過,防止死循環}
m, n, i, t1, t2, ans,k: integer;
Function dfs(p: integer): boolean;
var
i, t: integer;
begin
for i:=1 to k do
if map[p, i] and not chk[ i ] then
begin
chk[ i ] := true;
if (match[ i ] = 0) or dfs(match[ i ]) then {沒有被連過 或 尋找到增廣路}
begin
match[ i ] := p;
exit(true);
end;{if}
end;{for}
exit(false);
end;{function}
begin{main}
readln(n, m); {N 為二分圖左側點數 M為可連接的邊總數}
fillchar(map, sizeof(map), 0);
k:=0;
for i:=1 to m do{initalize}
begin
readln(t1, t2);
map[t1, t2] := true;
if k<t2 then k:=t2;
end;{for}
fillchar(match, sizeof(match), 0);
ans := 0;
for i:=1 to n do
begin
fillchar(chk, sizeof(chk), 0);
if dfs(i) then inc(ans);
end;
writeln(ans);
for i:=1 to 1000 do
if match[ i ] <> 0 then
writeln(match[ i ], '-->', i);
end.

Ⅷ 匈牙利演算法是機器學習嗎

我們根據機器學習的定義(即讓計算機不依賴確定的編碼指令來自主的學習工作)可知,匈牙利演算法的整個求解過程是確定性的,即一張圖下進行求解,運行n次,演算法流程以及結果都不具備不確定性。因此,匈牙利演算法並非機器學習演算法。

Ⅸ 匈牙利演算法是什麼可以解決那些問題

是所謂的匈牙利法嗎,如果是,那麼就是整數規劃中0-1規劃的分配問題的求解方法,比方四個任務分配給4個人,每人一種,可以得到最大效益

熱點內容
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:742
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:171
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554