1. 程式人生 > 其它 >第2章 圖論基礎

第2章 圖論基礎

簡介

本章將主要介紹以下內容:

  • 圖的表示
  • 圖的性質
  • 複雜圖
  • 圖上的計算任務

圖的表示

  • 圖的定義:一個圖可以被表示為\(G = \{V, E\}\),其中\(V = \{v_1, \dots, v_N\}\)是大小為\(N = |V|\)的節點集合,\(E = \{e_1, \dots, e_M\}\)是大小為\(M\)的邊的集合。

注意:在沒有特殊說明的情況下,本章只討論無向圖。

  • 鄰接矩陣:描述圖的一個\(N \times N\)的01矩陣\(\boldsymbol{A}\)。如果點\(v_i\)和點\(v_j\)之間有邊,則\(\boldsymbol{A_{i, j}} = 1\);反之,\(\boldsymbol{A_{i, j}} = 0\)

    例子:

圖的性質

  • 度(Degree):度表示這個節點和其他節點相鄰的次數,一般用\(d(v_i)\)來表示
  • 鄰域(Neighborhood):節點\(v_i\)的鄰域\(N(v_i)\)是所有和它相鄰的節點的集合。
    • 定理(握手定理):一個圖中所有節點的度之和是圖中邊的數量的兩倍
    • 推論:無向圖鄰接矩陣的非零元素的個數是邊的數量的兩倍

連通度

  • 途徑(Walk):圖的途徑是節點和邊的交替序列,從一個節點開始,以一個節點結束,其中每條邊與緊鄰的節點相關聯。途徑的長度是途徑中包含邊的數量。
  • 跡(Trail):跡是邊各不相同的途徑
  • 路(Path):路是節點各不相同的途徑,也稱路徑
    • 定理:對於圖\(G\)
      及其鄰接矩陣\(\boldsymbol{A}\),用\(\boldsymbol{A}^n\)表示該鄰接矩陣的\(n\)次冪。那麼\(\boldsymbol{A}^n\)的第\(i\)行第\(j\)列的元素等於長度為\(n\)\(v_i-v_j\)途徑的個數(數學歸納法可證)
  • 子圖(Subgraph):圖\(G\)的一個子圖由\(G\)節點集的子集和邊集的子集組成,並且子圖的節點集必須包含邊集涉及的所有節點。
  • 連通分量(Connected Component):給定一個圖\(G\),若一個子圖任意一對節點之間都至少存在一條路,並且子圖中的任何節點都不與除子圖節點外的其他節點相連,那麼這個子圖就是一個連通分量。
  • 連通圖(Connected Graph):圖中任意一對節點之間都至少存在一條路,即圖中只有一個連通分量。
  • 最短路(Shortest Path):給定連通圖中的任意兩點,連線這兩點的長度最小的路被稱為這兩點之間的最短路。最短路的長度被稱為兩點間的距離。
  • 圖的直徑(Diameter):圖中最長的最短路的長度。

中心性

節點的中心性(Centrality)用來衡量節點在圖上的重要程度。

  • 度中心性(Degree Centrality):利用節點的度來衡量節點的重要性(有多少人認為你厲害),即:\(c_d(v_i) = d(v_i) = \sum\limits_{j = 1}^N \boldsymbol{A_{i, j}}\)
  • 特徵向量中心性(Eigenvector Centrality):衡量節點的中心性時同時考慮鄰居節點的中心性(認為你厲害的人有多厲害),即:\(c_e(v_i) = \frac{1}{\lambda}\sum\limits_{j = 1}^N \boldsymbol{A_{i, j}} \cdot c_e(v_j) \Rightarrow \lambda \cdot \boldsymbol{c_e} = \boldsymbol{A} \cdot \boldsymbol{c_e}\)。顯然,\(\boldsymbol{c_e}\)是矩陣的特徵向量,\(\lambda\)是對應的特徵值。中心性的值通常為正數,所以選擇中心性需要考慮所有元素均為正數的特徵向量。根據Perron-Frobenius定理,一個元素全為正的實方陣具有唯一的最大特徵值,其對應的特徵向量的元素全為正。因此可以選擇最大的特徵值\(\lambda\),將它的相應的特徵向量作為中心性向量。
  • Katz中心性(Katz Centrality):是特徵向量中心性的一個變體,不僅考慮鄰居的中心性,還考慮了自己的中心性(你認為自己厲害),即:\(c_k(v_i) = \alpha \sum\limits_{j=1}^N \boldsymbol{A_{i,j}}c_k(v_j) + \beta\)。將其用矩陣表示,\(c_k = \alpha \boldsymbol{A}c_k + \beta \Rightarrow (\boldsymbol{I} - \alpha \boldsymbol{A})c_k = \beta\)\(\alpha\)太大會導致方程無意義,太小會使得中心性沒有意義。在實踐中,經常令\(\alpha < \frac{1}{\lambda_{\max}}\),這就保證了矩陣\(\boldsymbol{I} - \alpha \boldsymbol{A}\)的可逆性。那麼\(c_k\)可以按照如下方式計算:\(c_k = (\boldsymbol{I} - \alpha \boldsymbol{A})^{-1} \beta\)
  • 介數中心性(Betweenness Centrality):檢查節點是否在圖中處於重要位置。節點\(v_i\)的介數中心性可以定義為:\(c_b(v_i) = \sum\limits_{v_s \neq v_i \neq v_t} \frac{\sigma_{st}(v_i)}{\sigma_{st}}\)。其中\(\sigma_{st}\)表示所有從節點\(v_s\)到節點\(v_t\)的最短路數目,\(\sigma_{st}(v_i)\)表示這些路中經過節點\(v_i\)的路的數目。顯然,介數中心性的值會隨著圖的增大而增大,因此需要進行歸一化處理。