计算机算法设计与分析第4章贪心算法.pptVIP

计算机算法设计与分析第4章贪心算法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.5 单源最短路径 算法描述 for(int j=1; j=n; j++) if((!s[j])(c[u][j]maxint)) { Type newdist=dist[u]+c[u][j]; if (newdistdist[j]) { dist[j]=newdist; prev[j]=u; } } } } 4.5 单源最短路径 例如,对右图中的有向图,应用Dijkstra算法计算从源顶点1到其它顶点间最短路径的过程列在下页的表中。 4.5 单源最短路径 迭代 S u dist [2] dist [3] dist [4] dist [5] 初始 {1} 1 10 maxint 30 100 1 {1,2} 2 10 60 30 100 2 {1,2,4} 4 10 50 30 90 3 {1,2,4,3} 3 10 50 30 60 4 {1,2,4,3,5} 5 10 50 30 60 Dijkstra算法的迭代过程: 4.5 单源最短路径 2.算法的计算复杂性 对于具有n个顶点和e条边的带权有向图,如果用带权邻接矩阵表示这个图,那么Dijkstra算法的主循环体需要 时间。这个循环需要执行n-1次,所以完成循环需要时间 。 算法的其余部分所需要时间不超过 。 4.4 哈夫曼编码 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。 给出现频率高的字符以较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。 4.4 哈夫曼编码 哈夫曼编码是一种前缀码。 1、前缀码 对每一个字符规定一个0,1串作为其代码,并要求任一字符的代码都不是其它字符代码的前缀。这种编码称为前缀码。 4.4 哈夫曼编码 非前缀码 如:a b c d 0 10 101 11 试译出:1010 结果会有两种:bb 或 ca 原因在于:b的代码是c的代码的前缀。 哈夫曼编码是一种前缀码,可以避免以上情况。 4.4 哈夫曼编码 编码的前缀性质使译码方法非常简单。 001011101 →0 0 101 1101 (表4.1) a a b e 用二叉树作为前缀编码的数据结构,且表示最优前缀码的二叉树总是一棵完全二叉树,即树中任一结点都有2个儿子结点。每个叶子对应字符集中的一个字符。 4.4 哈夫曼编码 f(c)是字符集C中字符c的出现频率, dT(c)是叶子结点c在树中的深度。 平均码长定义为: 使平均码长达到最小的前缀码编码方案称为字符集C的一个最优前缀码。 4.4 哈夫曼编码 2、构造哈夫曼编码 德国数学家哈夫曼提出构造最优前缀码的贪心算法,由此产生的编码方案称为哈夫曼算法。 哈夫曼算法以自底向上的方式构造表示最优前缀码的二叉树T。 算法以|C|个叶结点开始,执行|C|-1次的“合并”运算后产生最终所要求的树T。 4.4 哈夫曼编码 贪心准则:每次找出具有最小频率的两棵树合并。 算法huffmanTree中,编码字符集中每一字符c的频率是f(c)。以f为键值的优先队列Q用在贪心选择时有效地确定算法当前要合并的2棵具有最小频率的树。 一旦2棵具有最小频率的树合并后,产生一棵新的树,其频率为合并的2棵树的频率之和,并将新树插入优先队列Q。经过n-1次的合并后,优先队列中只剩下一棵树,即所要求的树T。 4.4 哈夫曼编码 算法huffmanTree用最小堆实现优先队列Q。初始化优先队列需要O(n)计算时间; 最小堆的DeleteMin和Insert运算均需O(logn)时间,n-1次的合并总共需要O(nlogn)计算时间。 因此,关于n个字符的哈夫曼算法的计算时间为O(nlogn) 。 4.6 最小生成树 设G =(V,E)是无向连通带权图,即一个网络。E中每条边(v,w)的权为c[v][w]。 如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。 在G的所有生成树中,耗费最小的生成树称为G的最小生成树。 4.6 最小生成树

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档