的哈夫曼树.ppt

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

?教学要求 了解贪心算法的概念与贪心策略的选择 掌握应用贪心算法设计求解删数字问题、可拆背包问题与数列操作问题等最优化典型案例 ?本章重点 根据案例的实际选择与确定贪心策略;7.1 贪心算法概述;(4)贪心策略的选择; 贪心算法的理论基础为拟阵,是组合优化与图论的重要内容。  矩阵胚(matroid)又称为拟阵,是一个满足以下交换性质的特殊子集系统:  判断一个子集系统是不是矩阵胚常应用以下性质: 定理1 一个子集系统是矩阵胚当且仅当所有极大独立子集具有相同的基数。 例如,若S是一个矩阵中行向量集合,I是S的线性独立子集族,则(S,I)是矩阵胚。 定理2 子集系统优化问题的贪心算法正确,当且仅当该子集系统是一个矩阵胚。 ;7.2 背包问题;;// 已对n件物品按单位重量的效益降序排序 cw=c;s=0; // cw为背包还可装的重量 for(i=1;i=n;i++) {if(w[i]cw) break; x[i]=1.0; // 若w(i)=cw,整体装入 cw=cw?w[i]; s=s+p[i]; } x[i]=(float)(cw/w[i]); // 若w(i)cw,装入一部分) s=s+p[i]*x[i];; 7.3 删数字问题; 操作对象是一个可以超过有效数字位数的n位高精度数,存储在数组a中。 在整数的位数固定的前提下,让高位的数字尽量大,整数的值就大。这就是所要选取的贪心策略。 每次删除一个数字,选择一个使剩下的数最大的数字作为删除对象。选择这样“贪心”操作,是因为删k个数字的全局最优解包含了删一个数字的子问题的最优解。 当k=1时,在n位整数中删除哪一个数字能达到最大?从左到右每相邻的两个数字比较:若出现增,即左边数字小于右边数字,则删除左边的小数字。若不出现增,即所有数字全部降序或相等,则删除最右边的小数字。 ; 例如,在18位整数762191754639820463中,删除1个数字,使剩下的17位数最大,如何删? 要使删除1个数字后的17位数最大,须首位数字最大。首先,首位数字“7”大于第2位数字“6”比较,首位数字“7”不能删! 往后推,“6”与“2”比较,因62,为减,“6”不能删; 再往后推,“2”与“1”比较,因21,为减,“2”不能删 ; 继续往后推,“1”与“9”比较,因19,出现增,则删除左边的小数字“1”。 当k1(当然小于n),按上述操作,每一次操作从串首开始,每相邻的两个数字比较,出现“增”时,删除左边的小数字。每次操作删除一个数字后,后面的数字向前移位。 因此,只要从左至右每两相邻数字比较,出现“增”,即删除首数字。直到不出现“增”时,此时如果还不到删除指定的k位,打印剩下串的左边n?k个数字即可(相当于删除了余下的最右边若干个小数字)。;printf( 删除数字个数: );scanf(%d,k); i=0;m=0;x=0; while(kx m==0) {i=i+1; if(a[i-1]a[i]) // 两位比较出现递增,删除首数字 {printf(%d, ,a[i-1]); for(j=i-1;j=n-x-2;j++) a[j]=a[j+1]; x=x+1; i=0; // 从头开始查递增区间 } if(i==n-x-1) m=1; // 已无递增区间,m=1脱离循环 } if(xk) printf(及右边的%d个数字。\n,k-x); printf(\n 删除后所得最大数 );; 1)以上贪心删数字算法每删除一个数字a[i-1],赋值i=0,即必须从头开始查找递增区间。其实此时只需从a[i-2]开始查找递增区间即可,因为先前的操作能够保证a[i-2]及之前的数字不是递增区间。 2)以上贪心删数字算法每删除一个数字a[i-1],必须逐一把其后的数字往前移动一位,如果n及k相当大,移动过程花费较大。其实每删除数字后,并不一定需要移动数字的位置,只对所删除数位赋标记值-1即可,代表该位置的数字已经删除。同时,查找递增区间时跳过该数位。;7.4 埃及分数式;;; 以上贪心选择时,每一步都选比本分数小的最大埃及分数。这样尽管快速,但因为太严格可能会失去一些构建时机,或者可能根本找不到埃及分数式。 试把埃及分数贪心选择的环境适当放宽,选择范围适当扩大,即埃及分数的分母由以上贪心选择最小分母c=int(b/a)+1,扩展至c=int(b/a)+d,这里d为放宽尺度1,…,5等。必要时可把该尺度作扩大或缩小调整。; 7

文档评论(0)

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

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

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档