[心智筆記]基本圖論
基本圖論
探討問題
存在性問題
最佳化問題
術語
圖形(Graph)
由邊線與節點構成的有限集合
兩大種類
有向圖
無向圖
有向圖(directed graph)
具方向性邊線的圖性
<V1,V2>代表一個有向的邊,V1是該邊的尾,V2是頭
<V1,V2>和<V2,V1>代表不同的邊
無向圖(undirected graph)
不具方向性邊線的圖形
(V1,V2)和(V2,V1)代表相同的邊
節點(vertex)
邊線(edge)
路徑(path)
從起點到終點所經過的節點串列
路徑長度(path length)
路徑所經過的邊數
簡單路徑(simple path)
不含重複節點的路徑
除了起點與終點可能相同,其他節點皆不相同
迴路(cycle)
起訖為同節點的簡單路徑
連通圖(connected graph)
每個節點對任一節點都有路徑相通
有向連通圖稱為強連通圖
連通單元(connected component)
非連接的圖形由多個連接的子圖形組成,這些子圖即為連接元件
樹(tree)
無迴路的圖形
由一個以上節點構成的有限集合
有一特定節點稱為樹根
其餘節點分為n(n>=0)個互斥集合,這些互斥集合也為一棵樹
森林(forest)
一群不相連的樹所組成
n(n>=0)個互斥樹之集合
生成樹(spanning tree)
又稱展開樹
非唯一
由連通圖的子圖所構成的樹,此樹連接圖形所有節點
不連通=>無生成樹
同圖形的生成樹不一定有交集的邊
最小生成樹
邊線權值總和最小的生成樹
完全圖(complete graph)
n節點無向圖,具n(n-1)/2個邊
稀疏圖(sparse graph)
茂密圖(dense graph)
權值(weight)
加權圖(weighted graph)
邊線具有權值的圖形
網路(network)
加權有向圖
分支度(Degree)
每個節點的子樹個數
樹葉(Leaf)
又稱終端節點(Terminal Node)
分支度為零的節點
非終端節點(Nonterminal Node)
又稱非樹葉節點(Non-Leaf Node)
Degree>=1的節點
子點(Child Node)
父點(Parent Node)
兄弟(Sibling)
同一父點的子點
祖先(Ancestors)
樹根到該節點路徑中所包含的節點
階度(Level)
樹根階度為1
某節點階度為I,則子節點階度為I+1
樹的分支度(Degree of Tree)
樹中節點的最大分支度
Max(各Node之Degree)
高度(Height)
又稱深度(Depth)
樹中節點的最大階度
Max(各Node之Level)
入支度(In-Degree)
有向圖中指向節點的邊數
出支度(Out-Degree)
有向圖中從節點出去的邊數
源點(source)
匯點(sink)
剩餘流量網路(residual network)
容量值-流量值
表任兩節點間還能容納的流量
遞增路徑
可以遞增總流量的路徑
圖形表示法
相鄰矩陣(adjacency matrix)
特點
n個節點的圖形需使用n*n的空間
無向圖的相鄰矩陣是對稱的
有向圖的相鄰矩陣不一定是對稱的
分支度計算
無向圖的分支度為列元素和
有向圖的出支度為列元素和,入支度為行元素和
優缺點
優點
簡單
存取效率高
計算分支度方便
插入刪除邊線容易
易判斷邊線存在與否,時間複雜度為O(1)
缺點
空間浪費
邊線多寡所需空間皆固定
相鄰串列(adjacency list)
優缺點
優點
節省空間
缺點
求算邊數與判斷是否連通,時間複雜度為O(n*n)
需搜尋整條串列才能獲知邊線存在與否
加入刪除邊線不便
相鄰多元串列(Adjacency Multilist)
索引表(Index Table)
以一維陣列紀錄相鄰節點編號
以索引陣列記錄相鄰節點起始位置
圖形搜尋法
又稱圖型的走訪(graph traversal)
有系統地依循邊線拜訪圖形節點
演算法
深度優先搜尋(depth-first search)
用遞迴或堆疊
廣度優先搜尋(breadth-firth search)
用佇列
應用
偵測圖形是否有迴路
利用深度優先搜尋
相鄰節點若拜訪過則表示有迴路
判斷圖形是否連通
找圖形的連通單元
找出圖形的雙連通單元
找連通圖形的生成樹
加權圖
最小生成樹
演算法
普林(Prim)
令U=空集合,另一為V-U集合
挑出最小成本的邊(u,w),其中u屬於U,w屬於V-U
(u,w)自E中刪除,加入生成樹中,同時將w自V-U刪除,並加到U
Repeat 2~3步驟直到U=V或無邊可挑
克魯斯克爾(Kruskal)
E中挑出最小成本的邊並刪除
若此邊加入生成樹未造成迴路則加入,否則取消挑選
Repeat 1~2步驟直至無邊可挑
Sollin
每個節點皆是為獨立的Free Root
從各樹中挑出最小成本的樹邊
刪除重複挑出的樹邊
Repeat 2~3直到剩一棵樹或無邊可挑為止
應用
電路佈局
連接多個城市之交通連線的最小架設成本
旅遊多個城市的最少花費
最短路徑
種類
單源最短路徑(Single-source shortest-path)
任意兩節點之最短路徑(All-pairs shortest-path)
演算法
迪杰斯特拉(Dijkstra)
圖形不能存在負加權值,否則可能有誤
從起點開始循序確定到各相鄰節點的最短路徑
貝爾曼-福特(Bellman-Ford)
反覆檢查每條邊線,進行最短路徑放鬆
可用於負邊線加權值有向圖
弗洛伊德(Fly-Warshall)
節點X到Y的距離,可因節點W的加入而縮短,那就將W加入X和Y之間的最短路徑
網路流
最大流量問題
從源點到匯點之間的最大流量
演算法
Ford-Fulkerson
Edmonds-Karp
配對問題