算法设计与分析实用教程杨克昌 第8章 模拟新.pptVIP

  • 16
  • 0
  • 约7.82千字
  • 约 37页
  • 2015-12-24 发布于广东
  • 举报

算法设计与分析实用教程杨克昌 第8章 模拟新.ppt

?教学要求 掌握竖式乘除模拟设计要领并应用解决多位整数与指定精度的小数等高精度计算案例 掌握应用随机函数模拟设计求解自然界的随机现象 ?本章重点 根据案例的实际选择与确定模拟量 8.1 模拟概述 8.1.1 模拟分类 1. 随机模拟 随机性模拟的对象是随机事件,其变化过程相当复杂。随机模拟要利用计算机语言提供的随机函数,设定某一范围内的随机值,并将这些随机值作为参数实施模拟。 例如数字模拟(又称数字仿真),可进行一些疑难定积分的近似计算。 2. 决定性模拟 决定性模拟是对决定性过程进行的模拟,其模拟的事件按其固有规律发生发展,最终得出一个明确的结果。 例如,乘除竖式计算模拟就是决定性模拟。 8.1.2 竖式运算模拟 竖式乘除模拟是按整数的四则运算法则进行模拟操作,最后得出运算的结果。 竖式乘除模拟,主要是模拟整数逐位乘或除的竖式计算过程,求解一些整数计算与判定问题。 在实施乘除竖式计算模拟之前,必须根据参与运算整数的实际设置模拟量,以模拟乘除竖式计算进程中数值的变化,并判定运算是否结束。 1. 竖式除模拟 2. 竖式乘模拟 第8章 作业 习题8: 1, 2, 3, 4, 6 这一循环操作与(1)实质上是C与B杯互换,相当于返回函数值Probe(a,cv,bv)。 试验函数Probe()的引入是巧妙的,可综合摸拟以上两种分倒操作避免了关于cv与bv大小关系的讨论。 同时设计实施函数Practice(a,bv,cv),与试验函数相比较,把n增1操作改变为输出中间过程量a、b、c,以标明具体操作进程。 3. 按A?C?B顺序分倒操作 8.8 模拟应用小结 本章应用竖式乘除模拟非常简捷地解决了高精度整除问题的乘数探求、尾数前移问题、阶乘、幂、排列与组合数的高精计算,同时求解了圆周率?的指定位数的计算。 这些案例所求解的,既有整数,也有实数。其中有些案例,既可以应用竖式乘模拟求解,也可以应用竖式除模拟来求解,有些案例需综合应用竖式乘、除模拟来求解。如果应用我们前面介绍的递推、递归、回溯或动态规划等算法来求解这些案例,不容易奏效。 1. 应用竖式模拟注意点 注意联系案例的具体实际设置被除数、除数与商等模拟量。试商过程中被除数的确立比较灵活。 (1) 在“积为若干个1”求解时,被除数为:a=c*10+1;(因为每一位均为1)。 (2) 在“积为若干个‘2011’”的求解时,被除数变为:a=c*10000+2011。 (3) 在“积为任意指定构成”的求解时,被除数变为:a=c*10+d(j);其中d(j)为某一位数。 (4) 在“尾数前移“的求解时,被除数又变为:a=c*10+b;其中b为上一轮试商的商。 2. 应用随机函数模拟注意点 要注意随机函数发生器的初始化,以避免雷同之外,也要注意联系问题的具体实际,控制随机数的范围。 例如,在模拟发扑克牌时,x代表4花色,y代表每色的13点,应用 x=rand()%4+1; y=rand()%13+2; 来实现是适合的。rand()%4的值为0,1,2,3,则rand()%4+1的值为1,2,3,4,共4 个,代表4花色。rand()%13的值为0,1,…12, 则y=rand()%13+2的值为2,3,…14,共13个,分别代表13个点数(其中14为“A”点)。 第8章上机 (1) 上机通过本章乘数探求 、尾数前移 、圆周率 ? 的高精度计算与泊松分酒等典型案例; (2) 上机通过8.3、8.6; 习题8-1,8-2,8-5. (3) 分组讨论:01串积及其拓广;二部数积;多位尾数前移;模拟发桥牌设计。 * * 第 8 章 模拟算法 竖式除模拟,设竖式除过程中被除数为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 } 通常设w数组表示乘运算的一个乘数,也表示该数乘以p(另一个乘数)的积:w(1)表示个位数,w(2)为十位数,…。 实施竖式乘模拟必须考虑进位。设进位数为m并赋初值,显然,乘数的第k位数w(k)乘以另一个乘数p的结果为a=w(k)*p+m,然后把

文档评论(0)

1亿VIP精品文档

相关文档