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

《算法设计与分析实用教程》全套教学课件.ppt

《算法设计与分析实用教程》全套教学课件.ppt

  1. 1、本文档共257页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1) 首先,对给定的n个权值作升序排列。 2) 设置n-1次操作的k(1——n-1)循环,在第k次操作中,由两个最小权值叶结点生成一个新结点: x=w[2*k-1]; y=w[2*k]; w[n+k]=x+y; lc[n+k]=x; rc[n+k]=y; 3) 新结点参与排序,为下一次操作做准备。 考虑到每一次排序可能改变w数组元素顺序,设置u数组,每次所得新结点,其数据传送给u数组,最后输出时不是按已改变次序的w数组,而是按u数组输出。 4) 为具体画出哈夫曼树提供方便,输出展示每一个结点的左右子结点的表。 1. 哈夫曼算法要点 for(k=1;k=n-1;k++) // 实施操作n-1次 {x=w[2*k-1]; y=w[2*k]; w[n+k]=x+y; s=s+w[n+k]; z=w[n+k]; u[n+k]=w[n+k]; printf(\n 第%d次操作后为:,k); for(i=2*k+1;i=2*k+2;i++) // 操作后找出最小的2项 for(j=i+1;j=n+k;j++) if(w[i]w[j]) {h=w[i];w[i]=w[j];w[j]=h;} for(j=2*k+1;j=n+k;j++) // 输出第k次操作结果 { printf( %d,w[j]); if(w[j]==z) printf((%d+%d),x,y); }} printf(\n 最小带权路径长为:%d ,s); 2. 哈夫曼算法描述 7.7 贪心算法应用小结 比较动态规划与贪心算法都是求解最优化问题: 1. 着眼点不同 动态规划算法着眼全局,而贪心算法着眼局部。 2. 求解的结果可能不同 动态规划算法求解结果总是最优的,贪心算法对大多数优化问题能得到最优解,但有时并不能求得最优解。 3. 求解效率上的差异 从求解效率来说,贪心算法比动态规划更高,且一般不存在空间限制的影响。 4. 求解范围上的差异 应用贪心算法有时可简化一些构造性问题。 第7章 作业 习题7: 1, 2, 3, 4 第7章上机 (1) 上机通过本章删数字、埃及分数式、可拆背包与数列操作问题等典型案例; (2) 上机通过习题7-5,7-6; (3) 分组讨论:数列操作优化及其时间复杂度;哈夫曼树与哈夫曼编码实现。 返回 ?教学要求 掌握竖式乘除模拟设计要领并应用解决多位整数与指定精度的小数等高精度计算案例 掌握应用随机函数模拟设计求解自然界的随机现象 ?本章重点 根据案例的实际选择与确定模拟量 第 8 章 模拟算法 8.1 模拟概述 8.1.1 模拟分类 1. 随机模拟 随机性模拟的对象是随机事件,其变化过程相当复杂。随机模拟要利用计算机语言提供的随机函数,设定某一范围内的随机值,并将这些随机值作为参数实施模拟。 例如数字模拟(又称数字仿真),可进行一些疑难定积分的近似计算。 2. 决定性模拟 决定性模拟是对决定性过程进行的模拟,其模拟的事件按其固有规律发生发展,最终得出一个明确的结果。 例如,乘除竖式计算模拟就是决定性模拟。 8.1.2 竖式运算模拟 竖式乘除模拟是按整数的四则运算法则进行模拟操作,最后得出运算的结果。 竖式乘除模拟,主要是模拟整数逐位乘或除的竖式计算过程,求解一些整数计算与判定问题。 在实施乘除竖式计算模拟之前,必须根据参与运算整数的实际设置模拟量,以模拟乘除竖式计算进程中数值的变化,并判定运算是否结束。 竖式除模拟,设竖式除过程中被除数为a,除数为p,试商所得的商为b=a/p,所得余数为c=a%p。 实施模拟,可根据问题的具体实际设置模拟循环,并确定终止循环的条件。例如,以试商的余数是否为0作为运算是否完成的终止条件:当c≠0时,继续试商下去,直至余数c=0时,实现整除,终止模拟。竖式除模拟框架描述: 输入原始数据;确定初始量; while(循环条件) { a=c*t+m; // 构造被除数a b=a/p; // 实施除运算,计算商b printf(b); c=a%p; // 试商得余数c } 1. 竖式除模拟 通常设w数组表示乘运算的一个乘数,也表示该数乘以p(另一个乘数)的积:w(1)表示个位数,w(2)为十位数,…。 实施竖式乘模拟必须考虑进位。设进位数为m并赋初值,显然,乘数的第k位数w(k)乘以另一个乘数p的结果为a=w(k)*p+m,然后把所得到的乘积a的

文档评论(0)

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

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

1亿VIP精品文档

相关文档