- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贪婪法-2part
贪婪算法 1 贪婪算法的思想 2 可绝对贪婪问题 3 相对贪婪问题 4 贪婪算法实例 1 贪婪算法的思想-总结 适用问题 两类 可绝对贪婪问题 对输入的任何数据,贪婪策略都是适用的,可用于求最优解; 具有贪婪选择性质、最优子结构性质; 相对贪婪问题 求近似解; 不具备全部性质,但求解效率要求高,解的精度要求不高。 2 可绝对贪婪问题-例4.18 例4.18 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。 输出应包括所去掉的数字的位置和组成的新的正整数(N不超过100位)。 2 可绝对贪婪问题-例4.18-问题分析 贪婪策略 2 可绝对贪婪问题-例4.18-问题分析 再一个实例: n2=“2 3 1 1 8 3” 2 可绝对贪婪问题-例4.18-问题分析 n3=”1 2 3 4 5 6 7” s=3 2 可绝对贪婪问题-例4.18-算法设计 算法设计: 根据以上实例分析,算法主要由四部分组成:初始化、相邻数字比较(必要时删除)、处理比较过程中删除不够s位的情况和结果输出。 2 可绝对贪婪问题-例4.18-算法设计 3)同样还是利用数组,记录未删除字符的下标,粗略的过程如下: n=“1 2 4 3 5 8 3 3” s=3 1 2 3 4 5 6 7 8 3 相对贪婪问题-例-多机调度问题 3 相对贪婪问题-例-问题分析 这个问题是“NP完全问题”,到目前为止还没有“有效”的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。 3 相对贪婪问题-例-算法实现 例如,设7个独立作业{1,2,3,4,5,6,7}由3台机器M1,M2和M3加工处理。各作业所需的处理时间分别为{2,14,4,16,6,5,3}。 计算结果:所需的加工时间为17。 4 贪婪算法实例-例-huffman编码 例 huffman编码 huffman树的构造算法 1.证明:具有贪心选择性质 设二叉树T是一颗huffman树。b、c是二叉树T的最深叶子且为兄弟。不失一般性,设w(b)≤w(c),设x、y是NodeSet中权值最小的两结点, w(x)≤w(y),则有w(x) ≤ w(b), w(y)≤w(c) 在树T中交换叶子b和x的位置得到树T’,再交换叶子c和y的位置,得到树T’’。 带权路径长度:WPL(T)=?i?T w(i)TL(c) i—二叉树上的结点 w(i)—结点i的权值 TL(i)--结点i的路径长度 WPL(T)-WPL(T’)= ?i?T w(i) TLT(i) -?i?T w(i)TLT’(i) = w(x)TLT(x)+w(b)TLT(b)-w(x)TLT’(x) –w(b)TLT’(b) = w(x)TLT(x) –w(x)TLT(b) +w(b)TLT(b)-w(b)TLT(x) = (w(b)-w(x))(TLT(b)- TLT(x)) ≥0 同理: WPL(T’)-WPL(T’’) ≥0 // TLT(b)=TLT’(x) 则 WPL(T’’) ≤ WPL(T’) ≤ WPL(T) 又T是哈夫曼树。 WPL(T) ≤WPL(T’’) 则 WPL(T )=WPL(T’’)。 T’’是含最小权值结点的哈夫曼树,x和y为最深叶结点且为兄弟。 2.证明:具有最优子结构性质 二叉树T是哈夫曼树。x、y是二叉树T的最深叶子且为兄弟。 设z为其父亲,w(z)=w(x)+w(y),则树T’=T-{x,y}是结点集合 N’=NodeSet-{x,y}?{z}的哈夫曼树。 证明:反证法。 由已知不难得出,TLT(x)=TLT(y) = TLT’(z)+1 对任意的i ?NodeSet-{x,y},有 TLT’(i)=TLT(i) WPL(T)-WPL(T’) = ?i?N w(i)TLT(i)- ?i?N’ w(i)TLT’(i) = w(x)TLT(x)+w(y)TLT(y)- w(z)TLT’(z) = (w(x)+w(y)) TLT’(z) + w(x)+w(y) – w(z)TLT’(z) = w(x)+w(y) 假定T’不是结点集合N’ 的哈夫曼树,则存在结点集合N’ 的哈夫曼树,设为T’’。则有WPL(T’)WPL(T’’) z是T’’中的一个叶子,将x,y 加入作为z的儿子,得到结 点集合N的二叉树T’’’。 WPL(T’’’) = ?i?N’ w(i)TLT’’(i)+w(x)(TLT’’(z)+1)+ w(y)(TLT
文档评论(0)