1. 程式人生 > >無向哈密頓圖迴路Dirac 定理證明和競賽圖為哈密頓通路的證明過程

無向哈密頓圖迴路Dirac 定理證明和競賽圖為哈密頓通路的證明過程

Dirac 定理: 設一個無向圖中有 N 個節點,若所有節點的度數都大於等於 N/2,則漢密爾頓迴路一定存在。注意,“N/2” 中的除法不是整除,而是實數除法。如果 N 是偶數,當然沒有歧義;如果 N 是奇數,則該條件中的 “N/2” 等價於 “⌈N/2⌉”。

而我想從自己的理解用反證法來證明一下:

我們先假設N為偶數,如果偶數成立,那當為奇數的時候很明顯(邊 / 點)的值更大出現迴路的可能性更大(這只是我的一種理解方式,其實也可以按照偶數的方式證明的)

一:首先可以證明圖一定是連通的:

前提:設 d(v) 表示節點 v 的度數。對於任意兩個節點 u、 v,若它們不相鄰,則可能和它們相鄰的節點共有 N - 2 個,而 d(u) + d(v) ≥ N/2 + N/2 ≥ N。

1:假設u和v不連通

2:則儘量使得u和v的度數連向不同的點(即儘量別出現某點同時和u,v點同時相連),那麼將有(N - 2)/ 2的點和u連,(N - 2)/ 2的點和v連;

而d(u) = N / 2   = (N - 2) / 2 + 1;所以u至少還得連線一個已經被v連線的點,

3:存在一個點同時和u,v連線,那麼u,v可達;

所以這樣u和v就能通過這個點連通了。(同理:v會和已經被u連線好的點連線)

二:現在證明存在一個連線所有N個點的迴路:

步驟1.先證明存在k(k <= N)個點的的哈密頓迴路。

(1)任意找兩個相鄰的節點 S 和 T,在它們基礎上擴展出一條儘量長的沒有重複節點的路徑。也就是說,如果 S 與節點 v 相鄰,而且 v 不在路徑 S → T 上,則可以把該路徑變成 v → S → T,然後 v 成為新的 S。從 S 和 T 分別向兩頭擴充套件,直到無法擴為止,即所有與 S 或 T 相鄰的節點都在路徑 S → T 上。此時這條路徑的點數為k 個。

(2)而 d(S) + d(T) ≥ N/2 + N/2 ≥ N >= k;只要證明S到T的路徑上存在點vi和T相連,vj和S相連(i < j)那麼i到j路徑任意相連兩點都能作為迴路的始末點。

證明如下:

【1】假設與S相連的都在編號為2到k/2,T相連的是k/2到k - 1,這樣就能保證不會存在點(i < j)vi和T相連,vj和S相連

【2】但是這樣和S的度數最多為:k/2 - 1 <= N / 2 - 1,則d(S) <= N / 2 - 1和d(S) >= N / 2矛盾。

【3】所以必須和S相連的會有一個點大於k/2,證明完畢。

if(k = N)證明完畢;

else 跳到步驟2;

步驟2:

(1)由步驟1得到k個點的哈密頓迴路。

(2)當存在第k+1點即不和S相連,又不和T相連,則必定和S到T間的點Vi相連,否則不連通,這樣就可以斷開k個點的迴路Vi附近的邊,形成新的S->T的路徑,之後可以回到步驟1,直到k = N。

競賽圖每對頂點之間都有一條邊相連的有向圖稱為競賽圖

證明:n(n>=2)階競賽圖一定存在哈密頓通路

歸納法:假設當1到k個點已經為哈密頓通路1-> 2 -> ....->k,再把Vk+1歸併進去:

1:當假k個點中有相鄰的兩個點Vi->Vi + 1,出現Vi -> Vk+1,Vk+1 -> Vi+1,則Vk+1直接插入Vi->Vi+1

2:當假k個點中有相鄰的兩個點Vi->Vi + 1,出現Vi -> Vk+1,Vi+1 ->Vk+1,當往右追溯到k的話如果一直都是指向Vk+1的話,那必然出現Vk->Vk+1

否則會出現1的情況。

3:當假k個點中有相鄰的兩個點Vi->Vi + 1,出現 Vk+1  -> Vi,那就往左追溯到1,如果一直Vk+1指向vj(1 <= j <= i)的話,那必然會出現Vk+1 -> V1

否則會出現1的情況。