图 7.2(b) 中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。...

36
定定 7.5: 定定 G 定定定定定定定定定 V 1 V, 定 G 定 定定定定 V 1 定, 定定定 V(G)-V 1 定定定定定定定定定定定定 G 定 定定定定定定定 , 定定 E(V 1 (V(G)-V 1 )), 定定定 (V 1 , V(G)-V 1 ) 定 |(V 1 , V(G)-V 1 )|=1 定 , (V 1 , V(G)-V 1 ) 定定定定 定定定定定定 定定 7.2(b) 定定 定 {e 1 ,e 2 } 定 {e 1 ,e 2 ,e 3 ,e 4 }定定 定定 ( 定定 ) 定定定定定 , 定定定 定定 一。

Upload: kioko

Post on 21-Jan-2016

80 views

Category:

Documents


0 download

DESCRIPTION

定义 7.5: 设图 G 的顶点非空真子集为 V 1  V, 在 G 中一个端点在 V 1 中 , 另一端点在 V(G)-V 1 中的所有边组成的集合称为 G 的一个断集或称边割 , 记为 E(V 1  (V(G)-V 1 )), 简记为 (V 1 , V(G)-V 1 ) 。 当 |(V 1 , V(G)-V 1 )|=1 时 , (V 1 , V(G)-V 1 ) 中的那条边称为割边或 桥。. 图 7.2(b) 中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 , 反之不一定。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.5: 设图 G 的顶点非空真子集为 V1V, 在 G中一个端点在 V1 中 , 另一端点在 V(G)-V1 中的所有边组成的集合称为 G 的一个断集或称边割 , 记为 E(V1(V(G)-V1)), 简记为 (V1, V(G)-V1) 。

当 |(V1, V(G)-V1)|=1 时 , (V1, V(G)-V1) 中的那条边称为割边或 桥。

图 7.2(b) 中 边集 {e1,e2} 和 {e1,e

2,e3,e4} 都是断集( 边割 ) 。割集是断集 , 反之不一定。

Page 2: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

对于连通图 G(V,E), 删去一个割集 D, 得到两个分支 ,

顶点集分别为 V1 和 V(G)-V1,

割集 D 是 G 中一个端点在 V1 中 , 另一端点在 V(G)-V1 中的边的全体。

如果在连通图 G 中 , 删去一个断集而不是一个割集 , 那么将得到多于两个分支。

Page 3: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

三、割集与回路定理 7.4 :任何一条回路和任何生成树的余树

至少有一条公共边。证明:如果一条回路和一棵生成树的余树没有

公共边 , 则这回路含在该生成树中 , 这是不可能的。

定理 7.5 :任何一个割集和任何生成树至少有一条公共边。

证明:如果一个割集和一棵生成树没有公共边 , 则删去该割集后留下一棵完整的生成树 ,

也就是说 , 删去一个割集后 , 不能将图 G 分为两个分支 , 这与割集的定义相矛盾。

Page 4: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定理 7.6 :任何一个回路和任何一个割集有偶数条公共边。

证明:从连通图 G 中删去一个割集 D 后 , 得到两个顶点子集 V1 和 V2,

考察 G 中任一条回路 C :(1) 如果 C 中所有顶点在 V1( 或 V2) 中 , 则 C

与 D 没有公共边。(2) 如果 C 中顶点既有一些在 V1 中 , 又有一

些在 V2 中 , 先看 D 中任何一边 ,

它的一个端点在 V1 中 , 另一个端点在 V2 中 , 且 G 中除 D 中边以外 , 不再有任何边连接 V

1 与 V2 中的顶点。

Page 5: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.6 :设连通图 G 中给定生成树 T, 对于只包含 T 中一条枝的割集 , 称此割集为关于 T 的基本割集。

在连通图 G 中 , 对于给定的生成树 T, 每一枝恰对应唯一的一个基本割集。

因为从生成树 T 中删去一条枝 , 将 T 分为两棵树 , 它将 G 的顶点集 V 划分为 V1

和 V-V1, 在 G 中这两个顶点集之间的连边 , 便对应这一枝的唯一的基本割集。

Page 6: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

设连通图 G 有 e 条边 , n 个顶点 , 给定的生成树 T 应有 n-1 条枝 , 所以恰有 n-1 个基本割集 , 这些基本割集的全体称为生成树 T 基本割集组。

定义 7.7: 设连通图 G 中给定生成树 T, 在 T 中加一条弦 , 恰产生一条回路 , 称此回路为关于T 的基本回路。

由定理 7.1 的等价定义 (4) , 可知在 T 中加一弦 , 产生唯一的回路。

设连通图 G 有 e 条边 , n 个顶点 , 给定的生成树应有 n-1 条枝 , e-n+1 条弦 , 所以恰有 e-n+1条基本回路 , 这些基本回路的全体称为生成树T 的基本回路组。

例如图 (a) 中给定 T={e1,e4,e5,e6}, 关于 T 的基本割集组 : {e1,e2,e8},{e4,e3,e2,e8},{e5,e3, e2, e7}, {e6,e7}基本回路组 :{e2,e1,e4,e5},{e3, e4, e5},{e7,e5,e6},{e8,e1,e4,}

Page 7: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

7.3 最小生成树定义 7.10: 设 G(V,E,w) 是带权连通简单图 , w

是从 E 到实数集的函数。又设 T 是 G 的一棵生成树 ,T 中所有枝的权之和称为 T 的权 , 记为 W(T) 。具有权 minTW(T) 的生成树称为最小生成树。

这个问题是具有实际意义的。例如 G 的顶点表示城市 , G 的边表示城市间的道路 , 边的权表示对应道路的长度 , 现在沿着道路架设通讯线路 , 将这些城市联系起来 , 要求架设的线路最短 , 这个问题就是求一棵最小生成树的问题

Page 8: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

克鲁斯科尔算法的步骤 , 通俗地说 , 就是先将G 中的边按权从小到大顺序排列 , 再从小到大依次取出每一边作检查。

一开始取权最小的边 {v1,v6} 为 e1, 且 w(e1)=l, 由e1 导出一个部分子图 , 然后依次每取一边加入已得部分子图。

若保持无回路 , 将该边与原有部分子图中边导出一个新的部分子图 ; 若得到回路 , 将该边放弃。

上述过程继续进行 , 直到所有边均检查完 , 得到的部分子图就是所求的一棵最小生成树 ,

如图 (b) 所示 , 这里 e1={v1,v6} 和 e2={v7,v2} 取出后 , 取 e3 为 {v2,v3},;

Page 9: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

若改取 e3 为 {v3,v7}, 可得到另一棵最小生成树

求最小生成树的克鲁斯科尔 (Kruskal) 算法

Page 10: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

克鲁斯科尔算法 : 设 G(V,E,w) 是有 n 个顶点的带权连通简单图。

(1) 选取 G 的一边 e1, 使 w(e1) 最小 , 令 E1={e1},1i 。

(2) 若已选 Ei={e1,e2,,ei}, 那么从 E-Ei 中选取一边 ei+1, 满足 :

1)Ei {e∪ i+1} 的导出子图中不含有回路 ; 同时2)w(ei+1) 为满足 1)E-Ei 中的最小 ;

3) 若 ei+1 存在 , 则令 Ei+1=Ei {e∪ i+1},i+1i, 转 (2);

若 ei+1 不存在 , 则停 , 此时 Ei 导出的子图就是所求的最小生成树 , 记为 T 。

Page 11: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定理 7.8: 克鲁斯科尔算法所得到的图 T是最小生成树。

证明 : 首先由定理 7.1 等价定义 (4)(T 是无回路图 , 且在 T 的任两个不相邻的顶点之间添加一边 , 恰得到一条回路 ) 知 T是 G 的一棵子树。

并由等价定义 (2) 可知边数为 n-1(T 是无回路图 , 且 e=n-1) ,所以为 G 的生成树。

下面证明 T 是最小生成树即可。

Page 12: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

用反证法证明 , 假设 T 不是 G 的最小生成树 , 而 S是 G 的生成树 , 并且 W(S)<W(T) 。

在生成树 T 中有 n-1 条边。按权从小到大的顺序排列为 e1,e2,,ek,,en-1 。若 ek 是不在 S 中的第一条边 , 也就是说 e1,e2,,ek-1

是 S 和 T 的公共边。现在对 S 进行变换 , 在 S 上加边 ek 得到一条回路 ,

记为 C , 在 C 中必有一边 e‘S, 但 e’T, 否则 T 中有回路 , 导致矛盾。

但因为 e1,e2,,ek-1 是 S 和 T 的公共边 , e‘S, 所以 e

1,e2,,ek-1 和 e’ 不构成回路 ,

根据克鲁斯科尔算法知 w(ek)≤w(e')( 否则 T 应选e') 。

Page 13: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

现从 S e∪ k 中删去 e‘, 得到生成树 S’, 由于 w(ek)≤w(e‘), 所以 W(S’)≤W(S), 并且 S‘ 与 T 的公共边比 S 与 T 的公共边多一条

重复上述过程 , 每一步作一次树的变换 , 使总权数减少 ,

最后生成树 S 变换到生成树 T,W(T)≤W(S),

与假设 W(S)<W(T) 相矛盾。

Page 14: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

7.5有根树与二分树

定义 7.11 :有向图在不考虑弧的方向时是一棵树 , 称该有向图为有向树。

显然有向树是弱连通的。现在将讨论一类重要的有向树 , 即有根树 , 定义如下 :

定义 7.12 :若一棵有向树恰有一个顶点的入度为 0 ,其余所有顶点的入度均为 1, 则称该有向树为有根树。入度为 0 的顶点称为有根树的根。出度为 0 的顶点称为有根树的树叶。出度非零的顶点称为分枝点或内点。

Page 15: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

在有根树中 , 从根 v 到其余每个顶点有唯一的一条有向路。这一性质由定义 7.12 即可得出。有根树中还有一些专门术语 , 现在介绍如下 :

定义 7.13 :设 u 是有根树的分枝点 , 若从u 到 w 有一条弧 (u,w), 则称 w 为 u 的儿子 ,或 u 为 w 的父亲。若一个顶点有两个儿子 , 则称它们为兄弟。若从 u 到 z 有一条有向路 , 则称 z 是 u 的子孙 , 或称 u 是 z 的祖辈。从根到某一顶点 v 的路长度称为顶点 v 的层数。从根到树叶的最大层数 , 称为有根树的高。

Page 16: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

如图是有根树 , 顶点标号写在圆圈中。顶点 1 是根 , 顶点 6, 8, 9, 10, 11, 12 都是树叶 , 顶点 1, 2, 3, 4, 5, 7 都是分枝点 , 顶点 1 的层数为 0 , 顶点 2, 3 的层数为 1 , 顶点 4, 5, 6, 7, 8 的层数为 2 , 顶点 9, 10, 11, 12 的层数为 3 。

Page 17: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

有根树的概念非常重要 , 原因在于它描述了一个离散结构的层次关系 , 而层次结构是一种重要的数据结构 , 所以有根树结构在相当广泛的领域中有它的应用。有时只要考虑某一层次上某分枝点为根的局部层次关系 , 因此引入下面的概念 :

定义 7.14 :设 u 是有根树 T 的任一顶点 ,以 u 为根 ,u及其所有子孙所组成的顶点集记为 V',u 到这些子孙的有向路上所有弧组成的弧集记为 E', 称 T 的子图 T'(V',E') 为以 u 为根的子树。

Page 18: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

前面讨论有根树时 , 没有考虑同一分枝点连出的弧的次序 , 例如图 所示的有根树就是这样 , 它们是相同的有根树。但是在计算机科学中的许多具体问题 ( 如编码理论和程序语言等 ) 一定要考虑这种弧的次序。为此 , 现在引进有序树的概念。

Page 19: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.15 :有根树的每个分枝点连出的弧 ( 或者有根树的每一个顶点 ) 从左到右用正整数 1,2,,i,标上标号 , 称该有根树为有序树。

在确定树或画树的方式中 , 这些标号如果清楚的话 , 那么标号可以省略。

如下面 2 个图中的有序树是不同构的 , 对应的有根树却相同 , 即如上图 (a) 、 (b) 所示。

(c) 可表示一个人的长子有三个孩子 , 次子没有孩子 ; (d) 可表示一个人的长子没有孩子 , 而次子有三个孩子 。

Page 20: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.16: 在有序树中 , 每个分枝点 v 至多有 m 个儿子 , 称该有序树为 m 分树。如果每个分枝点恰有 m 个儿子 , 称该有序树为正则 m 分树。

一类重要的 m 分树是二分树和正则二分树。对于二分树 , 一个分枝点的左右两个儿子为根的子树分别称左子树和右子树

在画有序树时 , 如果规定将一个分枝点的儿子放在它下面 , 那么弧的箭头就可以省略 , 因为箭头总是朝下的。如前面例子中的图。

Page 21: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

例 : 算术表达式 a-(b+(c/d)+(e/f)) 可以用图中的二分树来表示。所有运算对象都处于树叶的位置 , 所有运算符处于分枝点的位置。如果将分枝点连出的弧的次序改变一下 , 那么所得到的二分树对应的算术表达式也就改变了。

Page 22: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定理 7.10: 在正则二分树中 , 它的分枝点数 i 和树叶数 t 满足 :i=t-1 。

证明 : 因为分枝点儿子的总数为 2i 等于树的顶点数减 1( 这是因为除了根外每个点都是儿子 ),

而树的顶点可分成两类:分枝点和树叶:即顶点数 =i+t,

因此有 2i=i+t-1,所以 i=t-1 。类似可证在正则 m 分树中有 (m-1)i=t-1 。

Page 23: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定理 7.11 :设 T 是正则二分树 ,I 表示所有分枝点的路长度之总和 ,E 表示所有树叶的路长度之总和 , 则 E=I+2i,其中 i 是分枝点数。

证明:对分枝点数 i 进行归纳证明 , 当 i=1 时 E=2,I=0, 所以 E=I+2i 。

Page 24: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

假设 i=k-1 时结论成立。现考察分枝点数 i=k 的情况 , 设分枝点 v 的

两个儿子是树叶 , 删去 v 连出的边及其儿子 ,v 的路长度为 l,

由归纳假设知 , 在 T' 中 ,E'=I'+2(k-1) 。类似可证在正则 m 分树中有 E=(m-1)I+mi,

具体证明作为习题。

Page 25: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

7.6 最优树考虑远距离通讯中的一个问题 , 一篇英文字母

组成的短文如何从发送端发出信息 , 通过远距离传输送到接收端。

通常的电报是用长度为 5 的 0 和 1 序列来表示英文字母和标点符号的 , 这种长度为 5 的 0 和1 序列组成的集合称为 5 单位编码。

为了传输一篇短文 , 将对应的 0 和 1 序列组成的信息串发送出去以后 , 在接收端就将此信息串划分成长度为 5 的序列 , 这样就得到对应的短文。

Page 26: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

但在一篇短文中每个字母出现的频率是不同的 , 如表所示。

字母 a B c d e f g h i j k l m频率 0. 0356 0. 0139 0. 0279 0. 0378 0. 1304 0. 0289 0. 0199 0. 0528 0. 0627 0. 0013 0. 042 0. 0339 0. 0249

字母 n o p q r s t u V w x y z频率 0. 0707 0. 0797 0. 0199 0. 0012 0. 0677 0. 0607 0. 1045 0. 0249 0. 0092 0. 0149 0. 0017 0. 0199 0. 0008

例如 e,t 的频率要比 j,z 的频率大很多。为了使短文对应的信息串的总长度缩短 , 首先要求出现次数多的字母用较短的 0 和 1 序列表示 , 出现次数少的字母用较长的 0 和 1 序列表示 ;

Page 27: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

其次要求在接收端能从一个信息串中明确地分辨出字母所对应的序列。例如字母 a,b,c,d,e 分别用下列 0 和 1 序列表示 , 对应关系如下 :

a b c d e00 110 010 10 01把集合 {00,110,010,10,01}叫做码。如果接收端收到信息串是 010010, 这时分辨不清发送来的是 ead还是 cc, 这是因为 e 对应的序列是 c 对应序列的前缀。

为了避免此情况的发生 , 只要将 c 对应的序列改为 111, 那么才能确定送来的是 ead 。

集合 {00,110,111,10,01} 就叫前缀码。

Page 28: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.17 :二进制有限序列组成的集合称为码。其中每个元素称为一个码字。在一个码中 , 任一码字都不是其它码字的前缀 , 称该码为二元前缀码 , 简称前缀码。

为了设计 26 个英文字母所对应的前缀码 , 先来看前缀码与二分树的关系。

定理 7.12 :给定一棵二分树 , 则可确定一个前缀码。反之 , 对应于一个前缀码 , 存在一棵二分树。

证明

Page 29: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

对于图 7.12 中的前缀码来说 , 若我们接收到信息串序列为 000011001, 那么可以从图的二分树树根出发 , 依序列的次序 , 当遇到 0 时 , 就沿着标记为 0 的边走 ;当遇到 1 时 , 就沿着标记为 1 的边走 , 一直走至树叶 , 这样前缀码中的一个序列就被找到。

然后再回到根 , 用同样方法可以找出下一个序列。这样的过程保证使信息串序列总可分割成前缀码中的序列。于是从信息串序列 000011001 可以得到对应的英文字母aabe 。

Page 30: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

如何设计 26 个英文字母对应的前缀码, 使得同一短文字母串所对应的信息串序列尽可能地短,也就是说,使 1000个字母的短

文中其信息串长度

26

1iiilw 最小,其中 wi表示第 i 个字母出现的频

率,li表示第 i 个字母对应的序列长度。这一问题归结为如何构造一棵最优二分树的问题, 下面介绍用霍夫曼方法求最优二分树。为此下面首先给出最优二分树的定义。

Page 31: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

定义 7.18:给定一组权 w1,w2,,wn且 w1w2wn,如果一棵二分树的 n 片树叶带权 w1,w2,,wn,称这棵二分树为带权

w1,w2,,wn的二分树,记为 T。T的权记为W(T), W(T)=

n

iiilw

1

,

其中 li是从根到带权 wi的树叶的路长度。带权 w1,w2,,wn二分树 T中,使W(T)最小的二分树称为最优二分树,简称最优树。

Page 32: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

例:对于带权 3, 5, 7, 9的二分树, 如图所示。 (a)中 ,48 iilw (b)中 ,47 iilw (b)给出一棵最优树。

Page 33: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

霍夫曼算法 : 设 n 个权 w1,w2,,wn,w1w2wn

首先构造 n 棵树 , 每棵树是一个顶点 ( 即根 ), 分别带权 w1,w2, ,wn 。

然后找出两个带最小权 w1 和 w2 的顶点作为树叶 , 构造一棵二分树。

根带权 w1+w2, 如图所示。

Page 34: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

于是得到 n-1 棵树 , 它们的根分别带权 w1+w2,wn,

( 此时 w1+w2w3 不一定成立 ) 。再在 n-1 棵树中找出两棵根带权最小的树 , 合并为一棵新的二分树 , 使得这两棵树分别是它的左、右子树 , 新的二分树的根带的权为原两棵树根带的权之和 , 每一步选择两棵根带权最小的树合并为一棵二分树 , 重复这一过程直到只有一棵二分树为止。可以证明这棵树是带权 w1,w2,,wn 的最优树。

例 : 构造带权 2,4,7,8,10,12 的最优树。构造过程如图所示。

Page 35: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

这棵最优树的权为 :2*4+4*4+7*3+12*2+8*2+10*2=105一般来说 , 带权 w1,w2,,wn 的最优树不一定是唯一的。

Page 36: 图  7.2(b)  中边集 {e 1 ,e 2 } 和 {e 1 ,e 2 ,e 3 ,e 4 } 都是断集 ( 边割 ) 。 割集是断集 ,  反之不一定。

作业 :P154 9,12,14,15, 17,18,19,20,21,22