软件作业分析.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章习题课 3-15 将题3-15图的二叉树按中序、前序、后序进行遍历,写出遍历的节点序列。 中序: FDIGBAEHKJC 前序: ABDFGICEHJK 后序: FIGDBKJHECA 3-17 1 哈夫曼树(Huffman)——带权路径长度最短的树 定义 路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的~ 路径长度:路径上的分支数 树的路径长度:从树根到每一个结点的路径长度之和 树的带权路径长度:树中所有带权结点的路径长度之和 构造Huffman树的方法——Huffman算法 构造Huffman树步骤 根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,令起权值为wj 1 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和 2 在森林中删除这两棵树,同时将新得到的二叉树加入森林中 3 重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树 用给出的一组权值{3,7,8,2,5,8,4} 建立一颗哈夫曼树(按左子树根节点的权值小于右子树根节点的权值的次序构建) 3-22 1 深度优先遍历(DFS):从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V0相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止 3-24 二分查找 查找过程:每次将待查记录所在区间缩小一半 适用条件:采用顺序存储结构的有序表 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 试分别画出在线性表(a, c, e, f, g, j, k, m, n)中进行二分查找(以查找关键字等于b,k的记录为例)的过程。 1 2 3 4 5 6 7 8 9 a c e f g j k m n 查找k 3-27 二叉排序树 定义:二叉排序树或是一棵空树,或是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值 它的左、右子树也分别为二叉排序树 二叉排序树的插入:若二叉排序树为空,则插入结点应为新的根结点;否则,继续在其左、右子树上查找,直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子 二叉排序树生成:从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树 3-27 已知一任意关键字序列:{ 19,14,22,01,66,21,83,27,56,13,10,50 } (1)建立二叉排序树 (2)插入节点24,画出对应的二叉排序树 (3)在(2)的基础上删除66,画出对应的二叉树 3-28题 散列法 散列法就是也称为哈希查找(Hashed search)或杂凑法。 散列法的核心思想是将每个记录的地址与该记录的关键字之间建立某种函数关系,可直接由关键字查找到该记录,根据关键字求存储地址的函数称为散列函数,又称为哈希函数(Hashed Function),按散列存储方式构造的动态表又称散列表(hashed table)。 处理冲突的方法 1. 开放地址法:开放地址就是表中尚未被占用的地址,当新插入的记录所选地址已被占用时,即转而寻找其它尚开放的地址。 开放地址法又称为闭散列表处理冲突的方法。散列表按结构形式可分成开散列表和闭散列表,闭散列表的结构是一个向量,也就是一维数组,表中记录按关键字经散列函数运算所得的地址直接存入数组中。 当在闭散列表上发生冲突时,必须按某种方法在散列表中形成一个探查地址序列,沿着这个探查地址序列在数组中逐个查找,直到碰到无冲突的位置为止,并放入记录。 形成探查地址序列最简单的方法是线性探测法,设散列函数为H,闭散列表一维数组的容量为m,对关键字k,计算出的地址为d=H(k)。 线性探测法的基本思想是沿着散列表顺序向后探查,直至找到开放地址为止,如到达表末端仍未找到开放地址,则将表看成是循环的,返回到表的首端再向后找,只要尚有开放地址最终总可以找到。 线性探测法对应的探查地址序列为d+1,d+2,……m,1,……,d-1。探查地址序列对应的计算公式为:di=(H(K)+i) mod m (1≤i≤m-1) 例如,已知一组关键字k1~k5,已计

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档