2207 字
11 分钟
图论笔记——树
2025-10-27
2025-12-01

图论研究的树#

  • 树状图是一种数据结构,它是由 n(n1)n(n\ge1) 个结点组成一个具有层次关系的集合。
  • 树状图被称为树(tree)是因为图形的通常画法像一棵树,一般是倒过来的(即树根在上,树叶在下)。

树的定义#

  • : 不含回路的连通图,用T表示
    • 树必不含多重边和自环,故是简单图
    • 边称为 树枝
    • 度为1的结点称为 树叶(leaf)悬挂点
    • 度大于等于2的结点称为 分叉点
  • : 不含回路的图
    • 林可能不是连通的
    • 林的每个连通支都是树

割边#

  • 定义: 若 G=GeG^{\prime}=G-e 比G的连通支数多,则称e是G的割边。
    • 删去 e=(u,v)e=(u,v),则u,v分属于不同的连通支
  • 定理1: 在图G中, e=(u,v)e=(u,v) 是割边当且仅当e不属于任何回路。
    • 证明:
      • 若e属于某回路,则 G=GeG^{\prime}=G-e 中仍有从u到v的道路,故u,v属于同一连通支,与e是割边矛盾。
      • e=(u,v)e=(u,v) 不是割边,则 G=GeG^{\prime}=G-e 中与G的连通支数一样,故u, v属于同一连通支,有从u到v的道路,连通e即构成回路,矛盾。
  • 显然,树中的边都是割边。

树的等价定义#

  • 定理2: 设T是结点数 n2n\ge2 的树,则下列性质互相等价

    • (1) T连通且无回路
    • (2) T的任意两结点间有唯一道路
    • (3) T有 n1n-1 条边且无回路
    • (4) T连通且有 n1n-1 条边
    • (5) T连通且每条边都是割边(极小连通)
    • (6) T无回路,但任意增加一边后恰有一个回路(极大无回)
  • 树是边数最少的连通图,也是边数最多的无回路图

  • 满足连通,无回路,有n-1条边之任意两条者是树。

  • 证明 (1) -> (2):

    • 树T是连通的,T中任意两结点u和v间存在路径。
    • 如果两结点u和v间有存在的路径不唯一,则树T中必然会有回路。
  • 证明 (2) -> (3):

    • 任意两结点间存在唯一道路,可知图T中无回路。
    • 证明T中边数 m=n1m=n-1
    • n=2n=2 时,命题成立。
    • 设当 nkn\le k 时,命题成立,即T中的边数为 m=k1m=k-1
    • n=k+1n=k+1 时,任选T中的一条边e,T-e有两个连通分支, 其中结点数为 n1n_{1}n2n_{2}。其中的边数分别为 n11n_{1}-1n21n_{2}-1
    • 所以当 n=k+1n=k+1 时, m=(n11)+(n21)+1=(n1+n2)2+1=n1m=(n_{1}-1)+(n_{2}-1)+1 = (n_1+n_2)-2+1 = n-1
  • 证明 (3) -> (4):

    • 证明T连通: 假设T中存在s个连通分支,每个连通分支都是树, 所以T中的边m有:
    • m=m1+m2+...+msm=m_{1}+m_{2}+...+m_{s}
    • =(n11)+(n21)+...+(ns1)=(n_{1}-1)+(n_{2}-1)+...+(n_{s}-1)
    • =(n1+n2+...+ns)s=ns=(n_1+n_2+...+n_s) - s = n-s
    • 已知 m=n1m=n-1, 所以 n1=nsn-1 = n-s, 可知 s=1s=1,即T是连通的。
  • 证明 (4) -> (5):

    • 证明极小连通,即T中任何一条边都是割边。
    • 任选T中的一条边e, T-e中有n个结点和 n2n-2 条边。
    • 一个有 nn 个结点, n2n-2 条边的图肯定不连通 (因为连通图至少 n1n-1 条边), 因此e是割边。
  • 证明 (5) -> (6):

    • T是极小连通, T中不存在回路 (若有回路, 回路上的边都不是割边, 矛盾), 且任意两结点u和v间存在唯一路径 Γ\Gamma
    • 则有 Γ+(u,v)\Gamma+(u,v) 是T中增加边(u,v)后的唯一回路。
  • 证明 (6) -> (1):

    • 证明T连通。
    • T中任意两结点u和v, 若它们不相邻, T+(u,v)T+(u,v) 有唯一回路C。
    • C(u,v)=ΓC-(u,v)=\Gamma, 则有 Γ\Gamma 是两结点u和v间存在的一条路径。
    • 若T不连通,则存在两点u, v在不同连通支,它们之间没有路径。增加边(u,v)后,(u,v)是割边,不会形成回路。这与(6)中“任意增加一边后恰有一个回路”矛盾。
    • 所以可知T连通。

树的其它性质#

  • 设树T的结点数 n2n\ge2,则T中必有树叶
    • (1) 证法1: 若各结点度都 2\ge2,则总度数 d(v)2n\sum d(v) \ge 2n。而 d(v)=2m=2(n1)\sum d(v) = 2m = 2(n-1)2n2(n1)2n \le 2(n-1)2n2n22n \le 2n-2 矛盾。
    • (2) 证法2: 考虑从任一结点,出发沿边前进,走过的边不重复, (因为无回路)则必止步于某树叶。
  • 设树T的结点数 n2n\ge2,则T中至少有两个树叶
    • 同上面证法2,考虑从一树叶出发前进,必止步于另一个树叶。
  • 若林F有n个结点和k个连通支,则F有 nkn-k 条边。

支撑树#

  • 定义: 如果T是图G的支撑子图,而且是树,则称T是G的 支撑树生成树
  • 图G有支撑树当且仅当G是连通的。
  • 推论: 图G为n结点m条边的无向连通图,则 mn1m\ge n-1
  • 若图G本身不是树,则其支撑树不唯一。
  • 余树: 图G删掉支撑树T中各边后的子图。
    • 记为 T=GT\overline{T}=G-T
    • 余树不一定是树

二叉树#

  • 根树 (外向树): 设T是有向树,若T中存在 v0v_0 负度为0的结点(根),其余结点负度为1,则称T是 v0v_{0} 根的外向树,或称根树。
  • 二叉树: 除树叶外,其余结点的正度最多为2的外向树称为二叉树。
  • 完全二叉树: 如果它们的正度都是2(或0),称为完全二叉树。
  • 赋权二叉树: 赋予树叶 viv_{i} 一个正实数 wiw_{i}
  • 路径长度: 从根 v0v_{0} 到树叶 viv_{i} 的路径 P(v0,vi)P(v_{0},v_{i}) 的长度 lil_{i} (即该路径所含边数)。
  • 加权路径总长度 (WPL): T的加权路径总长度 WPL=liwiWPL = \sum l_i w_i
  • 最优二叉树 (最小二叉树): 若给定树叶数目及其权值,可以构造许多赋权二叉树,其中必存在WPL最小的二叉树,这样的树称为最优二叉树。

Huffman 算法#

  • 目的: 给定n个带权树叶,构造最优二叉树(称为Huffman 树)。
  • 算法描述:
    • (1) 对n个权值排序,得到 wi1wi2...winw_{i_{1}}\le w_{i_{2}}\le...\le w_{i_{n}}
    • (2) 计算 wi=wi1+wi2w_{i}=w_{i_{1}}+w_{i_{2}} 作为中间结点 viv_{i} 的权; viv_{i} 的左子结点是 vi1v_{i_{1}},右子结点是 vi2v_{i_{2}}
    • 在权序列中删去 wi1w_{i_{1}}wi2w_{i_{2}},加入 wiw_{i}
    • nn1n\leftarrow n-1,若 n=1n=1,结束;否则转(1)。
  • 算法复杂度:
    • 算法的计算复杂度主要取决于步骤(1),n个权值的第一次排序需要进行 nlognn \log n 次比较。总共进行n-2次迭代,算法的计算复杂性是 O(nlogn)O(n \log n)
  • 构造过程: 自底向上构造。
  • 定理: 由 Huffman 算法得到的二叉树是最优二叉树。
    • 权最小的树叶离根最远。
    • 权最小的树叶必有兄弟。

最小支撑树问题:Kruskal 算法#

  • 思想: 不断加入最短边,并保持无回路。
  • 算法描述:
    • TT\leftarrow\emptyset;
    • WHILE T<n1|T|<n-1 AND EE\ne\emptyset DO
      • BEGIN
        • eEe\leftarrow E 中最短边;
        • EEeE\leftarrow E-e;
        • T+eT+e 无回路,则 TT+eT\leftarrow T+e;
      • END
    • IF T<n1|T|<n-1 THEN打印“非连通”
    • ELSE 输出最短树 T
  • 定理 1: T=(V,E)T=(V,E^{\prime}) 是赋权连通图 G=(V,E)G=(V,E) 的最短树,当且仅当对任意余树边 eEE,E+ee\in E-E^{\prime}, E^{\prime}+e 中的回路 CeC^{e} 满足 w(e)w(a)w(e)\ge w(a),对 aCe,ae\forall a\in C^{e}, a\ne e.
    • 证明 (必要性 \Rightarrow): 若有余树边满足 w(e)<w(a),aCew(e)<w(a), a\in C^{e},则以e换a得到的树T’比T更短,与T是最短树矛盾。
    • 证明 (充分性 \Leftarrow): 对不同于T的支撑树T’,有 TTT^{\prime}-T\ne\emptyset, eTT\forall e\in T^{\prime}-T, T+eT+e 中有回路 CeC^{e}; 据已知条件,对 aCeT\forall a\in C^{e}\cap Tw(e)w(a)w(e)\ge w(a), 则易证 w(T)w(T)w(T^{\prime})\ge w(T)

最小支撑树问题:Prim 算法#

  • 思想: 初始任选一结点,然后不断加入距离最近的结点。
  • 算法描述: (注: PPT中的描述似乎混合了Dijkstra思想,标准Prim如下)
    • TT\leftarrow\emptyset; U{v1}U\leftarrow\{v_{1}\} (任选 v1v_1);
    • WHILE UVU\ne V DO
      • BEGIN
      • w(t,u)=minvVU{w(t,v)}w(t,u) = \min_{v \in V-U}\{w(t,v)\};
      • TT+e(t,u)T \leftarrow T + e(t, u);
      • UU+uU \leftarrow U + u;
      • FOR vVUv \in V-U DO
        • w(t,v)min{w(t,v),w(u,v)}w(t,v) \leftarrow \min\{w(t,v), w(u,v)\}
      • END
  • 定理3: 设V’是赋权连通图 G=(V,E)G=(V,E) 的结点真子集,e是端点分别属于V’和 VVV-V^{\prime} 的最短边,则G中一定存在包含e的最短树。
    • 证明: 令 T0T_{0} 为一最短树。假设 eT0T0+ee\notin T_{0} \Rightarrow T_{0}+e 构成唯一回路。回路包含e和 e=(u,v)T0e^{\prime}=(u,v)\in T_{0},其中 uVu\in V^{\prime}, vVVv\in V-V^{\prime}。由已知, w(e)w(e)w(e)\le w(e^{\prime})T0(e,e)T_{0}\oplus(e,e^{\prime}) (即 T0e+eT_0 - e' + e) 也是支撑树, 且其权不大于 T0T_0。故它也是最短树。
  • 定理 4: Prim算法可得到赋权连通图G的一棵最短树。
  • 最短树性质:
    • 最短树不唯一。
    • 最小权和唯一。

算法比较#

  • Kruskal 算法复杂性是 O(mlogm)O(m \log m)O(mlogn)O(m \log n)。 (或 O(m+plogm)O(m+plogm), p为迭代次数)
  • Kruskal 算法的复杂性与迭代次数有关; 图稠密时,迭代次数可能接近边数。
  • Prim 算法复杂度 O(n2)O(n^{2}) (用邻接矩阵) 或 O(mlogn)O(m \log n) (用优先队列)。 (上课讲的: O(n2)O(n^{2}))
  • Prim 算法只与结点有关,与图的稠密度无关。
  • Prim 算法适用于稠密图,Kruskal 算法更适用于稀疏图
  • 最长树问题: 最短改最长。(注:这通常用于寻找关键路径,贪心算法不适用)
图论笔记——树
https://ababcat927.github.io/posts/图论笔记/图论笔记三/
作者
AbabCat
发布于
2025-10-27
许可协议
MIT

部分信息可能已经过时