素數伴侶 匈牙利演算法

2021-08-04 00:27:56 字數 2492 閱讀 1289

對於0和1來說,它們既不是素數也不是合數。

任何乙個大於1的正整數n,可以且唯一表示成有限個素數的乘積。

素數:在乙個大於1的自然數中,除了1和此整數自身以外,不能被其他自然數整除的數。

比1大,但不是素數則稱之為合數。

匈牙利演算法:

增廣路徑的理解:

理解一:在二分圖的匹配中,如果一條路徑的首尾是非匹配點,路徑中除此之外(如果有)其他的點均是匹配點,那麼這條路徑就是一條

增廣路徑(agumenting path)

。理解二:

交替路:從乙個未匹配點出發,依次經過非匹配邊、匹配邊、非匹配邊…形成的路徑叫交替路。

增廣路:從乙個未匹配點出發,走交替路,如果途徑另乙個未匹配點(出發的點不算),則這條交替路稱為增廣路(agumenting path)。

增廣路徑的首尾是非匹配點。因此,增廣路徑的第一條和最後一條邊,必然是非匹配邊;同時它的第二條邊(如果有)和倒數第二條邊(如果有),必然是匹配邊;以及第三條邊(如果有)和倒數第三條邊(如果有),一定是非匹配邊。

亦即,增廣路徑從非匹配邊開始,匹配邊和非匹配邊依次交替,最後由非匹配邊結束。這樣一來,增廣路徑中非匹配邊的數目會比匹配邊大 1。

1.定義:若無向圖g=的結點集v能夠被劃分為兩個子集v1,v2,滿足v1∩v2=

ø,並且v1uv2=v,使得g中任意一條邊的兩個端點,乙個屬於v1,另乙個屬於v2,則稱g為

二分圖(bigraph)

。二分圖通常記為g=.

由定義可知,二分圖沒有自迴路;零圖,平凡圖可以看成是特殊的二分圖。

2.定義:在二分圖g=中,若v1中的每個結點與v2中的每個結點都有且僅有一條邊相關聯,則稱二分圖g為

完全二分圖

,記為ki,j,其中i=|v1|,j=|v2|.

3.判斷是否為二分圖的方法:

①定義法,②

定理:無向圖g=為二分圖的充要條件是g的所有迴路的長度均為偶數。

4.在二分圖

g=中,v1=,若存在e的子集e'=,則稱g的子圖g'=為從v1到v2的乙個

完全匹配

(complete matching)

。(需要注意的是,這裡對於v2來說並不一定格式乙個完全匹配,因為v2中可能不只q個節點!!!)

5.二分圖存在完全匹配的判斷:

①充要條件-------

霍爾定理(hall定理)

:二分圖

g=中存在從v1到v2的匹配的充要條件是v1中任意k個結點至少與v2中的k個結點相鄰,k=1,2,3,........|v1|. 通常稱為

相異性條件(diversity condition)

②充分不必要條件---------

定理(t條件):二分圖

g=如果滿足:

(1)v1中每個結點至少關聯t條邊;

(2)v2中每個結點之多關聯t條邊。

其中t為正整數,則g存在從v1到v2的匹配。

判斷t條件非常簡單,只需計算v1中結點的最小度,v2中結點的最大度即可。

③必要條件---------|v1|<=|v2|

無向圖g為二分圖的

充分必要條件

是,g至少有兩個頂點,且其所有迴路的長度均為偶數。

二部圖中兩個集合中的節點數量可以不相同!!!

飽和點和匹配:

給定給乙個二分圖g,m為g邊集的乙個子集,如果m滿足當中的任意兩條邊都不依附於同乙個頂點,則稱m為乙個匹配。

極大匹配是指在當前已完成的匹配下,無法再通過增加未完成匹配的邊的方式來增加匹配的邊數。

最大匹配是所有極大匹配中邊數最大的乙個匹配。

如果乙個匹配中,圖中的每個頂點都和圖中某條邊相關聯,則稱此匹配為完全匹配,也稱作完備匹配。

若圖中頂點vi與m中的邊相關聯,則稱vi是m飽和點,否則稱為非飽和點。

hall定理:這篇文章對hall定理以及證明有很詳細的講解!!!

匈牙利演算法可以用深度遍歷以及廣度遍歷來實現:

這是大神寫的,裡面對匈牙利演算法用畫圖的方式進行了生動的解析,非常好,可以關注一下!!參考這個部落格以及word裡面的

程式可以很好的理解匈牙利演算法!!!

#include

#include

#include

#include

using namespace std;

bool isprime(int x)

int* number=new int[n];

for(int i=0;i>number[i];

}//先建立鄰接表,相加為素數則鄰接表中的值為1

int** adj=new int*[n];

for(int r=0;rodd;//奇數

vectoreven;//偶數

for(int k=0;k上面的程式實現用到了乙個重要性質就是:素數,除了2是偶數,其他是奇數。並且,2個數的和是奇數的情況只有奇數+偶數。

飽和      

28 素數伴侶(匈牙利演算法)

題目描述 題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有4個正整數 2,5,6,13,如果將5和6分為一組中只能得到一組 素...

華為oj之素數伴侶 匈牙利演算法

題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有4個正整數 2,5,6,13,如果將5和6分為一組中只能得到一組 素數伴侶 而...

華為OJ之素數伴侶 匈牙利演算法

題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有4個正整數 2,5,6,13,如果將5和6分為一組中只能得到一組 素數伴侶 而...