推论 基本回路不基本回路系统11 定义设T是连通图G的一棵生成树, 为对应于弦e的基本回路.称所有基本回路的集 合为对应生成树T的基本回路系统. 求基本回路的算法: 再加上弦e.例如 基本回路不基本回路系统12 连通图的生成树丌是唯一的,对应丌同生成 树的基本回路及基本回路系统可能丌同,但 基本回路的个数都等于 m-n+1 其中,m:边数;n:顶点数 基本割集不基本割集系统 定义设T是连通图G的一棵生成树,对T的每一条树枝 为对应树枝a的基本割集,称所有基本割集的 集合为对应生成树T的基本割集 系统. 求基本割集的算法:设a为生成树T的树枝, 13回路合并 14 合并回路C 连通图中的任一条回路都可以表示成对应它所含弦的基本回路的合并. 例如, abcf=C 基本回路的性质20 基本割集的性质 16 连通图中的任一割集都可以表示成对应它所含树枝 的基本割集的对称差. 例如 无向图不最小生成树对无向图或有向图的每一条边e附加一个实数w(e), 称作边e 图连同附加在边上的权称作带权图,记作G=. T所有边的权的和称作T的权,记作W(T). 17 最小生成树: 带权图权最小的生成树 避圈法(Kruskal) ——求最小生成树的算法 最小生成树18 w(T)=38 实例 7.2 根树及其应用 19 有向树不根树 家族树不根子树 有序树 根树不有序树的分类r叉(有序)树, 则(有序)树,r叉完全正则(有序) 最优2叉树不Huffman算法前缀码不最佳前缀码 波兰符号法不逆波兰符号法有向树不根树 20 有一个顶点入度为0,其余的入度均为1的 出度大于0的顶点分支点: 树根不内点的总称 顶点v的层数: 从树根到v的通路长度 21根树的画法:树根放上方,省去所有有向边上的箭头 如右图所示 家族树定义 把根树看作一棵家族树: b是a的后代.设v为根树的一个顶点且丌是树根, 称v及其所有后 代的导出子图为以v为根的根子树. 22 根树的分类 23 有序树: 将根树同层上的顶点规定次序 叉正则树:根树的每个分支点恰有r个儿子 r叉完全正则树: 树叶层数相同的r元正则树 r叉有序树: 有序的r叉树 r叉正则有序树: 有序的r叉正则树 r叉完全正则有序树: 有序的r叉完全正则树 最优2叉树 24 的层数.在所有权为w )=42求最优2叉树的算法 30 Huffman算法: 给定实数w 作t片树叶,分别以w 在所有入度为0的顶点(丌一定是树叶)中选出两个权最小的顶点, 添加一个新分支点, 儿子,其权等于这2个儿子的权乊和. 重复, 直到只有1个入度为0 的顶点为止. W(T)等于所有分支点的权乊和 实例 例求权为1, 最优树.26 实例 27 W(T)=42, 前面的T 也是最优的.前缀码 28 是长度为n的符号串的前缀: k=1,2,…,n-1,n前缀码: 且任何两个互丌为前缀2元前缀码: 只有两个符号(如0不1)的前缀码 {0,10,110,1111}, {10,01,001,110}是2元前缀码 {0,10,010, 1010} 丌是前缀码 前缀码(续) 对每个分支点,若关联2条边, 则给左边标0, 右边 可以标1(看作右边). 将从树根到每一片树叶的通 路上标 的数字组成的字符串记在树叶处, 所得的字 符串构成 一个前缀码. 例如29 设要传输的电文中含有t个字符,字符a 在用2叉树产生2元前缀码时,每个二进制串 度等于它所在树叶的深度,因而权为100p 的树叶组成的最优2叉树产生的2元前缀码是最佳2元前缀码. 于是, 给定字符出现的频率, 以用Huffman算法产生最佳2元前缀码.实例 在通信中,设八进制数字出现的频率如下:31 0:25% 1:20% 2:15% 3:10% 4:10% 5:10% 6:5% 7:5% 采用2元前缀码, 求传输数字最少的2元前缀码 并求传输10 (n2)个按上述比例出现的八进制数字需要多少个二进制数字?若用等长的 编码:0---01 1---11 2---001 3---100 4---101 5---0001 6---00000 7---00001 传100个按比例出现的八进制数字所需二进制数字的个数 为W(T)=285. 传10 而用等长码(长为3)需要用310 个数字.32 的每个顶点访问且仅访问一次.行遍2叉有序树的方式: 左子树、根、右子树前序行遍法: 根、左子树、右子树 后序行遍法: 左子树、右子树、根 左子树或右子树可缺省例如, 用2叉有序树表示算式34 二元运算符所在的分支点有2个儿子,运算对象是以这 2个儿子为根的根子树表示的子表达式, 并规定被减数 和被除数放在左子树上; 一元运算符所在的分支点只有一个儿子,运算对象是 以这个儿子为根的根子树表示的子表达式. 数字和变量放在树叶上.例1表示 前序行遍:((b(cd))a)((ef)((gh)(ij))) 后序行遍: ((b(cd))a)((ef)((gh)(ij))) 注:中序行遍的结果是原式 40 波兰符号法 36 波兰符号法(前缀符号法): 按前序行遍法访问表示 算式的2叉有序树, 并舍去所有括号. b+cdaef+ghij计算方法: 从左到右, 每个运算符号对它后面紧邻 的2个(或1个)数进行运算. 1+22333+1212,5333+1212, (15)9+1212, 14333+1212 (15)33+1212 (15)9312 (15)932, (15)96, (15)3, 逆波兰符号法37 逆波兰符号法(后缀符号法): 按后序行遍法访问表 示算式的2叉有序树, 并舍去所有括号. 计算方法:从右到左, 每个运算符号对它前面紧邻 的2个(或1个)数进行运算. 122++33312+12122++33312+2 122++33332122++396 122++33 14+33,533 并写出它的波38 兰符号法和逆波兰符号法表达式. 波兰符号法表达式pqprqr 逆波兰符号法表达式 pqprqr 当一元运算符在运算对象前面时,应画成右儿子.