###### tags: `離散數學` :::info [回共筆首頁](https://hackmd.io/zrsmsRtEQ-OrnGslDxT0NQ) [回科目首頁](https://hackmd.io/OwMjUy0fRq2kEuCRiMwtkQ) ::: - [上課簡報](https://moodle2.ntust.edu.tw/pluginfile.php/237456/mod_resource/content/0/Chapter10_m.pdf) [TOC] # 10. Graphs ## Section 10.1: Graphs and Graph Models ### Definition: - graph G = (V,E) - 由 vertices(or nodes) 和 edges 組成 ### Some Terminology :::info Terminology => 術語、專有名詞 ::: - simple graph: 每個邊都連結到不同的節點,且沒有兩個邊同時連接到相同的兩個節點 - Multigraphs: 可能有不同邊,同時連接到想童的兩個節點 - loop: 邊的兩端連接到同一個節點,自己連自己 - Pseudograph: 可能含有 loop 和 Multigraph 的特性 --- - Directed Graph: 有向圖,兩個節點連接的線具有方向性 - simple directed graph: 沒有 loop 且沒有 multiple edges ## Section 10.2: Graph Terminology and Special Types of Graphs ### Basic Terminology 1. adjacent (or neighbors): 相鄰的節點 2. neighborhood: G = (V,E), denoted by N(v),指一個集合為v的所有adjacent 3. degree: denoted by deg(v) - undirected graph: deg(v), v 節點的edge的數量 - directed graph: in-deg(v)、out-deg(v),指進v、指出v的edge的數量 ![](https://i.imgur.com/SD2twCz.png) ### Special Simple Graph - Complete Graphs: ![](https://i.imgur.com/pSbd0GC.png) - Cycles and Wheels ![](https://i.imgur.com/ieMCkDp.png) - n-Cubes ![](https://i.imgur.com/fH58Lte.png) ### Bipartite Graphs - V個節點,可以被拆成兩個 subsets => V1, V2 - 沒有一條邊,連接著同一個 subsets 的節點 ![](https://i.imgur.com/vF5f3dV.png) ![](https://i.imgur.com/xZZoC9h.png) :::warning ### **Complete** Bipartite Graphs V1的每個點都有連接到V2的每個節點 ![](https://i.imgur.com/Rta6kmF.png) ::: ## Section 10.3: Representing Graphs and Graph Isomorphism ### Adjacency Lists - represent a graph with no multiple edges by specifying the vertices that are adjacent to each vertex of the graph - 只能標示有存在連線,不能表示 multiple edges 的數量 ![](https://i.imgur.com/drOj19w.png) ### Adjacency Matrices - 用矩陣紀錄點跟點之間的關係,也可以表示 multiple edges 的數量 ![](https://i.imgur.com/ORztSnm.png) :::warning Note: The adjacency matrix of a **simple graph** is **symmetric**, i.e., aij = aji Also, since there are no loops, each diagonal entry aij for i = 1, 2, 3, …, n, is 0. - simple graph 所表示的 adjacency matrix 會是 symmetric (對稱的矩陣) ::: ### Incidence Matrices - 紀錄 undirected graph 節點跟邊的關係 - row 跟 column 分別代表為 vertices 跟 edges - 每條邊有自己的編號,會記錄哪兩個節點與之連接 - 假如一個邊,只存在著一個節點,就是 loop ![](https://i.imgur.com/f3nrjJW.png) ### Isomorphism of Graph - 當G1 = (V1,E1) 和 G2 = (V2, E2) 為 **one-to-one and onto**,就稱為 **isomorphic** - 兩個 graph 看起來不一樣,因為節點擺放的位置不同,但他們的**節點與邊的關係**是一樣的,那就說他們是 isomorphic :::success isomorphic 的判別: - 可以透過以下幾點觀察,做初步的篩選 1. number of vertices 2. number of edges 3. degree sequence - 即使全都相同,也不可斷定 isomorphism,最後還是要把兩個 graph 的 adjacency matrix 證明 ::: :::info Isomorphism 的應用: 1. 在化學中,觀察兩個化學物質的**化學鍵**是否相同,判斷是否為同一個化學物質。 2. 在電路圖中,元件擺放的位置可以任意擺放,用人眼是難以觀察得出來電路是否一樣,利用 isomorphism,在商業上判斷是否盜用智慧財產權/抄襲。 ::: ## Section 10.4: Connectivity ### Paths #### Definition 在一張圖中,從某一個節點透過邊(edge) travel 到另一個節點 途中經過的所有節點組合而成一個的 sequence 假設在圖 $G$ 裡,從 $u$ 到 $v$ 有個 path 的長度是 $n$ 而這 $n$ 個邊(edge)分別是 $e_1,\;\dots\;,e_n$ 節點就會是 $x_0=u,x_1,\;\dots\;,x_{n-1},x_n=v$ 而這些節點會在邊裡面 $e_i$,其中 $i=1,\;\dots\;,n$ :::info 應用: 1. 定義訊息該怎麼在兩台電腦間傳遞 2. 有效率規劃郵件寄送的路線 ::: #### Terminology - circuit:起始的點跟結束的點是同一個 ($u=v, n>0$) - pass through:通過、透過(節點) - traverse:走過(邊) - simple:在一個 path 或 circuit 中沒有出現同樣的邊 - simple path/circuit:一個邊只能走過一次 ### Connectedness #### Undirected Graphs 在一個圖 $G$ 當中,讓兩個節點(vertices)都可以找到一條 path 就會說這個圖 $G$ 是 **connected**,否則就是 **disconnected** 當我們透過移除邊(edge)或節點(vertices), 去製造一個 disconnected subgraph,這個動作就稱為 **disconnect** #### Connected Components 對於 disconnected 的圖 $G$ 必然是由數個不相交的區塊組成,而這些區塊就是 **connected component** (一個 disconnected 的圖,必然會有兩個以上的 connected component) ![](https://i.imgur.com/V9PdV8E.png) #### Directed Graphs 在有向圖裡面,因為要考慮方向,所以 connected 又分成兩種 - strongly connected:$a,b$ 兩個點都滿足 path 從 $a$ 到 $b$,以及 $b$ 到 $a$ - weakly connected:把方向去掉之後(轉成無向圖),可以符合 connected 的特性 :::info 若 digraph 滿足 strongly connected,就必定滿足 weakly connected。 反之,則不一定。 ::: :::success 可以利用 simple path,判斷兩個 Graph 是不是 Isomorphism ![](https://i.imgur.com/fUcJsWu.png =80%x) $G$ 不存在長度為 $3$ 的 simple path,但是 $H$ 存在長度為 $3$ 的 simple path,所以他們必定不是 Isomorphism。 **注意:如果都有出現長度一樣的 simple path 也不一定是 Isomorphism** ::: ### Counting Paths between Vertices 如果我們想要針對**長度**去計算從 $u$ 到 $v$ 有幾種路徑 我們可以利用矩陣乘法的方式去計算 ![](https://i.imgur.com/Bpp7TM1.png) 矩陣 $A$ 每個數字都代表從 row 走到 column 的 path 有幾條 $A[0][0]$:$a$ 走到 $a\quad A[0][1]$:$a$ 走到 $b\dots$ $A[1][0]$:$b$ 走到 $a\dots$ $\quad\vdots$ $A[3][0]$:$d$ 走到 $a\dots$ 我們如果要針對 path 長度求每個點到點之間有幾種方法的話 就會把矩陣 $A$ 拿去做冪次運算,$A^2$ 就是長度為 $2$ 的 path 有幾種 可以把 $A^2$ 寫成 $A\times A$,同理 $A^n=A^{n-1}\times A$ 做矩陣乘法時,我們會把第一個矩陣的 row 乘到第二個矩陣的 column 上(一一對應元素),並且把乘完的結果都相加 把 $A$ 矩陣當中每一格代表的意義寫出來,就很好理解了 舉 $A[0][0]$ 為例 把 $a$ 走到 $a$ 的步數乘上 $a$ 走到 $a$ 的步數(組合數用相乘) 加上 $a$ 走到 $b$ 的步數乘上 $b$ 走到 $a$ 的步數 加上 $a$ 走到 $c$ 的步數乘上 $c$ 走到 $a$ 的步數 $\quad\vdots$ 全部加完之後,就是 $A[0][0]$ 的方法數了 而我們可以用這種方式去計算在任意長度下,從任意一點走到另一點的方法數 :::info ![](https://i.imgur.com/VABaCxq.png =30%x) - $A^{2}$ 代表的意思是 length 為 $2$ 的 path 數量 - ::: ## Section 10.5: Euler and Hamiltonian Graphs ### Euler Paths and Circuits - 一筆畫經過所有的 edge #### Necessary and Sufficient Condition for Euler Paths and Circuits - Euler paths $\iff$ 剛好兩個節點的 degree 是奇數 - Euler circuit $\iff$ 每個節點的 degree,必定是偶數 [哥尼斯堡七橋問題:什麽樣的圖形可以一筆畫?-李永樂](https://www.youtube.com/watch?v=QsMycO8B4M0) ### Hamilton Paths and Circuits - 一筆畫經過所有的 vertice - 沒有像 Euler path 或 circuit 一樣的奇偶特性 - 有一些可以觀察出來的特性 - 超過 $2$ 個的「單一 degree」一定沒有 **path**,因為一個當 start,一個當 end,就不可能再經過其他的 vertice - 只有 $1$ 個的「單一 degree」一定沒有 **circuit**,因為沒辦法走回起始點 :::info ![](https://i.imgur.com/BwKqXSH.png) $K_{n}$ 是指complete simple graph :::