離散結構:圖論與樹

離散結構:圖論與樹

 

一、圖論的定義

  • 圖論的創立

柯尼斯堡七橋問題的解決是圖論創立的標誌
〉 1736年歐拉在發表的論文中證明七橋無法僅走一遍能遍歷七座橋,並提出和解決了“一筆畫”問題。
〉 歐拉將現實問題抽象爲平面上的點和線的組合,並通過討論點的奇偶性來判定能否遍歷  

〉 於是歐拉便創建了兩個新的學科:圖論 和 拓撲學
                   

  • 圖(Graph)的定義

〉 由結點和聯結結點的所構成的離散結構
〉 記做 G = <V, E>
〉 結點 vertex 集V:非空集合
〉 邊 edge集 E多重集合(集合中可能存在相同元素,元素附帶一個重數的屬性)
〉 邊集是多重集合表示圖可以有多個相同的邊。

注:所謂的多重集合就是指同一個集合中允許出現多個相同的元素。因爲在一個集合中,相同的元素只能出現一次,因此只能顯示出有或無的屬性。而無法包含某一個元素出現的次數這個屬性。但多重集便可以顯示出這個屬性。比如在 C++ 語言中也會有數據結構 multiset 便允許出現相同的關鍵字。

  • 邊(有向邊/無向邊)和結點的關係

有向邊 (directed edge) 用結點的二元有序組表示
〉 第一分量稱作起點,第二分量稱作終點

無向邊(indirected edge) 用結點的兩元素多重集表示
〉 無向邊可以是多重集意味着允許無向環(loop)
〉 無向邊的端點稱作鄰接 (adjacent) 結點。例子如下所示:         
                                    

二、基本概念

圖的基本概念
〉 對於圖 G= <V,E>
有限圖:V, E都是有限集,否則稱爲無限圖
重邊 multiple edge:E 中重數大於1的邊稱爲重邊平行邊
重圖 multigraph:邊集E中至少有一個元素重數大於1
單圖:每條邊的重數都等於1

簡單圖 simple graph:無環和重邊的無向圖
完全圖 complete graph:任何兩個不同結點間都有邊關聯的簡單圖,記做 Kn。例子如下所示:
孤立結點 isolated vertex:不是任何邊的端點的結點
零圖:僅有孤立結點構成的圖(E=\varnothing
〉 假設 G=(V, E, \gamma) 爲無向圖, G 中度數爲零的頂點稱爲孤立頂點(isolated vertex) ;圖中度數爲1的頂點稱爲懸掛點(pendant vertex) , 與懸掛點相關聯的邊稱爲懸掛邊(pendant edge) ;圖中度數爲 k 的頂點稱爲k度點;圖中度數爲奇數的頂點稱爲奇度點, 圖中度數爲偶數的頂點稱爲偶度點


                                 

  • 賦權圖

上述通過頂點集邊集構成的二元組 G= <V,E>,被稱爲普通圖。但通常我們研究現實世界中的問題的時候,會需要給邊或者頂點賦予一定的屬性。所以就需要從普通圖進行擴展成賦權圖。如下:

〉 賦權圖G = <V,E,f,g>
結點權函數:f: V→ W
邊權函數:g: E→ W
〉 W 可以是任何集合,常爲實數的子集

普通圖研究結點和邊之間的拓撲關係。其拓撲關係如下幾種:

  • 節點與節點之間是否鄰接
  • 一個節點到另一個節點之間是否存在路徑連通
  • 兩個節點之間有多少通路
  • 按照連通性可以將圖劃分爲幾大塊等等拓撲關係

賦權圖給普通圖附加了數量關係,有了數量關係之後,便可以研究節點與節點之間的距離,通行成本,分配資源的代價,整個圖的規模等性質。賦權圖也是 GIS(空間信息系統) 應用研究的基礎。下面是一個關於賦權圖普通圖的例子:
                                                  

如上圖所示,如果邊上沒有賦予權值,則是普通圖。對於普通圖我們默認每條邊的權值相同。故可以研究比如 A 到 B 之間是否存在着通路且如果存在則找出其最短路徑(根據包含邊數最少確定)上圖中是僅包含三條邊的通路爲最短路徑。但是當我們賦予權值構成賦權圖之後,所謂的最短路徑會發生變化,這是我們稱爲最優路徑。如圖中藍色邊所示的路徑。

  • 結點的度 (degree)

〉 端點 v 的度 d(v) 定義爲關聯端點 v 的邊的數目
有向圖中,度分爲出度 (out-degree) 和入度 (in-degree)
〉 出度d+(v)是端點v作爲有向邊起點的數目
〉 入度d-(v)是端點v作爲有向邊終點的數目
有向圖中度 d(v)=d+(v)+d-(v)
 

  • 度的性質

〉 所有端點度的總和爲偶數,而且是邊數目的兩倍。(圖論基本定理/握手定理
     因爲每一條邊都有兩個節點。分別對應入度或出度。故必然是 2 的倍數。
有向圖中出度的總和等於入度的總和。
奇數度結點必爲偶數個反證法可證)。握手定理推論
     因爲要求最終度數綜合爲偶數。反證:若爲奇數個,則奇數度節點度數奇數 + 偶數度節點偶數爲奇數,矛盾。
〉 自然數序列(a1,a2,…an)是某個圖的度序列當且僅當序列中所有數的總和爲偶數。
     
即說明只要給出一個自然數且總和爲偶數的序列就可以給出一個圖與之對應。
〉 一度的頂點稱爲懸掛點。(pendant node)

  • 正則圖(regular graph)

所有頂點度均相同的圖稱爲正則圖,按照頂點的度數k稱作 k-正則圖。
其中對於完全圖來說必定爲正則圖。且 Kn是n-1正則圖

       

  • 圈 圖 (cyclegraph)

假 設頂點集 V = { 1, 2, …, n } (n  \geqslant 3 ),E={ {u, v} | 1 \leqslant u, v \leqslant n, u - v  \equiv  1(mod n) },則 稱 簡 單 圖 G=(V, E) 爲 圈 圖 (cyclegraph) , 記作 C_n

                                                                         

  • n-立方體圖(n-cube)

如果圖的頂點集 V 是由集合 {0, 1} 上的所有長爲 n 的二進制串組成, 兩個頂點鄰接當且僅當它們的標號序列僅在一位上數字不同。 所形成的簡單圖稱作n-立方體圖(n-cube) , 記作 Qn 或者 Bn ; n>3 時, 又稱爲 n維超立方體(hypercube) 圖

                                                    

  • 子圖與同構圖(圖之間的關係)

子圖(subgraph)
〉 G1=<V1,E1>, G2=<V2,E2>
〉 V1 \subseteq V2, E1 \subseteq E2,稱G1是G2的子圖
〉 如果G1≠G2,則G1是G2的真子圖
生成子圖 spanning subgraph:如果G1是G2的子圖,且V1=V2。頂點一樣,通過給子圖 G1 添加若干條邊便可以構造出 G2。

                                              

紅色和綠色的圖都是藍色圖的生成子圖

  • 補圖

〉 G1,G2 互爲補圖
V1=V2, E1∩E2=\varnothing,  <V1, E1∪E2> 完全圖。補圖如下所示:紅色與綠色的就互爲補圖。
                                             

  • 圖的同構 isomorphic

〉 G1=<V1,E1>, G2=<V2,E2>
〉 |V1|=|V2|, |E1|=|E2|
〉 如果可以將V1中所有的結點一一對應地置換爲V2中的結點名後得到的圖等於G2。
     如下將五角星任意相臨兩個節點翻折過去即可得左邊圖形。
                                             

形式化定義
設 G1=(V1, E1, \gamma_1) 和 G2=(V2, E2, \gamma_2 ) 是兩個無向圖, 如果
存在 V_1 到 V_2 的雙射 f存在 E_1E_2雙射 g。滿足對於任意的 e \in E_1, 若 \gamma_1 (e)={u, v} 則
\gamma_2 (g(e))={ f(u), f(v) },則 稱 G1 和 G2 是 同 構 的(isomorphic) , 並記之爲G1 ≌ G2。即頂點一一對應,邊一一對應,頂點與邊之間的關係也一一對應。

                     

圖之間的同構關係是一等價關係。

:畫出所有不同構的具有4個頂點、 3條邊的簡單圖


                                               

不同構的圖:化學中的同分異構體
〉 分子式相同而結構和性質不同的化合物之間互稱同分異構體。
〉 分子式相同意味着V1=V2, |E1|=|E2|
                                              

  • 路徑與連通性(普通圖較重要的拓撲性質)

擬路徑 (pseudo path)
〉 頂點 v1到 vl的擬路徑v1,e1,v2,e2,v3,…,vl-1,el-1,vl,其中ei=<vi,vi+1>(或者{vi,vi+1})
〉 擬路徑中的邊數目稱作擬路徑的長度。
〉 擬路徑例子:如下簡單圖,邊上數字用來指代邊,不是權重。下面兩個序列就是兩個擬路徑。

                                                            
〉 a,1,e,7,b,3,c,3,b,2,a
〉 c,4,e,4,c,3,b,7,e,4,c

注意到上述的擬路徑中出現了節點的重複還有邊的重複

路徑(walk)與通路(path) 下面序列皆基於上面的普通圖

〉 如果擬路徑中的邊各不相同,稱作路徑。  a,1,e,7,b,3,c,4,e,6,d
〉 如果路徑中的頂點各不相同,稱作通路。  a,1,e,7,b,3,c,5,d
〉 v1=vl的路徑稱爲閉路徑。                          a,2,b,7,e,4,c,5,d,6,e,1,a
〉 v1=vl的通路稱作迴路。                              a,1,e,6,d,5,c,3,b,2,a

路徑與通路性質
路徑和通路定理:在有n個頂點的圖G中,如果有頂點u到v的擬路徑,那麼u到v必有路徑,並且必有長度不大於n-1通路。
(對後半定理的理解可以考慮擬路徑中重複頂點的壓縮

閉路徑和迴路定理:在有n個頂點的圖G中,如果有頂點v到v的閉路徑,那麼必定有一條從v到v的長度不大於n的迴路
 

圖的連通性:通過路徑來定義連通性
〉 u 可達 v (accessible):u=v,或者存在一條 u 到 v 的路徑
連通無向圖 connected:即無向圖中任意兩個頂點都是可達的。
      針對無向圖來說連通性是蠻簡單的,但有向圖就有三種連通定義了,如下
強連通有向圖:即有向圖中任意兩個頂點都是互相可達的。但並不是說節點之間必須要求其是雙向的,當然每個節點之間都       是雙向的,當然滿足條件。如下所示:左邊是聯通的無向圖,右邊是強連通的有向圖。
                                                       

單向連通有向圖:任意兩個頂點,至少從一個頂點到另一個是可達的
弱連通有向圖:將有向圖看作無向圖時是連通的。這兩種情況如下圖所示。
                                                       

有向無環圖:假設 G 是有向圖, 如果圖中不存在有向迴路, 則稱 G 爲有向 (Directed Acyclic Graph)無環圖, 簡記作 DAG
 

連通分支(connected component)
〉 圖G的連通子圖 G',而且G'不是任何其它連通子圖的真子圖(即滿足最大性
 如果下列的某一個分支中,如三角形三個頂點去掉一個頂點,也仍然是G的連通子圖,但救不構成連通分支了。不滿足最大性。
                                                        

橋(bridge):假設 G=(V, E, \gamma ) 是連通圖, 若 e \in E,且 G - e 不連通, 則稱 e 是圖 G 中一條割邊(bridge)。

三、歐拉圖與哈密頓圖

這兩種圖都是由路徑迴路所定義的圖。

歐拉圖及歐拉路徑
歐拉圖 Euler graph:如果圖 G 上有一條經過所有頂點所有邊閉路徑(邊不重複,允許頂點重複)
歐拉路徑 Euler walk:如果圖G上有一條經過所有頂點所有邊路徑(邊不重複,允許頂點重複)

歐拉圖已經被很好的解決了,其充要條件如下所示,若滿足下列條件,則一定存在着歐拉圖或路徑 :

歐拉圖:充要條件
〉 無向圖:G連通,所有頂點的度都是偶數
〉 有向圖:G 弱連通,每個頂點的出度與入度相等

歐拉路徑:充要條件
〉 無向圖:G連通,恰有兩個頂點的度是奇數。
    (由握手定理知道不可能有奇數個節點度爲奇數,若沒有,則歸結到無向圖的歐拉圖
    (證明充分性:從條件推存在時。可通過添加一條虛擬邊,證明存在歐拉回路,然後刪除虛擬邊,就得到了歐拉路徑)
〉 有向圖:G連通,恰有兩個頂點出度與入度不相等,其中一個出度比入度多1,另一個入度比出度多1。
有了上面的判定條件,我們就可以試着應用到如下的例子中了。七橋問題不滿足,奧運五環和三角形加高的圖形都滿足一筆畫。

 

上面我們給出的充要條件都是存在/判定性定理,即若果滿足充要條件,則一定存在。但不是構造性定理,即通過構造找到迴路或路徑。如上圖二中最右邊的那個圖形,你可能要嘗試好幾次才能找到道路。而我們下面要討論的弗勒裏算法便是構造算法,目的是通過確定的算法找到無向圖中的迴路或道路。

弗勒裏(Fleury) 於 1883 年提出, 在存在歐拉道路/迴路無向圖中構造該道路/迴路的算法。算法流程圖如下所示:

                                         
 

哈密頓圖及哈密頓通路
哈密頓圖 Hamilton graph:如果圖G上有一條經過所有頂點一次且僅一次迴路不要求經過所有邊,也稱作哈密頓迴路)
哈密頓通路Hamilton path:如果圖G上有一條經過所有頂點一次且僅一次通路(非迴路)
對於該模型的抽象研究,我們需要將立體圖經過球極投影到平面,形成平面圖研究。

                                                              

哈密爾頓圖或道路中存在如下規律

  • 哈密爾頓圖中一定不存在懸掛邊。否則無法回到起點構成迴路。
  • 存在哈密爾頓道路的圖中不存在孤立頂點。無法達到孤立頂點。
  • 對於完全圖來說,當 n > 2 時, Kn 是哈密爾頓圖。它的任意一個頂點的排列(循環排列)都是一個哈密爾頓圖。
  • 事實上,只要圖 G 中有“足夠多” 的邊, 那麼它就會是哈密爾頓圖。關於足夠多的討論可參見如下判定定理。

判定定理(充分非必要)
〉若具有 n 個頂點的圖G的每一對頂點 u 和 v 的度數之和都不小於 n-1 (即 deg(u)+deg(v) \geqslant n-1),那麼G中有一條哈密頓通路
    證明略(看參見這裏) 
〉 如果G的每一對頂點度數之和不小於 n,且 n >= 3,則 G 爲一 哈密頓圖

滿足上述判定條件的可以找到通路或判斷。但不滿足上述條件也有構成通路的。

由上面的判定定理可以推出如下關於哈密爾頓圖的推論 (證明略):

推論1:(Dirac, 1952 ) 設 G 是 n(n \geqslant 3) 階簡單圖, 如果 G 中任一頂點的次數都至少是 n/2, 則 G 是哈密爾頓圖

推論2:  設 G 是 一 (n, m) 簡 單 圖 , 若m \geqslant (n^2-3n+6)/2, 則 G 是哈密爾頓圖

關於哈密爾頓圖充要條件

首先引入一個定義

定義:設無向簡單圖G,若存在一對不相鄰頂點u,v,使得deg(u)+deg(v)≥n,則構造G’ = <V,E U {u,v}>;再在G’上重複上述過程直至不再存在度數之和大於或等於n的不相鄰的頂點對爲止,稱這樣所得到的圖稱爲圖G的閉包,記爲C(G).

如圖所示,右邊C(G)是左邊G的閉包.

                                              

定理1:設無向簡單圖G,且對G中任意一對不相鄰的頂點(u,v),有deg(u)+deg(v)≥n,則G是哈密爾頓圖的充分必要條件是G’ = <V,E U {u,v}>是哈密爾頓圖

定理2:設無向簡單圖G,則G是哈密爾頓圖的充分必要條件是C(G)是哈密爾頓    該定理可由定理1直接得到


哈密頓通路問題在上個世紀七十年代被證明是“NP完全的”(算法時間隨頂點個數呈指數增長)
〉 實際上對於某些頂點數不到 100 的網絡,利用現有最好的算法和計算機也需要比較荒唐的時間(比如幾百年)才能確定其是否存在一條這樣的路徑。

應用實例

實例一:假設在n(n≥4)個人中,任意兩個人合在一起都能認識其餘的n-2個人。證明他們可以圍成一圈,使相鄰者相互認識。

證:以每個人爲頂點,相識者之間加邊,便構成一個圖G,問題轉化爲證明圖G是哈密爾頓圖。

分類討論,對任意兩個頂點u,v,若u,v認識,deg(u)+deg(v)≥n-2+1+1=n;若u,v不認識,考慮與u相識的w,w與v必定相識,否則的話,與u,v在一起能認識n-2個人矛盾,所有可以得出結論,u,v認識的人相同(n-2個),deg(u)+deg(v)=n-2+n-2≥n,由前面定理2知,圖G爲哈密爾頓圖。

實例二:地圖不存在相交的邊界。如果一個地圖存在哈密爾頓迴路,則可以用四種不同的顏色對它的域進行染色,使相鄰的域染不同的顏色。

證:設H是圖G中一條哈密爾頓迴路,則H將G的域劃分成內域和外域兩部分,內域和外域均用兩種顏色染色,則四種顏色即可。

如果內域和外域不能用兩種顏色着色,則必然出現三個或三個以上的域相鄰的情況,這是,內域(外域)中定有一個域的交點,它沒有被H穿過,與H是哈密爾頓迴路矛盾.

實例三: 有七名科學家參加一個會議, 已知A只會講英語, B會講英語和中文, C可以講英語、 意大利語和俄語, D會日語和中文, E會德語和意大利語, F會講法語、日語和俄語, G可以講德語和法語。 可否安排他們在一個圓桌圍坐, 使得相鄰的科學家都可以使用相同的語言交流。通過建立圖模型,將科學家抽象成節點,會的共同語言爲邊。在圓桌的一個順序就可以歸結爲一個哈密爾頓迴路。找出來了這樣的迴路,就知道了其圓桌順序,如下右圖中的黃色連線的迴路。

                                                   

 

  • 圖的矩陣表示

鄰接矩陣 (adjacency matrix)
〉 無重邊的有向圖 G=<V,E>,其鄰接矩陣 A[G] 定義爲:
〉 aij=1, 當<vi,vj>∈E
〉 aij=0, 當<vi,vj> \notin E
〉 是一個 |V|×|V| 矩陣,表示頂點鄰接關係。其例子如下:
                                                   

〉 回顧關係圖關係矩陣的表示,在前面我們用關係圖來表示關係,如二元關係(特別的是前域和陪域是一樣的二元關係),然後關係也有相應的關係矩陣。實際上關係圖就是無重邊有向圖 對應的鄰接矩陣。

〉 對角線元素爲1,表示環的存在(自反關係
〉 矩陣對稱,表示雙向邊(對稱關係)例子如下所示:

                                               

鄰接矩陣的運算

〉頂點的
出度:對應的和                      〉入度:對應的和

〉關於擬路徑
〉鄰接矩陣自乘 L 次:A^L
〉則乘積結果矩陣中每個分量 a_{ij}^{(L)}的含義爲 G 中頂點 v_i 到 v_j 的長度爲L的擬路徑條數
 

關聯矩陣簡單無向圖
〉 鄰接矩陣表示了頂點之間的鄰接關係,而關聯矩陣表示頂點和邊的關聯關係,n*m 矩陣,n 個頂點,m 條邊。
〉 通過矩陣的來判定圖的連通分支個數。其實矩陣的秩表示的便是最大線性無關組,它和對應的圖的連通分支是對應的。

                                                 

路徑矩陣 walk matrix
〉 圖 G=<V,E> 的鄰接矩陣 A
A^{(m)} = A ∧ A ∧ … ∧ A,換成合取,邏輯乘。
路徑矩陣 B=A ∨ A(2) ∨ A(3) ∨ … ∨A^{( |V|)}
〉 B 的每個分量 b_{ij} 表示 v_iv_j是否有路徑

可達性矩陣
〉 P=I ∨ B,I 是 n*n 的單位矩陣
〉 加上頂點的自身可達性
 

四、二分圖

二分圖 (bipartite graph)
〉 滿足如下條件的無向圖 G=<V,E>
〉 有非空集合X, Y: X∪Y=V, X∩Y= \varnothing,且
〉 每個 { v_i , v_j } ∈ E,都有: v_i∈X ∧ v_j∈Y,或者,v_i∈Y∧ v_j∈X。
     即對於任意一條邊 { v_i , v_j } ,必有一個頂點屬於X,另一個頂點屬於 Y
〉 可以用 G=<X,E,Y> 表示二分圖。便是兩個集合X,Y 之間只有 E 連接。
〉 如果 X,Y 中任意兩個頂點之間都有邊,則稱爲完全二分圖 complete bipartite graph
〉 完全二分圖可以記作 K_{|X|,|Y|}

其中一些例子如下:第一個是二分圖,藍色一類黑色一類。第二個是完全二分圖。紅色的不是二分圖

                                                          

二分圖的等價條件

〉 G 至少要有兩個頂點,而且G中所有迴路長度都是偶數。

〉 證明:必要性易得,如果一個圖是二分圖,假設只要兩個頂點,則一去一回的長度就是偶數了。而不管有多少迴路。

充分性可以通過構造 X,Y 兩個集合證明
任意取頂點 v,取V1={vi | vi與v的距離爲偶數},V2 = V - V1。即構造了一個關於 V 的劃分。
〉 證明 V1,V2 內部頂點間沒有邊。(反證法
〉 如果有邊 {vi,vj}∈E,vi,vj∈V1                                                   
〉 那麼v到vi,vj距離是偶數,v→vi→vj→v 這個迴路的長度是奇數(兩個偶數再加一),和條件矛盾,V2 同理
〉 所以 G 是個二分圖 <V1,E,V2>             

 

二分圖應用:分組交談
〉 出席國際會議的成員 a,b,c,d,e,f

a:漢語,法語,日語
b:德語,日語,俄語
c:英語,法語
d:漢語,西班牙語
e:英語,德語
f:俄語,西班牙語

〉 如果分爲兩組,是否可能組內成員不能直接交談 ?即構成一個二分圖呢 ?
於是我們就可以用二分圖的等價條件進行判斷了。〉 迴路長度皆爲偶數,是二分圖。如上黑色與藍色

 

二分圖的匹配

匹配 (matching)
資源匹配,工作安排
〉 將需要配對的兩種對象分別作爲 X,Y
〉 求配對關係或者頂點和邊賦權,求某種條件下的最優分配問題
〉 可以用二分圖來表示解決匹配問題

〉 將 E 的子集 M 稱作一個匹配,如果 M 中的任意兩條邊都沒有公共端點。(可以從資源不能共用理解)
邊數最多的匹配稱作最大匹配。 maximal matching
〉 如果 X(Y) 中的所有的頂點都出現在匹配 M 中 , 則 稱 M 是 X(Y)- 完 全 匹 配 ( perfect matching )
〉 如果 M 既是 X-完全匹配,又是 Y-完全匹配,稱M是完全匹配
 

匹配的應用
最大匹配和完全匹配尋找和判定,有廣泛的應用背景。
工作安排問題:教師和課程的一一安排
〉 二分圖:G=<U,E,V>,其中U是教師集合,V是課程集合
〉 E中的邊<u,v> 表示某位教師u可以上課程v
〉 需要求最大匹配,使得每門課程有人教,每人都有課上
 

經典的最大匹配算法:匈牙利算法

任意取一個匹配 M(可以是空集或只有一條邊)                  ② 令S是非飽和點(尚未匹配的點)的集合
③ 如果S = \varnothing ,則 M 已經是最大匹配。
④ 從S中取出一個非飽和點 u0 作爲起點,從此起點走交錯路(交替屬於M和非M的邊構成的極大無重複點通路或迴路)P
⑤ 如果P是一個增廣路(P的終點也是非飽和點),則令M=M⊕P=(M-P)∪(P-M)。(即異或操作,去掉相同的,留下相異的。)
⑥ 如果P都不是增廣路,則從S中去掉 u0,轉到 step3

下面就從最大匹配的教師課程問題,來應用一下匈牙利算法:

                         ==》   

〉 M1={(u2,v6) (u3,v1)},  S1={u1,u4,u5,u6},  選擇 u1
增廣路 P1={(u1,v1) (v1,u3) (u3,v3)}
〉 M2=M1⊕P1={(u1,v1) (u2,v6) (u3,v3)}, S2={u4,u5,u6}, 選擇 u4
〉 增廣路P2={(u4,v2)}
〉 M3=M2⊕P2={(u1,v1) (u2,v6) (u3,v3) (u4,v2)}, S3={u5,u6}, 選擇u5
〉 增廣路P3={(u5,v3) (v3,u3) (u3,v1) (v1,u1) (u1,v4)}
〉 M4=M3⊕P3={(u1,v4) (u2,v6) (u3,v1) (u4,v2) (u5,v3)}, S4={u6}, 選u6
〉 增廣路P4={(u6,v1) (v1,u3) (u3,v3) (v3,u5) (u5,v5)}
〉 最後M={(u1,v4) (u2,v6) (u3,v3) (u4,v2) (u5,v5) (u6,v1)}  是最大匹配,也是完全匹配。
〉 |X| ≠ |Y| 的二分圖一定沒有完全匹配
正則 的|X|=|Y|的二分圖一定有完全匹配

 

五、平面圖

從前面我們發現圖的畫法可以有很多種。那麼我們想問問題:一個圖是否可以畫成任意兩條邊都不相交的樣子 ?這就是平面圖
實際應用:印刷電路板、礦山裏礦洞到倉庫部署軌道等等

                                            

  • 平面圖(planar graph)的定義

〉 如果無向圖 G 可以在一個平面上圖示出來,並且各邊僅在頂點處相交,稱作平面圖,否則是非平面圖
〉 K5 和 K3,3 都不是平面圖,它們都是正則圖。
〉 但是它們經過任意去掉一條邊,便都成爲平面圖。
〉 K5 是頂點數最少的非平面圖,K3,3 是邊數最少的非平面圖。這兩個例子都是比較典型的,後面會在歐拉公式部分介紹。
                                                

  • 平面圖等價條件(平面圖的判定定理庫拉托夫斯基定理)

定理 (庫拉托夫斯基定理):一個無向圖是平面圖當且僅當不包含與 K5 或 K3, 3 的細分同構的子圖

〉 即就是說 G或者G的子圖作任何同胚操作後得到的圖均不能以K5及K3,3爲子圖 (1930,Kuratowski)
〉 針對圖來說,同胚操作就是在原圖的邊上增加或者刪除二度節點
〉 其中對於一條邊加增加或者刪除二度節點就成爲原來圖的一個細分。
                                                 

 

  • 歐拉公式

設圖 G 可以畫在平面上且滿足無邊相交, G 的邊將平面劃分爲若干個封閉區域, 則之爲 G 的face) , 包 圍 面 的 邊 稱 爲 該 面 的 邊 界(boundary), 面的邊界中的邊數稱爲面的次數(degree) (橋在計次數時算作兩條邊)。如下所示:
                                                   

                                             

  • 若一條邊不是橋, 它必是兩個面的公共邊界
  • 橋只能是一個面的邊界
  • 兩個以一條邊爲公共邊界的面稱爲相鄰的面

定理: 平面圖 G 的所有面的次數之和等於邊數的兩倍。
如下是一些平面圖對應的頂點數、邊數、面數的例子。

定理1(歐拉公式)
設 G 是一個面數爲 f (n, m)-連通平面圖, 則 n – m + f = 2

歸納證明
對圖的邊數 m 作歸納:
m=0 時, 由於 G 是連通圖, 因此 G 只包含一個孤立頂點, 具有一個外部面。 於是  n – m + f = 1 - 0 + 1 = 2

假設 m=k 時歐拉公式成立。 對於 m=k+1:

  •  <1> 圖中存在懸掛點, 則刪去與之相連的懸掛邊後, 邊數和點數都減少1而面數不變, 因此 n–m+f  的值不發生變化。

 

  • <2> 圖中不存在懸掛點, 則每個頂點的度數都大於1, 圖中存在迴路 C, C 上任一邊都一定是兩個面的公共邊界, 刪去此邊後這兩個面合併爲一個面, 因此頂點數不變、 邊數減少1、 面數也減少1, 於是 n–m+f 的值也不發生變化。

推論
設 G 是一個面數爲 f 的 (n, m)-平面圖,且有 l 個連通分支, 則 n – m + f = l + 1

定理 2
設 G 是一個面數爲 f 的 (n, m)-連通簡單平面圖, n \geqslant 3, 每個面的次數至少是 l,則 m \leqslant (n - 2) \times l / (l - 2)
證明:  l·f \leqslant 2m 。 代入歐拉公式後整理即得。

推論
設 G 是一個面數爲 f 的 (n, m)-連通簡單平面圖且 n \geqslant 3, 則 m \leqslant 3n - 6
證明: m \leqslant (n - 2)\times3/(3 - 2)

設 G 是一個面數爲 f 的 (n, m)-連通簡單平面圖, n \geqslant 3 且每個面的次數至少是 4,則 m \leqslant 2n - 4

推論

在任何簡單連通平面圖中, 至少存在一個度數不超過5的頂點

證明: 若全部頂點的度數均大於5, 則由握手定理有6n \leqslant 2m, 即3n \leqslant m。 再由推論1得到 3n \leqslant 3n - 6, 產生矛盾。

證明: K5K3,3 是非平面圖(反證法)。

K5是非平面圖
假 設 簡 單 圖 K5 是 平 面 圖 , 則 應 有10=m\leqslant3n - 6=3\times5 - 6=9, 產生矛盾 

K3, 3 是非平面圖                                                           
假設二部圖 K3, 3 是平面圖, 其中最短的迴路長度爲4, 因此每個面的次數至少是4, 應有 9=m\leqslant2n-4=2\times6-4=8, 產生矛盾

注意:定理2及其推論只是圖可平面性的必要條件,而非充分條件

例如, 圖中每個面的次數至少爲3, 點數 n=7,邊數 m=11, 11\leqslant3\times7-6=15, 滿足推論1條件

但是該圖只是在 K3, 3 基礎上增加一個度數爲2的點和兩條邊, 並不是平面圖

六、對偶圖

由前面的正多面體我們給出了關於它們的頂點、面、邊的數量,如下圖:

我們發現對應的對偶圖,頂點和麪交叉對應相等,邊數相同。

外面的正六面體和內接的正八面體對偶。在各個面中心選一點,然後連接個點,若兩個面有公共棱,則垂直於該棱連接兩個面心。

而對於平面圖來說,有如下定義

設 G 是一個平面圖, 滿足下列條件的圖 G* 稱爲 G 的對偶圖(dual graph) :在圖 G 中的每個面(包含外部面) 內畫一頂點
在這些新的頂點之間添加邊, 每條新的邊恰與 G 中的每一條邊相交一次。所得的新圖即爲 G 的對偶圖 G*
例如:

定理:平面圖 G 的對偶圖 G* 也是平面圖, 而且是連通的。
定理:假設 G* 是平面連通圖 G 的對偶圖, n, m, f, n*, m*, f *分別是 G 和 G*的頂點數、邊數和麪數, 則有:
(a) n = f *;     (b) m = m*;
(c) f = n*;       (d) 若面 f 對應於頂點 v*, 則 f 的次數等於v* 的度數。(
關於這條可從歐拉公式理解

七、頂點支配、獨立、覆蓋集

  • 支配集

概念:

  1. 支配集:設G=(V,E)是無向簡單圖,D⊆V,若任意v∈V-D,都存在u∈D,使得uv∈E,則稱D爲一個支配集。
  2. 極小支配集:若D是圖G的支配集,且D的任何真子集都不再是支配集,則稱D爲一個極小支配集。
  3. 最小支配集:如果圖G的支配集D滿足對於G的任何支配集D’,都有|D|≤|D’|,則稱D是G的一個最小支配集。
  4. 支配數:最小支配集D的元素數稱爲圖G的支配數,記作γ(G)。

 例如:

                                               

  • V1、V2、V3不是支配集——>都不與V5相鄰
  • V5、V6、V7構成支配集——>與剩餘點都相鄰,但不是極小支配集,因爲移去V5仍是支配集
  • V1、V3、V5是極小支配集但不是最小支配集——>由(2)知最小支配集可只包含兩個頂點
  • V6、V3既是極小支配集又是最小支配集
  • V6、V7也是最小支配集

性質:

  1. 對於V中任意一個頂點而言,它或者屬於支配集,或者與支配集中的一個元素相鄰
  2. 一個圖中極小支配集可能不唯一
  3. 一個圖中最小支配集可能不唯一
  4. 最小支配集一定是極小支配集,但極小支配集不一定是最小支配集
  5. 特殊圖中的支配集

(a) 在任意簡單圖G=(V,E),V都是支配集
(b) 完全圖Kn(n≥3)的支配數爲1
(c) 完全二分圖 Kn,m 的支配數爲min(n,m)

實例:

例如,在一個分佈式計算系統中,每個節點都有一臺計算服務器,有些節點放置數據存儲器,節點之間使用數據線連接。爲了提高訪問速度,要求每個節點都可以直接訪問數據存儲器,同時爲了節約成本要求數據存儲器儘可能少,該如何放置?
:選擇最小支配集放置數據儲存器。

 

  • 點獨立集

概念:

  1. 獨立集:設G=(V,E)是一個無向圖,S⊆V,若對任意地u,v∈S,都有u,v不相鄰,則S是G的點獨立集或簡稱獨立集。
  2. 極大獨立集:若對G的任意獨立集T,都有S⊄T,則稱S是G的一個極大獨立集
  3. 最大獨立集:稱基數最大的獨立集爲最大獨立集
  4. 獨立數:圖G中最大獨立數的基數稱爲獨立數,記作α(G)

                                              

  • V1、V2、V3不是獨立集——>V1、V2相鄰
  • V1、V3是獨立集但不是極大獨立集——>還可以向其中添加頂點V5
  • V4、V6是極大獨立集但不是最大獨立集——>由(2)知頂點數可爲3
  • V1、V3、V5既是極大獨立集也是最大獨立集

性質:

  1. 極大獨立集不是任何其它獨立集的子集
  2. 若S是G的極大獨立集,則對任意u∈V-S,都存在v∈S,使得u,vv相鄰
  3. 一個圖的極大獨立集可能不唯一
  4. 一個圖的最大獨立集可能不唯一
  5. 最大獨立集一定是極大獨立集,極大獨立集不一定是最大獨立集
  6. 特殊圖中的獨立集

(a)在任意圖中,空集都是獨立集
(b)完全圖Kn(n≥3)的獨立數爲1
(c)完全二分圖Kn,m 的獨立數爲max(n,m)

 

7、獨立數和支配數之間的關係

定理1:一個獨立集也是支配集當且僅當它是極大獨立集。
定理2:簡單無向圖的極大獨立集也是極小支配集

實例:

在某個通訊系統中,由於電磁干擾,輸入符號可能和輸出符號不同

                                                           

因此該通訊系統中只能使用{a1,a2,a3,a4,a5}中的部分符號,而不是全體。例如可以使用a1,a4,不能使用a1,a3,因爲輸出是a1時將無法區分。但又從效率角度出發,希望能提供使用的符號儘可能地多。

如果符號x,y具有相同的輸出,則在頂點x,y之間連一條邊。如圖

                                                       

尋找最大獨立集 a1,a4,就是我們能使用的符號(或a2,a4)

 

  • 點覆蓋集

概念

  1. 點覆蓋:設G=(V,E),V’⊆V,如果對任意的e∈E,都存在v∈V’,使得v是e的一個端點,則稱V’是G的一個點覆蓋集,簡稱點覆蓋。
  2. 極小點覆蓋:如果V* 是點覆蓋,且V*的任何真子集都不再是點覆蓋,則稱V*是極小點覆蓋
  3. 最小點覆蓋:基數最小的點覆蓋稱作最小點覆蓋
  4. 點覆蓋數:最小點覆蓋V*的基數稱作圖G的點覆蓋數β(G)

                                                 

  • V1、V2、V3不是點覆蓋——>V5,V6這條邊的兩個頂點都未被包括
  • V1、V2、V6、V4、V6、V7是點覆蓋但不是極小點覆蓋——>可將V2移去
  • V1、V2、V3、V5、V7是極小點覆蓋但不是最小點覆蓋
  • V1、V3、V4、V6既是極小點覆蓋也是最小點覆蓋

性質:

  1. 在極小點覆蓋中,不存在所有相鄰頂點都在V*中的頂點
  2. 一個圖的極小點覆蓋可能不唯一
  3. 一個圖的最小點覆蓋可能不唯一
  4. 最大點覆蓋一定是極小點覆蓋,極小點覆蓋不一定是最小點覆蓋
  5. 明顯有β(G)≥γ(G)
  6. 特殊圖中的點覆蓋

(a) 在任一簡單圖中,V都是點覆蓋
(b) 完全圖Kn(n≥3)的點覆蓋數爲n - 1
(c) 完全二分圖Kn,m 的獨立數爲min(n,m)

7、點覆蓋集與點獨立集之間的關係:

定理一:在簡單圖G=(V,E)中,V*⊆V是點覆蓋集當且僅當V-V*是獨立集
推論一:在簡單圖G=(V,E)中,V*⊆V是極小點覆蓋集當且僅當V-V*是極大獨立集
推論二:在簡單圖G=(V,E)中,V*⊆V是最小點覆蓋集當且僅當V-V*是最大獨立集,繼而有α(G) + β(G) = |V|

 

八、樹(特殊的圖)

樹幾乎是集前面所講的良好的性質於一身的。

  • 樹 (Tree)

連通無迴路的無向圖稱爲樹 tree
〉 樹中的懸掛點稱作樹葉 leaf
〉 非樹葉節點稱作分支點 branched node
〉 僅有單個孤立節點的樹稱作空樹 null tree
每個連通分支都是的圖稱作森林(forest),特別的樹是森林
                                                           

  • 樹的性質

〉 是簡單圖、是二分圖、是平面圖
〉 頂點數比邊數多 1,否則必然出現迴路。因爲每個節點必有一個父節點,除了樹根外。
〉 刪去任意一條邊,即不連通。(否則某兩端點之間有兩條通路,形成迴路)
〉 任意兩個不同頂點之間僅有一條通路

 

  • 生成樹/支撐樹 (spanning tree):如果圖T是G的生成子圖,且T是樹。

〉 任意連通圖G都至少有一棵生成樹(連通圖一定有)定理:無向圖 G 具有支撐樹, 當且僅當 G 是連通圖。

構造法證明:如果G有迴路,則刪去迴路上的一條邊,然後繼續構造直到沒有迴路。
〉 一個連通圖可以有多個不同的支撐樹。如下例子所示:

                                                

推論:設 G 爲一個 n 階無向連通圖,則其邊數 m \geqslant  n - 1
證明:若 G 是 n 階連通圖,它必定含有支撐樹,即至少包含 n - 1 條邊

  • 最小生成樹的引例

下面是一個學校的平面建築圖,需要從某點水渠飲水,修建管道。但是並不是任意路徑都可修建。只有沿着指定路徑修建,並且各個管道的成本都不一樣。經過圖建模之後,頂點代表需要引水的建築物,邊代表指定的修建路徑,邊上代表着修建成本。
                                           

由上圖知,我們需要的便是從圖中得到一個生成樹。但同時需要使得其總成本最低,便引出了最小生成樹的概念了。

給定一個無向連通賦權圖,該圖所有支撐樹中各邊權值之和最小者稱爲這個圖的最小支撐樹 (minimalspanning tree, MST)。

那麼我們自然會想到該如何得到一棵最小支撐樹呢?   下面我們介紹兩個算法:克魯斯卡算法普里姆算法
 

最小瓶頸支撐樹:設 ( G, W ) 是無向連通賦權圖, 包含 G 的所有支撐樹中權值最大的邊中權值最小的那條邊的所有支撐樹都稱爲 G 的最小瓶頸支撐樹(minimal bottleneck spanning tree, MBST)。但在這些最小瓶頸支撐樹中只有一個是最小支撐樹。

                                                       

上圖中第一個是原圖,後三個是最小瓶頸支撐樹。但是其中只有第二個纔是最小支撐樹(生成樹)。

無向連通賦權圖的最小支撐樹一定是最小瓶頸支撐樹,但最小瓶頸支撐樹不一定是最小支撐樹

設 ( G=(V, E), W ) 是無向連通賦權圖,R \subseteq V, 在 G 的所有包含 R 中所有頂點的子圖中,總權值最小的樹稱爲 G 的斯坦納樹(Steiner tree)當 R = V 時,斯坦納樹問題即是最小支撐樹(最小生成樹)問題。例子如下:

雖然斯坦納樹問題與最小支撐樹問題具有相似之處,然而斯坦納樹問題則難得多。它屬於NPC問題,事實上,它是卡普
(Richard Manning Karp)證明的第一批 21個NPC問題之一。

  • 根樹 (rooted tree)  歸納定義

① 一個孤立節點 v0 是根樹,v0 稱爲樹根
② 如果 T1,T2,…Tk 是根樹,其樹根分別是 v1,v2,…,vk,則
〉 V=V(T1) ∪ V(T2) ∪ … ∪ V(Tk) ∪ {v0}
〉 E=E(T1) ∪ E(T2) ∪ … ∪ E(Tk) ∪ {v0,v1} {v0,,v2}… ∪ {v0,vk}

                                              

〉 T=<V,E>也是根樹,v0 稱爲樹根
〉 Tn稱爲T的子樹 subtree,樹根稱爲父節點 parent,而子樹的樹根稱爲子節點 child
〉 v1,v2,…,vk 互稱兄弟節點sibling
〉 根樹中每個節點都是某個子樹的根

n元樹: 每個節點都至多有n個子節點根樹稱作n元樹
〉 對於子節點規定了次序的n元樹稱作n元有序樹
〉 最常用的n元樹是二元樹(左/右子節點)
 

  • 樹的應用

二元有序樹可以表示任何n元有序樹

〉 左子節點表示第一個子節點
〉 右子節點表示下一個兄弟節點。
只要在構造時將 n 元有序樹遞歸地看成根節點,左子節點,和右邊所有節點,然後在遞歸的處理右邊的所有節點即可完成構造。
                                                      

因爲二元有序樹可以表示任何n元有序樹,所以下面主要看二元樹的應用。

二元樹的遍歷
遍歷:以某種次序訪問所有節點

〉 按照樹根訪問的先後,分爲三種次序:
先根次序:根、左子樹、右子樹
中根次序:左子樹、根、右子樹
後根次序:左子樹、右子樹、根

樹的應用:表達式樹
〉 分支節點爲運算符              〉 樹葉爲運算數
                                                

排序搜索樹:有了樹結構後我們還可以用它來做排序或搜索

〉 左子樹的節點值都小於根
〉 右子樹的節點值都大於根
排序樹的構造平衡優化搜索。因爲構造的排序樹有很多種結構,但是查找效率最高的便是平衡二叉樹,故需要對排序樹進行平衡和優化。如下圖所示例子:

                                              

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章