[離散數學] 圖論


這里是離散數學圖論的學習筆記,然而由於學校的關系跳過了集合論、序偶、二元關系等一些可能運用到的基礎知識,所以可能數學符號和表述方面會有一些問題 qaq

\[\newcommand{\lvert}{\left\vert} \newcommand{\rvert}{\right\vert} \newcommand{\vV}{\lvert V \rvert} \newcommand{\vE}{\lvert E \rvert} \newcommand{\vF}{\lvert F \rvert} \newcommand{\R}{\Rightarrow} \rule{750px}{1px} \]

圖是一個三元組 \(\langle V(G), E(G), \varphi_G \rangle\)(或四元組 \(\langle V(G), E(G), \varphi_G, \psi_G \rangle\)),其中 \(V(G)\) 為圖的結點集,\(E(G)\) 為圖的邊集,\(\varphi_G\)\(E(G)\) 中元素到序偶的函數,\(\psi_G\)\(E(G)\) 中的元素到任意字符集 \(S\) 的函數。我們通常將圖簡記為 \(G = \langle V, E \rangle\), 我們要求 \(V\) 為非空集合。

現在給出一些定義:如果圖中所有邊都用有序偶 \(\langle v_i, v_j \rangle\) 表示,則稱其為有向圖,如果所有邊都用無序偶 \((v_i, v_j)\) 表示,則稱其為無向圖。如果既有無序偶又有有序偶的圖稱為混合圖

只有孤立結點的圖為零圖,只有單個結點的零圖稱為平凡圖(trivial !)

如果一條邊在 \(V\) 中出現多次,則稱這些邊為平行邊,出現的次數稱為這條邊的重數。如果一條邊的起點和終點(兩個端點)相同,則我們稱這條邊為回路或

我們定義不含平行邊的圖為線圖,不含自回路的線圖稱為簡單圖

與結點 \(u\) 相關聯的邊數為該結點的度數,記作 \(\deg(u)\);其中以結點 \(u\) 為起點的邊數為出度,記作 \(\deg^+(u)\),以結點 \(u\) 為終點的邊數為入度,記作 \(\deg^-(u)\)。我們將圖 \(G\) 中最小的度數稱為最小度,記作 \(\delta(G).\)

我們顯然有:

\[\begin{align} & \deg(u) = \deg^+(u) + \deg^-(u) \tag{1} \\ & \sum_{u \in V} \deg(u) = 2 \vE \tag{2} \\ & \sum_{u \in V} \deg^+(u) = \sum_{u \in V} \deg^-(u) = \vE \tag{3} \end{align} \]

有了這些結論,注意到 \((2)\) 式表明任何圖中所有結點度數之和為偶數,我們容易得到一個推論,任何圖中,奇數度數的結點一定有偶數個。

我們給出完全圖的概念,如果簡單圖 \(G = \langle V, E \rangle\) 中,如果每一對點都有邊將其相連,則該圖稱為完全圖\(n\) 個點的完全圖記作 \(K_n.\) 顯然,\(K_n\)\(\dbinom{n}{2}\) 條邊。如果圖中每個結點的度數均為 \(k\),我們將此圖稱為 \(k\)正則圖,顯然 \(n\) 個點的完全圖是 \(n - 1\) 次正則圖。

如果給定一個圖 \(G\),由圖 \(G\) 中所有結點和所有能使 \(G\) 變成一個完全圖所需添加的邊構成的圖被稱為絕對補圖,記作 \(\overline{G}\)

設圖 \(G = \langle V, E \rangle, G' = \langle V', E' \rangle\),其中 \(V' \subseteq V, E' \subseteq E\),則稱 \(G'\)\(G\) 的子圖,記作 \(G' \subseteq G\)。如果 \(E' \subseteq E, V = V'\),則 \(G'\) 稱為圖 \(G\)生成子圖,如果有 \(V' \subseteq V\),而 \(E'\) 包括了原圖中兩個端點都在 \(V'\) 內的所有邊,則稱 \(G'\) 為由 \(V'\) 導出子圖。如果圖 \(G'' = \langle V'', E'' \rangle\) 使得 \(E'' = E - E'\)\(V''\) 中僅包含 \(E''\) 中的邊關聯的結點,則圖 \(G''\) 稱為 \(G'\) 相對於 \(G\) 的補圖。

設圖 \(G = \langle V, E \rangle\) 和圖 \(G' = \langle V', E' \rangle\),如果存在雙射 \(f:V \rightarrow V'\),使得 \(\forall e = (v_i, v_j) \in E\)(或 \(\langle v_i, v_j \rangle \in E\)),當且僅當 \(\exists e' = (f(v_i), f(v_j)) \in E'\)(或 \(\langle f(v_i), f(v_j) \rangle \in E'\) ),則稱 \(G\)\(G'\) 同構。記作 \(G \simeq G'\)

給定圖 \(G = \langle V, E \rangle, v_0, v_1, \cdots, v_n \in V, e_1, e_2, \cdots, e_n \in E\),其中 \(e_i\) 為關聯 \(v_{i - 1}\)\(v_i\) 的邊,則稱由結點和邊交替組成的序列 \(v_0e_1v_1e_2 \cdots e_nv_n\) 稱為圖中的連接 \(v_0, v_n\) 的一條。其中 \(v_0, v_n\) 分別稱為路的起點和終點,邊的數目 \(n\) 稱為路的長度,當 \(v_0 = v_n\) 時,則稱為回路

如果一條路經過的邊互不相同,則這條路稱作;如果一條路經過的結點互不相同,則這條路稱作通路;如果一條路僅有起點和終點相同,則這條路稱作

如果在無向圖 \(G = \langle V, E \rangle\) 中,對於兩個在圖中的結點 \(v_i, v_j\),存在一條 \(v_i\)\(v_j\) 的路。則我們稱兩個結點 \(v_i, v_j\)連通的。由鴿巢原理,我們可以知道在有 \(n\) 個點的圖中,兩個點如果聯通,則這兩個點之間一定存在一條長度小於 \(n\) 的通路。

如果一個圖中任意兩個結點均連通,則這個圖為連通圖。對於一個圖的結點集,我們總能找到對其的一個划分,\(V_1, V_2, \cdots, V_k\),在這些子集中,屬於同一個集合的結點連通,不屬於同一個集合的結點不連通,則我們稱這些子集均為圖的一個連通分支,一個圖 \(G\) 中連通分支的個數我們記作 \(W(G)\)

對於一個無向連通圖 \(G = \langle V, E \rangle\),如果 \(V' \subseteq V\),刪去圖中 \(V'\) 內的所有點,圖不再連通。而刪去 \(V'\) 任意真子集內的所有結點,圖仍然連通,則稱 \(V'\) 稱為圖的一個點割集。如果僅由一個結點就構成了圖的一個點割集,則這個結點稱為割點。定義一個圖的點連通度\(k(G) = \min\{\lvert V' \rvert \mid V' \text{為 } G \text{ 的點割集}\}\)。顯然完全圖 \(K_p\) 的點連通度為 \(p - 1\)

一個比較顯然的結論是,一個點 \(u\) 是割點當且僅當存在一組點 \(v, w\),使得連接這兩個點的所有路中都經過 \(u\)

類似的,對於一個無向連通圖 \(G = \langle V, E \rangle\),如果 \(E' \subseteq E\),刪去圖中 \(E'\) 內的所有邊及其關聯的結點,圖不再連通。而刪去 \(E'\) 中任意真子集內的所有邊及其相關聯的結點,圖仍然連通,則稱 \(E'\) 是一個邊割集。如果僅由一條邊就構成了圖的一個邊割集,則稱這條邊稱為圖的割邊(橋)。定義一個圖的邊連通度\(\lambda(G) = \min\{\lvert E' \rvert \mid E' \text{為 } G \text{ 的邊割集}\}\)

我們可以通過感性理解得出 \(k(G) \le \lambda(G) \le \delta(G).\)

我們上面都是對於無向圖給出了一些連通的定義,我們現在給出一些有向圖關於連通的定義。如果對於兩個在有向圖的結點 \(v_i, v_j\),存在一條 \(v_i\)\(v_j\) 的一條路,則稱從 \(v_i\) 可達 \(v_j\)

如果一個有向簡單圖中任意兩個點都互相可達,則稱此圖為強連通圖。如果一個有向簡單圖中任意的一對結點至少從一個結點到另一個結點可達,則稱此圖為單側連通圖。如果一個有向簡單圖中所有邊去除方向,變成一個無向圖,若這個無向圖為連通圖,則稱這個圖為弱連通圖

這三個定義顯然有這樣的關系:強連通圖 \(\Rightarrow\) 單側連通圖 \(\Rightarrow\) 弱連通圖。

我們根據定義,可以得出強連通圖的一個充要條件,即存在一個回路,使得這個回路經過每個結點至少一次。

如果一個簡單有向圖中,具有強連通性質的最大子圖,稱為最大強連通子圖(強分圖),同理也有最大單側連通子圖(單側分圖)最大弱連通分圖(弱分圖)。需要說明的是,這里的最大是指選定的子圖如果再添加在原圖而不在此子圖中的任意一個結點(當然和這個結點相關聯且另一端點在原子圖中的邊也會被加進來),都不能使這個子圖仍然保持它原有的性質。而並不是結點數最多的意思。

現在我們來證明一個重要的結論:

對於有向簡單圖 \(G = \langle V, E \rangle\),其每一個結點恰好僅位於一個強分圖中。

\(u\)\(V\) 中的任意結點,則設集合 \(S\) 為與 \(u\) 相互可達的所有結點組成的集合。顯然由 \(S\) 集合導出的子圖為一個強分圖,故 \(u\) 至少在一個強分圖中。

而若假設 \(u\) 在兩個不同的強分圖 \(G_1, G_2\) 中,這兩個不同的強分圖的結點集合分別為 \(V_1, V_2\)。則由強分圖的性質,\(V_1, V_2\) 中的結點均與 \(u\) 相互可達,則可知 \(V_1, V_2\) 中的任意一組結點均可通過 \(u\) 相互可達,故由 \(V_1 \cup V_2\) 所導出的子圖也擁有強連通性質。這與 \(G_1, G_2\) 為強分圖矛盾,所以 \(u\) 只能在一個強分圖中。

圖可以用各種矩陣表示,其中有三種比較重要,鄰接矩陣,可達性矩陣,關聯矩陣。

一個 \(n\) 個結點的圖的鄰接矩陣 \(A\)\(n\) 階方陣,其值為:

\[A_{ij} = \begin{cases} 1 & \text{存在一條由 } v_i \text{ 到 } v_j \text{ 的邊} \\ 0 & \text{不存在一條由 } v_i \text{ 到 } v_j \text{ 的邊} \end{cases} \]

顯然對應無向簡單圖,我們有:

\[\deg(v_i) = \sum_{j = 1}^n A_{ij} = \sum_{j = 1}^n A_{ji} \]

對於有向簡單圖,我們有:

\[\deg^+(v_i) = \sum_{j = 1}^n A_{ij}, \deg^-(v_i) = \sum_{j = 1}^n A_{ji} \\ \deg(v_i) = \deg^+(v_i) + \deg^-(v_i) = \sum_{j = 1}^n A_{ij} + \sum_{j = 1}^n A_{ji} \]

我們可以發現鄰接矩陣的一些性質,對於一個圖的鄰接矩陣 \(A\),其 \(k\) 次方 \(A^k\) 中第 \(i\) 行第 \(j\) 列的意義為從 \(v_i\)\(v_j\) 有幾條長度為 \(k\) 的路。將其視作動態規划,我們可以很容易的理解這一過程。

一個 \(n\) 個結點的圖的可達性矩陣 \(P\)\(n\) 階方陣,其值為:

\[P_{ij} = \begin{cases} 1 & \text{由 } v_i \text{ 到 } v_j \text{ 至少存在一條路} \\ 0 & \text{由 } v_i \text{ 到 } v_j \text{ 不存在一條路} \end{cases} \]

由上面的結論可知 \(P\) 即為 \(\sum_{i = 1}^{n} A^i\) 這個矩陣中所有非 0 值的位置換成 1 所形成的矩陣。

當然我們發現我們只關心 \(A^i\) 中是否有值,故更簡潔的,我們有 \(P = \bigvee_{i = 1}^n A^{(i)}\),對於這里矩陣乘法中的乘和加替換為了布爾乘(邏輯與)和布爾加(邏輯或)。

一個有 \(n\) 個結點,\(m\) 條邊的無向圖的完全關聯矩陣 \(M\) 為一個 \(n \times m\) 矩陣,其值為:

\[M_{ij} = \begin{cases} 1 & v_i \text{ 關聯 } e_j \\ 0 & v_i \text{ 不關聯 } e_j \end{cases} \]

完全關聯矩陣有一些性質:

  • 如果不是自回路每一列有兩個 1;
  • 每一行之和為對應結點的度數;
  • 如果一行的值全為 0,則該結點為孤立結點;
  • 每個平行邊其對應兩列相同;
  • 兩個同構的圖的完全關聯矩陣僅可能有行序,列序的差別。

如果為有向圖則:

\[M_{ij} = \begin{cases} 1 & v_i \text{ 為 } e_j \text{ 起點} \\ -1 & v_i \text{ 為 } e_j \text{ 終點} \\ 0 & v_i \text{ 不關聯 } e_j \end{cases} \]

一個有向強連通圖 \(G\),其可達性矩陣 \(P\) 為全 1 矩陣;一個有向單側連通圖 \(G\) 其可達性矩陣滿足 \(P \or P^\mathrm{T}\) 為全 1 矩陣;一個有向弱連通圖 \(G\),其可達性矩陣滿足以 \(P \or P^\mathrm{T}\) 為鄰接矩陣的無向圖的可達性矩陣為全 1 矩陣。

我們着手研究一些圖的特殊性質,我們定義如果無向圖中存在一條路,使得其通過各條邊恰好一次,則稱這條路為歐拉路。如果這條路還是一個回路時,則稱這條路為歐拉回路,有歐拉回路的圖稱為歐拉圖

這里要給出一個重要的判定條件(我們默認圖中沒有孤立結點):

一個簡單無向圖中存在歐拉路的充要條件是這個圖是連通的且有 0 個或 2 個奇度數結點。

考慮充分性和必要性分開證明。並且約定圖中的點數為 \(n\),邊數為 \(m\)

  • 充分性

考慮圖中的一條歐拉路為 \(v_0 e_1 v_1 e_2 \cdots v_{m - 1} e_m v_m\),由於圖中沒有孤立結點且這條路包含所有邊,故這條路包含了圖中的所有結點。故圖是連通的。而我們發現由於 \(e_i\,(i \in [1, m])\) 各不相同所以如果我們進入了 \(v_i\,(i \in [1, m - 1])\),必然會從一條之前沒有遍歷的邊出來。所以可知對於 \(v_i\,(i \in [1, m - 1])\) 它們全為偶度數結點。而對於 \(v_0, v_m\),由於 \(e_i\,(i \in [1, m])\) 包括了所有邊,則當 \(v_0 \ne v_m\) 時,它們只有一個度數,當 \(v_0 = v_m\) 時,這個結點也是偶度數結點。

  • 必要性

考慮 \(G\) 是一個連通的無向簡單圖,如果其沒有奇度數結點則從任意結點出發,如果其有兩個奇度數結點則從任意一個奇度數結點出發,開始構造一條歐拉路。

我們出發后進入一個偶度數結點,必然可以從一條未遍歷的邊出來,由於圖 \(G\) 是連通的,如果有兩個奇度數結點,則一定可以在不同於起點的奇度數結點停下形成一條跡 \(L_1\)。而全為偶數結點,則可以形成一條閉跡 \(L_1'\)

若此時 \(L_1\)\(L_1'\))包含了所有邊,則我們就已經構造出來一條歐拉路。否則,考慮到除起點和終點外的點,其度數必為偶數,我們可以刪去 \(L_1\)\(L_1'\)) 中所有邊后,再刪去剩下的孤立結點,得到子圖 \(G'\),由於原圖連通,則我們必然能在 \(G'\) 中找到一點使得其也在 \(L_1\)\(L_1'\)) 中,顯然我們可以再通過同樣方法在 \(G'\) 中構造一條從該點出發的閉跡 \(L_2\),然后我們將 \(L_1\)\(L_1'\))和 \(L_2\) 合並為 \(L_3\),如果 \(L_3\) 包含了所有 邊則構造完畢,否則我們可以繼續像剛才一樣,找子圖構建一條新的回路,最終總能將所有邊包括在內,即我們總能找到一條歐拉路。

這個證明其實比較顯然,但是在這里列出來的原因是,發現如果我們只說明 \(L_1\)\(L_1'\) 是不足以結束證明的,必須要說明其可歸約性。有時我們不能立刻構造出最優解,但我們可以通過證明其可歸約性,從而說明運用這種方法一定能構造出最優解。簡單來說就是證明一個算法保持循環不變式的過程(當然,前提可以認為是算法初始化的過程,結論也可以認為是算法終止后得到的運行結果所具有的性質)。

我們還可以由此推出存在歐拉回路的充要條件是所以的結點度數均為偶數。

類似地,我們將有向圖中通過各條邊恰好一次的路稱為單向歐拉路,如果這條路為回路,則其為單向歐拉回路。我們也可以類比其得出單向歐拉路的充要條件,即每個結點出度等於入度或者存在一個結點出度比入度小 1,且另一個結點入度比出度小 1,且前一個條件也是單向歐拉回路存在的充要條件。

我們定義一個圖如果存在一條路使得其可以不重復的經過圖中所有結點,則稱這條路為漢密爾頓路,若這條路為回路,則這條路為漢密爾頓回路。有哈密爾頓回路的圖稱為漢密爾頓圖

我們給出一個簡單圖為漢密爾頓圖為充分條件:當圖中任意兩個結點的度數之和不少於 \(n - 1\),則存在一條漢密爾頓路,若不少於 \(n\) 則存在一條漢密爾頓回路。

其一個必要條件為,如果圖 \(G = \langle V, E \rangle\) 中有一條漢密爾頓回路,則對於任意一個點集 \(S \subseteq V\),都有 \(W(G - S) \le \lvert S \rvert\)

我們給出一個似乎不是特別好用的充要條件,在這之前我們介紹閉包的概念,對於圖 \(G\),我們每一次選擇一對結點度數之和大於圖中結點數 \(n\) 的結點,讓它們之間連邊。直到無法操作,這時這個圖就叫做圖 \(G\) 的閉包,記作 \(C(G)\)

有了閉包的概念,我們就可以給出這個充要條件:一個圖是漢密爾頓圖,當且僅當其閉包為漢密爾頓圖。

看來我們學圖論是從廣度方面學習的,我們介紹平面圖的相關知識,我們定義一個無向圖如果存在另一個和它同構的圖,且這個圖的邊沒有在平面上相交,則這個圖就為平面圖。

我們將一個由圖中邊所圍成的不含有邊或結點的區域,稱為圖中的一個。圍成一個面的回路的長度,被稱為面的次數。我們記一個平面圖有 \(k\) 個面 \(F_1, F_2, \cdots, F_k\),且記其的次數為 \(D(r_i)\),則有:

\[\sum_{i = 1}^k D(r_i) = 2 \vE \]

對於平面圖,我們有歐拉公式

\[\vV - \vE + \vF = 2 \]

更一般的,如果其有 \(p\) 個連通分支,我們有:

\[\vV - \vE + \vF = 1 + p \]

有歐拉公式,我們可以引出一個推論:

對於一個連通的平面圖 \(G = \langle V, E \rangle\),若對於圖中任意一個面 \(r_i\),其次數 \(D(r_i)\ge k\),則有 \((k - 2) \vE \le k (\vV - 2)\) 成立。

考慮各面次數之和等於邊數的 2 倍,且我們有 \(D(r_i) \ge k\),則有 \(k \vF \le 2 \vE\),即 \(\vF \le \frac{2} {k} \vE\)。而根據歐拉公式 \(\vV - \vE + \vF = 2\),我們可以知道 \(\vF = 2 - \vV + \vE \le \frac{2} {k} \vE\),則有 \((k - 2) \vE \le k (\vV - 2)\) 得證。

根據這個推論,我們還注意到對於一個連通的平面圖,當 \(\vV = 3, \vE = 2\)\(\vV = 3, \vE = 3\) 時,我們都有 \(\vE \le 3 (\vV - 2)\),而當 \(\vV > 3\) 時,由於圖連通,我們有 \(\vE \ge \vV - 1 \ge 3\),而我們進一步發現,此時對於每個面來說,其次數必然不少於 3,代入推論也得到 \(\vE \le 3(\vV - 2)\),此時我們就又得到了一個結論:對於一個連通的平面圖,當 \(\vV \ge 3\) 時,有 \(\vE \le 3(\vV - 2).\)

以上兩個結論給出了平面圖邊數的一個上界且可以幫助我們判定一個圖是否為平面圖。

我們介紹庫拉托夫斯基定理,我們首先考慮在圖上,插入或刪除一個度數為 2 的結點,不改變這個圖的平面性。所以我們定義如果兩個在插入和刪除若干二度結點使得這兩個圖同構,則稱這兩個圖二度同構。庫拉托夫斯基定理則為:一個圖沒有和 \(K_5, K_{3, 3}\) 二度同構的子圖,當且僅當這個圖為平面圖。證明過程比較長(並且似乎在網上似乎也找不到可以被筆者理解(指目前只找到一篇法語的論文)的證明)

我們定義一個平面圖 \(G = \langle V, E \rangle\) 且擁有 \(k\) 個面 \(F_1, F_2, \cdots, F_k\),若有一個圖 \(G^* = \langle V^*, E^* \rangle\),其滿足:

  • 對於圖 \(G\) 的任意一個面 \(F_i\),內部有且僅有一個結點 \(v^* \in V^*\)
  • 對於圖 \(G\) 中面 \(F_i, F_j\) 的公共邊界 \(e_k\),在 \(G^*\) 中存在且僅存在一條邊 \(e^*_k = (v^*_i, v^*_j)\),使得 \(e_k\)\(e^*_k\) 相交;
  • 當且僅當 \(e_k\) 僅為一個面 \(F_i\) 的邊界時,存在一個環 \(e_k^*\) 使得其與 \(e_k\) 相交。

如果圖 \(G\) 的對偶圖與其本身同構,則稱圖 \(G\)自對偶圖

我們可以知道對於一個地圖的着色問題,我們可以將其轉化為其對偶圖的着色問題,我們考慮定義圖 \(G\)正常着色為圖中結點的一組染色方案,其滿足對於圖中任意一組相鄰接的結點的顏色不同。如果圖 \(G\) 存在一個使用 \(k\) 種顏色的正常着色,則我們稱圖 \(G\)\(\textit{k-}\)可着色的。我們將圖 \(G\) 正常着色需要最小的顏色數定義為圖 \(G\)着色數,記作 \(\chi(G).\)

由於圖的 \(\textit{k-}\)着色問題為 NP 問題,所以目前沒有多項式復雜度的算法。我們現在給出一種可以給出一種圖的正常着色的算法(不一定用的是最少的顏色) —— 韋爾奇 \(\cdot\) 鮑威爾法:

  1. 將圖 \(G\) 中的結點按照遞減次序排列;
  2. 用第一種顏色對一號結點着色,並且按排列次序,對前面着色點不鄰接的每一點着上同樣的顏色;
  3. 用下一種顏色重復 2. 的操作,直到所有結點均被染色為止。

當然對於一些特殊的圖,比如 \(n\) 個結點的完全圖 \(K_n\),我們有 \(\chi(K_n) = n.\)

下面,我們來介紹一種特殊的圖,,其定義是不存在回路的無向連通圖。當然我們可以證明,包括這個定義在內的以下 6 個定義是等價的:

  1. 無回路的無向連通圖;
  2. 無回路且滿足 \(\vE = \vV - 1\)
  3. 連通且滿足 \(\vE = \vV - 1\)
  4. 無回路,但在增加任意一條邊都會產生一條新的回路;
  5. 連通,但刪去任意一條邊都會使其不再連通;
  6. 任意兩個結點都有一條且僅有一條路。

證明過於冗長,這里只提供一種證明思路為 \(1. \R 2. \R 3. \R 4. \R 5. \R 6. \R 1.\)

我們定義樹中只有一個度的結點稱為樹葉(葉子結點),我們容易知道對於一棵樹,其至少有兩片樹葉。

我們給出生成樹的定義,如果對於一個圖的生成子圖,其為一棵樹,則我們稱這個子圖為這張圖的生成樹。且容易證明連通無向圖總是存在一棵生成樹。

我們將生成樹相對於原圖的補圖稱為生成樹的,顯然圖中的任意一條回路必然存在一條邊在一個生成樹的補中。而對於圖中的一個邊割集,其和任何一個生成樹至少有一條公共邊。

由於不想過多介紹之前已經學過的 kruskal 求最小生成樹的算法,所以這里直接跳(tou)過(lan)。

我們在前面都討論的是無向圖中樹的概念,我們現在考慮有向圖中樹的概念,我們將一個有向圖中的邊,如果去掉方向其形成了一個無向圖的樹,則我們稱這個圖為有向樹。若其中恰好僅有一個結點入度為 0, 則稱其為根樹(外向樹),若其中恰有一個結點出度為 0,則稱其為內向樹。其中入度(出度)為 0 的結點稱為根結點,相反的,出度(入度)為 0 的結點稱為葉結點,除葉結點外其他所有結點稱為內點或分枝點

有根樹中任一結點的層次定義為根結點到該結點通路的長度。如果 \(u\)\(v\) 在同一條根到一個葉子的通路上時,且 \(u\) 的層次更大,則稱 \(u\)\(v\)后代結點或 \(v\)\(u\)祖先結點。若 \(u\)\(v\) 之間有一條邊直接相連,則稱 \(u\)\(v\)子結點\(v\)\(u\)父結點,如果兩個結點由相同的父結點,則稱這兩個結點互為兄弟結點

對於一個有根數,如果所有分枝點都有不超過 \(k\) 個子結點,則稱這棵樹為 \(k\) 叉樹,如果所有分枝點的子結點個數均為 \(k\),則稱這棵樹為滿 \(k\) 叉樹。我們不難發現以下性質:

在滿 \(k\) 叉樹中,若樹葉數為 \(t\),分支點個數為 \(j\),則有 \((k - 1)j = t - 1\)

證:由有向圖所有結點入度之和等於邊數可知,\(j + t - 1 = k \times j\)。移項可得結論。

為了方便,我們可以將一棵 \(k\,(k > 2)\) 叉樹改成二叉樹。我們改造的方法為,每個分枝點只保留一個最左邊的子結點與其連通。再從最左邊的子結點開始,向右將其兄弟結點用有向邊連接,且依次作為一棵右子樹的根。

我們稱一棵二叉樹帶權是指其所有葉子結點都有權值 \(w_i\),我們定義根到 \(i\) 號葉子結點的通路長度為 \(L_i\),則一棵帶權二叉樹 \(T\) 的整體權值為 \(w(T) = \sum w_i L_i\)。對於葉子結點帶權相同的二叉樹,我們將權最小的一棵二叉樹稱為最優二叉樹

對於給定的一組葉子的權值 \(\{w_n\}\),我們考慮如何構造這組權值組成的最優二叉樹。為了方便敘述,我們不妨設 \(w_i \le w_{i + 1}\,(i \in [1, n - 1])\),我們需要考慮一個貪心策略。我們通過交換論證,不難發現一定存在一種構造方式使得帶權為 \(w_1, w_2\) 的樹葉一定是兄弟結點,且以這兩個樹葉為子結點的分枝點一定為在二叉樹中層次最大的分枝點。並且我們還可以知道對於一棵由 \(\{w_n\}\) 所構成的最優的二叉樹,我們將 \(w_1, w_2\) 兩個結點所在的葉子結點合並成一個權為 \(w_1 + w_2\) 的葉子結點的樹,這顆新的二叉樹仍為最優二叉樹。

下面介紹二叉樹的前綴碼方面的應用,我們定義如果一個由 01 串組成的集合,且這個集合中任意一個 01 串的前綴(除了其本身)均不在這個集合中,則稱這個集合為一個前綴碼。容易發現如果我們構造某個字符集到前綴碼一個雙射,則用前綴碼表示這個字符集組成的串可以避免二義性,且比傳統計數表示節省了二進制位。

如果對於字典樹的知識有了解,則很容易知道前綴碼組成的集合到二叉樹組成的集合的映射為一個雙射。

由這種對應關系和通過反證法構造可知,給定前綴碼所構成的二叉樹的所有分枝結點度數為 2 時,那么這個前綴碼才可以對任意一個 01 序列進行譯碼。


至此,圖論的筆記就全部完結了。這一章對於我來說沒有太多新的內容(這就是你在筆記上偷懶的理由?),主要是定義和證明的嚴謹化和規范化。當然也拓寬了視野,讓我感受到除了算法競賽中所講的圖論相關的算法,還有許多理論性的的東西等待我們去探索。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM