2207 字
11 分钟
图论笔记——树
图论研究的树
- 树状图是一种数据结构,它是由 个结点组成一个具有层次关系的集合。
- 树状图被称为树(tree)是因为图形的通常画法像一棵树,一般是倒过来的(即树根在上,树叶在下)。
树的定义
- 树: 不含回路的连通图,用T表示
- 树必不含多重边和自环,故是简单图
- 边称为 树枝
- 度为1的结点称为 树叶(leaf) 或 悬挂点
- 度大于等于2的结点称为 分叉点
- 林: 不含回路的图
- 林可能不是连通的
- 林的每个连通支都是树
割边
- 定义: 若 比G的连通支数多,则称e是G的割边。
- 删去 ,则u,v分属于不同的连通支
- 定理1: 在图G中, 是割边当且仅当e不属于任何回路。
- 证明:
- 若e属于某回路,则 中仍有从u到v的道路,故u,v属于同一连通支,与e是割边矛盾。
- 若 不是割边,则 中与G的连通支数一样,故u, v属于同一连通支,有从u到v的道路,连通e即构成回路,矛盾。
- 证明:
- 显然,树中的边都是割边。
树的等价定义
-
定理2: 设T是结点数 的树,则下列性质互相等价
- (1) T连通且无回路
- (2) T的任意两结点间有唯一道路
- (3) T有 条边且无回路
- (4) T连通且有 条边
- (5) T连通且每条边都是割边(极小连通)
- (6) T无回路,但任意增加一边后恰有一个回路(极大无回)
-
树是边数最少的连通图,也是边数最多的无回路图。
-
满足连通,无回路,有n-1条边之任意两条者是树。
-
证明 (1) -> (2):
- 树T是连通的,T中任意两结点u和v间存在路径。
- 如果两结点u和v间有存在的路径不唯一,则树T中必然会有回路。
-
证明 (2) -> (3):
- 任意两结点间存在唯一道路,可知图T中无回路。
- 证明T中边数 。
- 当 时,命题成立。
- 设当 时,命题成立,即T中的边数为 。
- 当 时,任选T中的一条边e,T-e有两个连通分支, 其中结点数为 和 。其中的边数分别为 和 。
- 所以当 时, 。
-
证明 (3) -> (4):
- 证明T连通: 假设T中存在s个连通分支,每个连通分支都是树, 所以T中的边m有:
- 已知 , 所以 , 可知 ,即T是连通的。
-
证明 (4) -> (5):
- 证明极小连通,即T中任何一条边都是割边。
- 任选T中的一条边e, T-e中有n个结点和 条边。
- 一个有 个结点, 条边的图肯定不连通 (因为连通图至少 条边), 因此e是割边。
-
证明 (5) -> (6):
- T是极小连通, T中不存在回路 (若有回路, 回路上的边都不是割边, 矛盾), 且任意两结点u和v间存在唯一路径 。
- 则有 是T中增加边(u,v)后的唯一回路。
-
证明 (6) -> (1):
- 证明T连通。
- T中任意两结点u和v, 若它们不相邻, 有唯一回路C。
- 令 , 则有 是两结点u和v间存在的一条路径。
- 若T不连通,则存在两点u, v在不同连通支,它们之间没有路径。增加边(u,v)后,(u,v)是割边,不会形成回路。这与(6)中“任意增加一边后恰有一个回路”矛盾。
- 所以可知T连通。
树的其它性质
- 设树T的结点数 ,则T中必有树叶
- (1) 证法1: 若各结点度都 ,则总度数 。而 。 即 矛盾。
- (2) 证法2: 考虑从任一结点,出发沿边前进,走过的边不重复, (因为无回路)则必止步于某树叶。
- 设树T的结点数 ,则T中至少有两个树叶
- 同上面证法2,考虑从一树叶出发前进,必止步于另一个树叶。
- 若林F有n个结点和k个连通支,则F有 条边。
支撑树
- 定义: 如果T是图G的支撑子图,而且是树,则称T是G的 支撑树 或 生成树。
- 图G有支撑树当且仅当G是连通的。
- 推论: 图G为n结点m条边的无向连通图,则 。
- 若图G本身不是树,则其支撑树不唯一。
- 余树: 图G删掉支撑树T中各边后的子图。
- 记为
- 余树不一定是树。
二叉树
- 根树 (外向树): 设T是有向树,若T中存在 负度为0的结点(根),其余结点负度为1,则称T是 根的外向树,或称根树。
- 二叉树: 除树叶外,其余结点的正度最多为2的外向树称为二叉树。
- 完全二叉树: 如果它们的正度都是2(或0),称为完全二叉树。
- 赋权二叉树: 赋予树叶 一个正实数 。
- 路径长度: 从根 到树叶 的路径 的长度 (即该路径所含边数)。
- 加权路径总长度 (WPL): T的加权路径总长度 。
- 最优二叉树 (最小二叉树): 若给定树叶数目及其权值,可以构造许多赋权二叉树,其中必存在WPL最小的二叉树,这样的树称为最优二叉树。
Huffman 算法
- 目的: 给定n个带权树叶,构造最优二叉树(称为Huffman 树)。
- 算法描述:
- (1) 对n个权值排序,得到 。
- (2) 计算 作为中间结点 的权; 的左子结点是 ,右子结点是 。
- 在权序列中删去 和 ,加入 。
- ,若 ,结束;否则转(1)。
- 算法复杂度:
- 算法的计算复杂度主要取决于步骤(1),n个权值的第一次排序需要进行 次比较。总共进行n-2次迭代,算法的计算复杂性是 。
- 构造过程: 自底向上构造。
- 定理: 由 Huffman 算法得到的二叉树是最优二叉树。
- 权最小的树叶离根最远。
- 权最小的树叶必有兄弟。
最小支撑树问题:Kruskal 算法
- 思想: 不断加入最短边,并保持无回路。
- 算法描述:
- ;
- WHILE AND DO
- BEGIN
- 中最短边;
- ;
- 若 无回路,则 ;
- END
- BEGIN
- IF THEN打印“非连通”
- ELSE 输出最短树 T
- 定理 1: 是赋权连通图 的最短树,当且仅当对任意余树边 中的回路 满足 ,对 .
- 证明 (必要性 ): 若有余树边满足 ,则以e换a得到的树T’比T更短,与T是最短树矛盾。
- 证明 (充分性 ): 对不同于T的支撑树T’,有 , , 中有回路 ; 据已知条件,对 有 , 则易证 。
最小支撑树问题:Prim 算法
- 思想: 初始任选一结点,然后不断加入距离最近的结点。
- 算法描述: (注: PPT中的描述似乎混合了Dijkstra思想,标准Prim如下)
- ; (任选 );
- WHILE DO
- BEGIN
- ;
- ;
- ;
- FOR DO
- END
- 定理3: 设V’是赋权连通图 的结点真子集,e是端点分别属于V’和 的最短边,则G中一定存在包含e的最短树。
- 证明: 令 为一最短树。假设 构成唯一回路。回路包含e和 ,其中 , 。由已知, 。 (即 ) 也是支撑树, 且其权不大于 。故它也是最短树。
- 定理 4: Prim算法可得到赋权连通图G的一棵最短树。
- 最短树性质:
- 最短树不唯一。
- 最小权和唯一。
算法比较
- Kruskal 算法复杂性是 或 。 (或 , p为迭代次数)
- Kruskal 算法的复杂性与迭代次数有关; 图稠密时,迭代次数可能接近边数。
- Prim 算法复杂度 (用邻接矩阵) 或 (用优先队列)。 (上课讲的: )
- Prim 算法只与结点有关,与图的稠密度无关。
- Prim 算法适用于稠密图,Kruskal 算法更适用于稀疏图。
- 最长树问题: 最短改最长。(注:这通常用于寻找关键路径,贪心算法不适用)
部分信息可能已经过时