第六章随机化算法教学目标.PPTVIP

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章随机化算法教学目标

算法设计与分析 授课教师:王秋芬 办公地点:7307 Email: w_qiufen@163.com 第六章 随机化算法 教学目标 理解产生伪随机数的线性同余法 掌握数值随机化算法的特点及应用 掌握蒙特卡罗算法的特点及应用 掌握拉斯维加斯算法的特点及应用 掌握舍伍德算法的特点及应用 6.1概述 6.1.1随机化算法的类型及特点 类型 数值随机化算法 蒙特卡罗算法 拉斯维加斯算法 舍伍德算法 特点 数值随机化算法常用于数值问题的求解,所得到的解往往都是近似解,而且近似解的精度随计算时间的增加不断提高。 它能求得问题的一个解,但这个解未必是正确的。求得正确解的概率依赖于算法执行时所用的时间,所用的时间越多得到正确解的概率就越高。一般情况下,蒙特卡罗算法不能有效地确定求得的解是否正确。 拉斯维加斯算法不会得到不正确的解,一旦找到一个解,那么这个解肯定是正确的。但是有时候拉斯维加斯算法可能找不到解。拉斯维加斯算法得到正确解的概率随着算法执行时间的增加而提高。 舍伍德算法不会改变对应确定性算法的求解结果,每次运行都能够得到问题的解,并且所得到的解是正确的 6.1.2 随机数发生器 随机数发生器 产生随机数的方法 伪随机数发生器 通过一个固定的、可以重复的计算方法产生随机数的发生器 线性同余法 6.2数值随机化算法 d为种子;b为系数,满足b≥0;c为增量,满足c≥0;m为模数,满足m0。b、c和m越大且b与m互质可使随机函数的随机性能更好 假设所投入的点落入正方形的任一点的概率相等,则所投入的点落入圆内的概率为 。 当n足够大时, k与n之比就逼近这一概率,从而 在具体实现时只以第一象限为样本且r取值为1,建立直角坐标系,如图6-1b)所示 double Darts(int n) { static RandomNumber darts; //定义一个RandomNumber类的对象darts int k=0,i; double x,y; for( i=1;i=n;i++) { x=darts.fRandom(); //产生一个[0,1)之间的实数,赋给x y=darts.fRandom(); //产生一个[0,1)之间的实数,赋给y if((x*x+y*y)=1) k++; } return 4*k/double(n); } 6.2.2计算定积分 设f(x)是[0,1]上的连续函数且0≤f(x)≤1,需要计算积分值I= 。积分I等于图6-2中的阴影区域G的面积 假设向单位正方形内随机投入n个点,如果有m个点落入G内,则I近似等于随机点落入G内的概率,即I≈m/n double Darts(int n) { static RandomNumber dart; int k=0,i;double x,y; for( i=1 ;i=n;i++) { x=dart.fRandom ( ); //产生一个[0,1)之间的实数,赋给x y=dart.fRandom ( ); //产生一个[0,1)之间的实数,赋给y if(y=f(x)) k++; } return k/double(n); } 6.3蒙特卡罗算法 设p是一个实数,且0.5p1。如果蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p,则称该算法是p正确的。对于同一实例,蒙特卡罗算法不会给出两个不同的正确解,则称该算法是一致的。而对于一个一致的p正确的蒙特卡罗算法,要想提高获得正确解的概率,只需执行该算法若干次,从中选择出现频率最高的解即可。 设蒙特卡罗算法是一致的p正确的。那么至少调用多少次蒙特卡罗算法,可以使得蒙特卡罗算法得到正确解的概率不低于 ? 6.3.1主元素问题 问题描述 设T[1:n]是一个含有n个元素的数组。当|{i|T[i]=x}|n/2时,称元素x是数组T的主元素 算法描述 Templateclass Type bool majority(Type T[], int n) // 判定主元素的蒙特卡罗算法 { RandomNumber rnd; int i=rnd.random(n)+1; //产生1~n之间的随机下标 Type x=T[i]; // 随机选择数组元素 int k=0; for (int j=1;j=n;j++) if (T[j]==x) k++; return (kn/2); //当 kn/2 时,T含有主元素 } bool majorityMC(Type T[], int n, double ) { // 重复次调用多次算法majority int k=

文档评论(0)

2105194781 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档