---
# System prepended metadata

title: '基礎圖論 (三) : 有趣的圖論 Topics'
tags: [內湖高中程式競賽]

---

# 基礎圖論 (三) : 有趣的圖論 Topics
在前面的篇章，我們粗略地介紹了各種圖論的名詞還有常見的圖。對打競程的來說這樣就很夠了，**但如果你對圖論的理解只有這樣的話，那你的人生應該很無趣**。每次看到網路上那些只介紹資工關心的圖論，而沒去對整個圖論做 overview，我都覺得有點膩，想說他們的人生是不是也那麼無趣。因此這篇來聊聊圖論究竟有什麼好玩的主題，你可以看完後去查一些這些主題的 open problems，每天睡前想一下，說不定哪天上帝託夢你就想出來了也說不定(?

PS : 這篇就只是閒聊，用字遣詞可能非常不精確，也懶得給證明，有可能還會有些怪怪的自言自語

## 古典的圖論主題 Classical Graph Topics
### 連通/不連通 Connectivity
研究歐拉道路/迴路是圖論領域的第一篇論文，也是開啟這領域的濫觴，古典的圖論是從對於生活中空間的觀察開始。當我們看地圖，我們會在意的無非就是能否從一個地方到達另一個地方。之後可能也會有人想搞破壞，看要破壞哪條路或是城鎮才有辦法使兩地無法溝通。這些連通與不連通的討論應用最多的應該就是經濟學或軍事吧!

### 圖形結構 Structure of Graphs
不知道從什麼時候開始，某些無聊的人類開始幫不同長相的圖取名字，什麼 clique、tree 或是 hamiltonian cycle 之類的，然後就開始研究起他們的性質。這些討論無非就是在什麼情況下會產生什麼樣的結構，可能是節點數量、邊的數量或是最大/最小的度數會造就產生某些結構的 bound。像是如果要產生歐拉迴路的話，那節點度數就必須是偶數才有可能。

然而，在這個主題也產生了不少 open problem。像是找出圖中長度為 $k$ 的環，或是找 hamiltonian cycle。Somehow 我們都不知道產生這些結構的條件是什麼，只能說他們的共通點都是，當我們證完他們之後，就被丟到 [NP-complete 垃圾桶](https://youtu.be/HVbOHvChOQ8?si=Q77181Y_XZ57Aoq8&t=2265)，然後再也不理他們(?

備註 : hamiltonian cycle 可以是小寫，因為他太有名了

### 組合最佳化 Combinatorial Optimization
圖論的東西很適合拿來優化一些做事情的流程，所以被廣泛的應用。比如說用二分圖匹配來[誰要跟誰配對 (stable matching)](https://en.wikipedia.org/wiki/Gale%E2%80%93Shapley_algorithm)，又像是最短路徑問題可以抽象化變成怪怪的東西之類的

所謂組合最佳化就是一個有限的集合中找出最佳解的一些問題。雖然集合是有限的，但是窮舉肯定不是最省事的辦法，因此我們需要想出演算法去解這些問題提升效率。如果是很難找到演算法的問題，我們就把這種問題跟其他已經知道演算法的問題搭「橋梁」，使得他們都可以用同一套算法解出來。像是 [Kőnig 定理](https://hackmd.io/@ShanC/konig-theorem)、[Menger 定理](https://hackmd.io/@ShanC/Menger-Theorem)或[最大流量-最小割定理](https://hackmd.io/@ShanC/maxflow-mincut-theorem)都屬於這類「橋梁」

有意思的事，不只我們電腦科學跟數學會去討論這個主題，有修作業研究 (operations research) 的或許也會學到這些東西，因為真的很實用

## 圖論演算法 Graph Algorithms
基本上就是資工愛玩的東西，不論是演算法或是資料結構都有它的身影。會有這樣的現象，我認為是因為 : 
- 圖論這個數學物件用於描述電腦裡儲存的資料非常方便，其中又以樹狀結構最為常用
- 在儲存資料之外，圖論某些良好的性質也很適合找資料
- 圖論的節點太多了，若是在電腦中算會快很多，或許可以拿來證明一些東西(? 嗯，我就是在說[四色定理](https://en.wikipedia.org/wiki/Four_color_theorem)

說白了其實就是上面古典的圖論在研究的東西，只是切換到計算的視角。這方面由於大多數人接觸圖論都是在演算法，基本上[我的筆記](https://hackmd.io/@ShanC/B1ouGxqcC#%E5%9C%96%E8%AB%96-Graph-Theory)已經囊括了一堆東西，所以就不細講。競程原則上會有這些主題 : 

- 圖的 operation : DFS、BFS...
- 找東西 : 找環、找漢米爾頓路徑、找 SCC、找 BCC...
- 樹 : 生成樹、數一些東西、找祖先、找後代、壓平
- 最短路徑 : 單源最短路徑、全源最短路徑
- 怪東西 : 拓樸排序 (感覺就 [partial ordering](https://en.wikipedia.org/wiki/Partially_ordered_set))
- 計數 : 計算一些怪東西的數量
- 一些可以互相轉換的東西 : 流量網路、割、二分圖匹配...

大多數學的東西都有分「分析」跟「計算」兩個層面。分析是數學系在玩的事，計算就是我們電腦科學 (資工) 在玩的事情。同樣地，在找這些圖的性質在數學的工作，在計算上就是看如何實作然後去分析複雜度。兩者相輔相成，沒有計算這些東西就不知道在研究什麼鬼，沒有分析有些複雜度就降不下來，所以沒事不要搞歧視

## 圖著色 Graph Coloring
### 著色問題
這領域是在說，在圖上我們可以給一些東西著色，可能是節點、可能是邊，也有可能是平面圖的 region，我們希望使相鄰的兩者可以塗上不同顏色，那最少會是幾種顏色呢? Somehow 我們可以將平面圖的 region reduce 成節點著色的問題 ([用 dual graph](https://en.wikipedia.org/wiki/Dual_graph))，所以其實問題只有兩種而已 : 
- 給一個 simple graph 來說，最少可以用幾種顏色，使相鄰兩節點圖上不同顏色?
- 給一個 simple graph 來說，最少可以用幾種顏色，使相鄰兩邊圖上不同顏色?

### Chromatic Number
關於這些問題，他們的上界還蠻明顯的嘛，無非就是和節點數、邊數或度數有關，但是下界呢? 組合學家們為此定義了兩個名詞 (不知道中文翻譯是什麼) : 
- chromatic number : 寫作 $\chi(G)$，最少的顏色數使相鄰兩節點圖上不同顏色
- edge-chromatic number (chromatic index) : 寫作 $\chi'(G)$，最少的顏色數使相鄰兩邊圖上不同顏色

關於找出 $\chi(G)$ 與 $\chi'(G)$ 至今都還是很難的問題，所以從 De Morgan 那個時代至今，有很多人投入這領域的研究，但只能找到一些上界或是下界來估算。既然沒辦法直接算出來，那就換種圖的結構來玩玩，因此有人試圖去研究著色與結構 (像是 clique) 的關係，其中最著名的莫過於用於平面圖的[四色定理](https://en.wikipedia.org/wiki/Four_color_theorem)

### 四色定理 Four Color Theorem
四色定理是在說「若在平面上劃出一些相鄰的有限區域，那麼可以用四種顏色來給這些區域著色，使每兩個鄰接區域染的顏色都不同」這問題在很早以前就被提出來，因為畫地圖常需要用不同顏色來分辨不同國家，但是卻一直很難被證出來。有一個比較弱的定理叫[五色定理](https://en.wikipedia.org/wiki/Five_color_theorem)，這個比較好證。但是四色定理卻是麻煩許多，歷年來一直有人把問題 reduce 到一些 cases (最後總共是 1936 個)，到近代 (1976 年)才被電腦跑完所有 cases，被證明是正確的。但爭議點就在於，這並不是一個數學邏輯上的證明，比較像是做實驗所得到的成果，因此到現在都還有人在找證明去證四色定理

### 在電腦科學的視角
在煮飯先生 (Stephen Cook) 證明[第一個 NP-complete 問題](https://en.wikipedia.org/wiki/Boolean_satisfiability_problem)後，隔年 (1972 年) Karp 就發表了[二十一個 NP-complete 問題](https://en.wikipedia.org/wiki/Karp%27s_21_NP-complete_problems)，論文的產出速度真的是非常快。其中就包括找出 chromatic number ，因此這也是個 NP-complete 問題

## 拓樸圖論 Topological Graph Theory
### 把圖畫在其他平面!?
基本的東西在[上一篇](https://hackmd.io/@ShanC/basic-graph-theory-1#%E5%B9%B3%E9%9D%A2%E5%9C%96-Planar-Graph)就講過了，看過之後應該就有點感覺了吧! 基本上就是在玩平面圖與拓樸學之間的關係，是個有趣的東西。如下圖就是一個平面圖畫在甜甜圈上的例子

<center>
<img src="https://hackmd.io/_uploads/B1tMuy4Ulx.png" style="margin: 0 auto; display: block; width: 300px">
</center>

### 一些歷史
要說起拓樸與圖論的淵源，早期數學家們覺得只要不是跟幾何 (距離、角度等) 有關的空間問題都屬於拓樸，因此以前的圖論自然也被劃在拓樸學的範疇，直到 1936 年匈牙利人 [Dénes Kőnig](https://en.wikipedia.org/wiki/D%C3%A9nes_K%C5%91nig) 寫了第一本圖論的書，大家才開始對圖論生興趣。再加上 20 世紀初的那些拓樸學家們開始定義一些拓樸學的東西，兩邊才開始分家。如今兩者已經是不同領域，這在你分開圖論與拓樸學的書 (或是 baby Rudin 第二章) 的第一頁時就會發現

有意思的是那位寫過 [Topology](https://www.amazon.com/Topology-2nd-James-Munkres/dp/0131816292) 的 Munkres，剛好也是 [KM 演算法 (匈牙利演算法)](https://hackmd.io/@ShanC/Hungarian-Algorithm#%E5%82%99%E8%A8%BB) 的發明者之一 (就是代表字母 M)

還有就是匈牙利真的是一堆圖論學家，在學圖論的時候不遇到匈牙利人名都很難，根本可以自成一個匈牙利學派了吧

## 極圖論 Extremal Graph Theory

### 簡介 Introduction
極圖論是在說，給局部的圖一些條件，會造成整個圖有哪些影響。這些條件可能是如果沒有 $K_3$、或是沒有二分圖等。給個例子或許比較具體，像是 Mantel's theorem 說「大小為 $n$ 的圖若沒有 $K_3$ 作為子圖，則最多的邊數為 $\lfloor \frac{n^2}{4} \rfloor$」

受 Mantel's theorem 啟發，有人可能會猜測，一個不含 $K_{r+1}$ 的圖的最大邊數將是一個均衡完全 $r$-partite graph。所以就有了下面這位數學家 Turán (對，又是匈牙利人) 證出的定理

### Turán's Graph
Turán's graph $T_{n, r}$ 是一張 $K_{s_1, s_2, \dots, s_r}$，且 $s_1+s_2+\dots+s_r=n$，每個 $s_i$ 不是 $\lceil \frac{n}{r}\rceil$ 就是 $\lfloor \frac{n}{r}\rfloor$。如下圖就是一個 $T_{9, 4}$

<center>
<img src="https://hackmd.io/_uploads/BkE7YJAwgg.png" style="margin: 0 auto; display: block; width: 300px">
</center>

### Turán's Theorem
任何 $n$ 節點且不包含 $K_{r+1}$ 的圖有最多 $(1 - \frac{1}{r} )\frac{n^2}{2}$ 條邊

### $H$-free 的圖
其實就是在研究這圖沒有什麼東西時，圖會長什麼樣子。給一個圖 $H$ 我們說一張圖沒有 $H$ 作為子圖叫做 $H$-free 的圖 (跟我們點一杯 "sugar-free" 的飲料是一樣的邏輯)。顯然當我們從 $0$ 條邊開始加邊到圖裡面，總會到一個上限使得一定會出現某些圖。這領域常常跟著色或是古典的圖論問題弄在一起，有時候在隨機圖也會看到類似的東西，說實話其實很難分辨，但並不妨礙我們討論這門學問

### Extremal Number
給一個有 $n$ 節點的圖與另一個圖 $H$，$ex(n, H)$ 代表 $H$-free 圖的最大邊數

### 與加法組合學的關係
我還沒有時間去研究這塊，但是感覺還蠻有趣的。有興趣者可以看底下參考資料的推薦影片

## 隨機圖論 Random Graph
這領域研究的邊是隨機的。具體來說，通常會給一個圖 $G(n,p)$，代表給 $n$ 個點，每條邊都有 $p$ 的機率會出現，那圖會長什麼樣子呢? 

這領域我也沒有深入研究過，大概知道而已。聽說在社群網路有很多研究，有興趣可以自己去玩玩看

## 代數圖論 Algebratic Graph Theory
這領域主要是用群論或是線性代數的方法來討論圖論，但因為我不會群論所以就點到為止

### 譜圖論 Spectral Graph Theory
有學過線性代數的人應該知道 "spectral" 是在做什麼吧! 沒錯，就是跟特徵值 (eigenvalue) 有關。具體來說是研究兩種矩陣的特徵值 : 鄰接矩陣與拉普拉斯矩陣。你可能會覺得矩陣特徵值跟圖本身有什麼關係呢? 我也不知道具體而言怎麼說，這我看很多資料還是覺得很玄，但我大概可以說一種感覺

#### 鄰接矩陣 Adjacency Matrix
矩陣的每個元素 $A_{i, j}$ 代表點對 $(i, j)$ 之間有連邊。假設你用一個向量去提取簡單圖的鄰接矩陣的話，那就相當於把人擺在你向量分量所對應到的節點上，然後看他們走長度為 $1$ 的 walk 後他們到其他點的可能數。如果我們把這套流程重複 $k$ 遍，那就相當於矩陣的 $k$ 次冪。所以你大概會發現鄰接矩陣就好像在描述每個節點往外擴散的狀況

#### 拉普拉斯矩陣 Laplacian Matrix
拉普拉斯矩陣就是 $L=D-A$，其中 $D_{i, i}$ 就是節點 $i$ 的度數。說起來我也還是不知道這樣定義到底是在做啥，感覺有點像是每個節點到另一個節點的「阻力」。這個東西最著名的是可以去做[圖的 cluster](https://www.youtube.com/watch?v=cxTmmasBiC8)，在機器學習上會用到。除此之外還有找圖的連通塊個數、找某些圖的結構或是[計算生成樹的個數 (矩陣樹)](https://hackmd.io/@ShanC/Cayleys-Formula-Prufer-Code#%E5%85%8B%E5%B8%8C%E8%8D%B7%E5%A4%AB%E7%9F%A9%E9%99%A3%E6%A8%B9%E5%AE%9A%E7%90%86-Kirchhoffs-Matrix-Tree-Theorem) 。在這些例子上都可能會用到拉普拉斯矩陣與它的特徵值

## Ramsey Theory
這東西有夠複雜，它原本不是長圖論的樣子，當初 [Ramsey](https://en.wikipedia.org/wiki/Frank_Ramsey_(mathematician)) 在 26 歲臨終前應該也沒想過會跟圖論扯上關係，但是這在圖論中也有許多討論。至於為什麼不是 theorem 而是 theory，我猜是因為真的太厲害了

簡單來說，這是在討論一個東西叫 Ramsey number，寫作 $R(s, t)$。它的定義如下 : 

$R(s, t)=min\{n:|G|=n, ~K_s\subseteq G ~\text{or}~K_t\subseteq \overline{G}\}$

我們可以代一些數字進去看看。比如說 $R(3, 3)=6$，代表給 $6$ 個節點畫成一張圖的話，這張圖會出現 $K_3$ 或這圖的補圖會出現 $K_3$。想當然，$n=6$ 都可以達成這條件了，那 $n=7$ 個點或更多點一定也會符合條件。反著說就是若 $n=5$，那可能就沒辦法達成這條件

用邊著色的角度換句話說就是，「若將足夠大的完全圖各邊染紅藍兩色，則必定有紅色的 $s$-clique 或藍色的 $t$-clique」，那個完全圖的節點數就是 $R(s, t)$

老樣子，Ramsey 當初也只是說「存在」這樣子的數字而已。由於求 $R(s, t)$ 太難了，所以很多時候我們頂多只能求出一個 bound 而不能直接找出一個確切的數字

----

## 參考資料 / 推薦讀物 / 推薦影片
有興趣的可以去看看下面參考的連結還有書籍，有些我覺得講的還蠻有趣
- D.B.West Introduction to Graph Theory 2/e
- Reinhard Diestel Graph Theory
- [維基百科 - Graph theory](https://en.wikipedia.org/wiki/Graph_theory)
- [維基百科 - Graph coloring](https://en.wikipedia.org/wiki/Graph_coloring)
- [維基百科 - Four color theorem](https://en.wikipedia.org/wiki/Four_color_theorem)
- [維基百科 - Extremal graph theory](https://en.wikipedia.org/wiki/Extremal_graph_theory)
- [台師大演算法筆記 - complete graph](https://web.ntnu.edu.tw/~algo/CompleteGraph.html)
- [台師大演算法筆記 - graph](https://web.ntnu.edu.tw/~algo/Graph2.html)
- [線代啟示錄 - 線性代數在圖論的應用(一)：鄰接矩陣](https://ccjou.wordpress.com/2010/01/18/%E7%B7%9A%E6%80%A7%E4%BB%A3%E6%95%B8%E5%9C%A8%E5%9C%96%E8%AB%96%E7%9A%84%E6%87%89%E7%94%A8-%E4%B8%80%EF%BC%9A%E9%84%B0%E6%8E%A5%E7%9F%A9%E9%99%A3/)
- [線代啟示錄 - 線性代數在圖論的應用 (三)：拉普拉斯矩陣](https://ccjou.wordpress.com/2014/12/04/%E7%B7%9A%E6%80%A7%E4%BB%A3%E6%95%B8%E5%9C%A8%E5%9C%96%E8%AB%96%E7%9A%84%E6%87%89%E7%94%A8-%E4%B8%89%EF%BC%9A%E6%8B%89%E6%99%AE%E6%8B%89%E6%96%AF%E7%9F%A9%E9%99%A3/)
- [NYCU OCW - Lec09 組合學導論 拉姆齊定理 1 Ramsey Theory 1](https://www.youtube.com/watch?v=NVsjhoQ3FSw)
- [MIT 18.217 Graph Theory and Additive Combinatorics, Fall 2019](https://youtube.com/playlist?list=PLUl4u3cNGP62qauV_CpT1zKaGG_Vj5igX&si=WGXAzlljPJehbgab)

----

>上一篇: [基礎圖論 (二)](https://hackmd.io/@ShanC/basic-graph-theory-2)
>下一篇: [基礎圖論 (四)](https://hackmd.io/@ShanC/basic-graph-theory-4)

> [ShanC 程式競賽筆記](https://hackmd.io/@ShanC/B1ouGxqcC)
> 作者: ShanC
> 更新: 2025/7/21