网站大量收购独家精品文档,联系QQ:2885784924

程序设计技术第八章Greedy算法简介.pptVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 程序设计技术 第八章 Greedy算法简介 * Greedy 算法的基本元素 Greedy算法的基本概念 Greedy选择性 优化子结构 Greedy算法正确性证明方法 * Greedy算法的基本思想 求解最优化问题的算法包含一系列步骤 每一步都有一组选择 作出在当前看来最好的选择 希望通过作出局部优化选择达到全局优化选择 Greedy算法不一定总产生优化解 Greedy算法是否产生优化解,需严格证明 Greedy算法产生优化解的条件 Greedy-choice-property Optimal substructure Greedy算法的基本概念 * Greedy选择性 Greedy选择性 若一个优化问题的全局优化解可以通过 局部优化选择得到,则该问题称为具有 Greedy选择性. 一个问题是否具有Greedy选择性需证明 * ? 若一个优化问题的优化解包含它的 子问题的优化解,则称其具有优化 子结构 优化子结构 * 证明算法所求解的问题具有优化子结构 证明算法所求解的问题具有Greedy选择性 证明算法确实按照Greedy选择性进行局部优化选择 Greedy算法正确性证明方法 * Huffman codes 问题的定义 优化解的结构分析 算法设计 算法复杂性分析 算法正确性证明 * 二进制字符编码 每个字符用一个二进制0、1串来表示. 固定长编码 每个字符都用相同长的0、1串表示. 可变长编码 经常出现的字符用短码,不经常出现的用长码 前缀编码 无任何字符的编码是另一个字符编码的前缀 问题的定义 * 编码树 叶结点: 用字符及其出现频率标记 内结点: 用其子树的叶结点的频率和标记 边标记: 左边标记0,右侧边标记1 100 a: 45 55 30 25 c: 12 b: 13 14 d: 16 e: 9 f: 5 0 0 0 0 0 1 1 1 1 1 * 编码树T的代价 设C是字母表,?c?C f(c)是c在文件中出现的频率 dT(c)是叶子c在树T中的深度,即c的编码长度 T的代价是编码一个文件的所有字符的代码位数: B(T)= * 优化编码树问题 输入: 字母表 C = {c1, c2, ...., cn }, 频率表 F = {f(c1), f(c2), ..., f(cn)} 输出: 具有最小B(T)的C前缀编码树 贪心思想: 循环地选择具有最低频率的两个结点, 生成一棵子树,直至形成树 * 我们需要证明 优化前缀树问题具有优化子结构 优化前缀树问题具有Greedy选择性 优化解的结构分析 * 优化子结构 引理1.设T是字母表C的优化前缀树,?c?C,f(c) 是c在文件中出现的频率.设x、y是T中任意 两个相邻叶结点,z是它们的父结点,则z作 为频率是f(z)=f(x)+f(y)的字符,T’=T-{x,y}是 字母表C’=C-{x,y} 的优化前缀编码树. b c z T’ 0 0 1 1 f(c) f(b) f(x)+f(y) b c x y T 0 0 0 1 1 1 f(x) f(c) f(y) f(b) z * 证. 要证B(T)=B(T’)+f(x)+f(y). ?v?C-{x,y}, dT(v)=dT’(v), f(v)dT(v)=f(v)dT’(v). 由于 dT(x)=dT(y)=dT’(z)+1, f(x)dT(x)+f(y)dT(y) =(f(x)+f(y))(dT’(z)+1) =(f(x)+f(y))dT’(z)+(f(x)+f(y)) 由于 f(x)+f(y)=f(z), f(x)dT(x)+f(y)dT(y)=f(z)dT’(z)+(f(x)+f(y)). 于是B(T)=B(T’)+f(x)+f(y). 若T’不是C’的优化前缀编码树, 则必存在T’’,使B(T’’)B(T’). 因为z是C’中字符,它必为T’’中的叶子. 把结点x与y加入T’’,作为z的子结点, 则得到C的一个如下前缀编码树T’’’: b c z T’ 0 0 1 1 f(c) f(b) f(x)+f(y) u v T’’ 0 0 1 1 f(v) f(u) z f(z) * T’’’代价为: B(T’’’)= ……+(f(x)+f(y))(dT’’(z)+1) = ……+f(z)dT’’(z)+(f(x)+f(y)) (dT’’(z)=

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档