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