算法-第9章-贪婪技术(李静).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法-第9章-贪婪技术(李静)

贪婪技术 背包问题 Prim算法是否能产生一个最优解 最短路径的另一个例子 在第i次迭代开始以前,该算法已经确定了i-1条连接起点和离起点最近顶点之间的最短路径。他们构成了一棵子树Ti 和Ti的顶点相邻的顶点集合成为“边缘顶点”,以它们为候选对象,选出下一个最接近起点的顶点。 对于每一个边缘顶点u,该算法求出它到最近的树中顶点v的距离 给每个顶点附加两个标记 数字标记d指出目前为止该算法求出的从起点到该顶点间最短路径的长度 另一个指出在这条路径上倒数第二个顶点的名字。 Dijkstra算法 在确定了加入树中的顶点u*以后,还需要做两个操作: 把u*从边缘集合中移到顶点集合 对于余下的每个边缘顶点u,如果通过权重为w(u*,u)的边和u*相连,当du*+w(u*,u)du时,把u的标记分别更新为u*和du*+w(u*,u) 虽然从算法的标记和结构,Dijkstra算法和Prim算法的用法十分相似,且他们都会从余下顶点的优先队列中选择下一个顶点,但他们解决的是不同的问题。 Dijkstra算法 b c d a e 4 3 2 5 6 4 7 a b d c e 哈夫曼树 第一步:初始化n个单节点的树,并为它们标上字母表中的字符。把每个字符的概率记在树的根上,用来指出树的权重。 第二步:重复下面的步骤,直到只剩一棵单独的树。找到两棵权重最小的树。把它们作为新树中的左右子树,并把其权重之和作为新的权重记录在新树的根中。 字符 A B C D _ 出现概率 0.35 0.1 0.2 0.2 0.15 哈夫曼编码是一种最重要的文件压缩方法。 简单,通用,可以生成一种最优编码 对于需确定文本中字符出现次数,而必需事先扫描给定的文件的问题,可以通过“动态哈夫曼编码”克服。 哈夫曼编码的应用不局限在数据压缩。 假设有n个正数w1,w2,…,wn,要把他们分配给一棵二叉树的n个叶子,每个叶子一个数。记加权路径长度∑liwi,那么如何构造一棵具有最小加权路径长度的二叉树呢?如决策问题 哈夫曼编码 哈夫曼编码应用广泛的例子 考虑从n个可能目标中猜测一个选定目标的游戏,玩家可以问一些能够回答yes或者no的问题。 哈夫曼编码 n2 n1 n3 n=1 n=2 n=3 n=4 no no yes no yes yes n=4 n=3 n=2 n=1 n=1 n=21 n=4 no no yes no yes yes * 第*页 哈 夫 曼 树 与 哈 夫 曼 编 码 最优树的定义 如何构造最优树 前缀编码 * 第*页 一、最优树的定义 树的路径长度定义为: 树中每个结点的路径长度之和。 结点的路径长度定义为: 从根结点到该结点的路径上 分支的数目。 * 第*页 树的带权路径长度定义为: 树中所有叶子结点的带权路径长度之和 WPL(T) = ?wklk (对所有叶子结点)。 在所有含 n 个叶子结点、并带相同权 值的 m 叉树中,必存在一棵其带权路径 长度取最小值的树,称为“最优树”。 在最优树中,权值越大的结点离根越近。 例如: * 第*页 2 7 9 7 5 4 9 2 WPL(T)= 7?2+5?2+2?3+4?3+9?2 =60 WPL(T)= 7?4+9?4+5?3+4?2+2?1 =89 5 4 * 第*页 根据给定的 n 个权值 {w1, w2, …, wn}, 构造 n 棵二叉树的集合 F = {T1, T2, … , Tn}, 其中每棵二叉树中均只含一个带权值 为 wi 的根结点,其左、右子树为空树; 二、如何构造最优树 (1) (赫夫曼算法) 以二叉树为例: * 第*页 在 F 中选取其根结点的权值为最 小的两棵二叉树,分别作为左、 右子树构造一棵新的二叉树,并 置这棵新的二叉树根结点的权值 为其左、右子树根结点的权值之 和; (2) * 第*页 从F中删去这两棵树,同时加入 刚生成的新树; 重复 (2) 和 (3) 两步,直至 F 中只 含一棵树为止。 (3) (4) * 第*页 9 例如: 已知权值 W={ 5, 6, 2, 9, 7 } 5 6 2 7 5 2 7 6 9 7 6 7 13 9 5 2 7 * 第*页 6 7 13 9 5 2 7 9 5 2 7 16 6 7 13 29 0 0 0 0 1 1 1 1 00 01 10 110 111 * 第*页 指的是,任何一个字符的编码都 不是同

文档评论(0)

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

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

1亿VIP精品文档

相关文档