




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章随机化算法,教学目标理解产生伪随机数的线性同余法掌握数值随机化算法的特点及应用掌握蒙特卡罗算法的特点及应用掌握拉斯维加斯算法的特点及应用掌握舍伍德算法的特点及应用,6.1概述,6.1.1随机化算法的类型及特点类型数值随机化算法蒙特卡罗算法拉斯维加斯算法舍伍德算法特点数值随机化算法常用于数值问题的求解,所得到的解往往都是近似解,而且近似解的精度随计算时间的增加不断提高。,蒙特卡罗算法每次均能求得问题的一个准确解,但这个解未必是正确的。求得正确解的概率依赖于算法执行时所用的时间,所用的时间越多得到正确解的概率就越高。一般情况下,蒙特卡罗算法不能有效地确定求得的解是否正确。拉斯维加斯算法不会得
2、到不正确的解,一旦找到一个解,那么这个解肯定是正确的。但是有时候拉斯维加斯算法可能找不到解。拉斯维加斯算法得到正确解的概率随着算法执行时间的增加而提高。舍伍德算法不会改变对应确定性算法的求解结果,每次运行都能够得到问题的解,并且所得到的解是正确的,6.1.2随机数发生器,随机数发生器产生随机数的方法伪随机数发生器通过一个固定的、可以重复的计算方法产生随机数的发生器线性同余法,d为种子;b为系数,满足b0;c为增量,满足c0;m为模数,满足m0。b、c和m越大且b与m互质可使随机函数的随机性能更好思考:如何产生0-1之间的随机数?,/建立随机数类RandomNumber#definem65536
3、L#defineb1194211693L#definec12345LclassRandomNumberprivate:unsignedlongd;/d为当前种子public:RandomNumber(unsignedlongs=0);/缺省值0表示由系统自动产生种子unsignedshortrandom(unsignedlongn);/产生0:n-1之间的随机整数doublefRandom();/产生0,1)之间的随机实数;,RandomNumber:RandomNumber(unsignedlongs)if(s=0)d=time(0);/用系统时间产生种子elsed=s;/由用户提供种子un
4、signedshortRandomNumber:random(unsignedlongn)d=b*d+c;/用线性同余计算新的种子return(unsignedshort)(d16)%n);/把d的高16位映射到0(n-1)范围内doubleRandomNumber:fRandom()/产生0,1)之间的随机实数returnrandom(m)/double(m);,6.2数值随机化算法,6.2.1计算的值将n个点随机投向一个正方形,设落入此正方形内切圆(半径为r)中的点的数目为k,如图6-1a)所示。,假设所投入的点落入正方形的任一点的概率相等,则所投入的点落入圆内的概为。当n足够大时,k与n
5、之比就逼近这一概率,从而在具体实现时只以第一象限为样本且r取值为1,建立直角坐标系,如图6-1b)所示,doubleDarts(intn)staticRandomNumberdarts;intk=0,i;doublex,y;for(i=1;i=n;i+)x=darts.fRandom();/产生一个0,1)之间的实数,赋给xy=darts.fRandom();/产生一个0,1)之间的实数,赋给yif(x*x+y*y)=1)k+;return4*k/double(n);,6.2.2计算定积分,设f(x)是0,1上的连续函数且0f(x)1,需要计算积分值。假设向单位正方形内随机投入n个点,如果有m
6、个点落入G内,则I近似等于随机点落入G内的概率,即Im/n,doubleDarts(intn)staticRandomNumberdart;intk=0,i;doublex,y;for(i=1;i=n;i+)x=dart.fRandom();/产生一个0,1)之间的实数,赋给xy=dart.fRandom();/产生一个0,1)之间的实数,赋给yif(y=f(x)k+;returnk/double(n);,6.3蒙特卡罗算法,设p是一个实数,且0.5p1。如果蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p,则称该算法是p正确的。对于同一实例,蒙特卡罗算法不会给出两个不同的正确解,则称该
7、算法是一致的。而对于一个一致的p正确的蒙特卡罗算法,要想提高获得正确解的概率,只需执行该算法若干次,从中选择出现频率最高的解即可。设蒙特卡罗算法是一致的p正确的。那么至少调用多少次蒙特卡罗算法,可以使得蒙特卡罗算法得到正确解的概率不低于?,问题描述设T1:n是一个含有n个元素的数组。当|i|Ti=x|n/2时,称元素x是数组T的主元素算法描述Templateboolmajority(TypeT,intn)/判定主元素的蒙特卡罗算法RandomNumberrnd;inti=rnd.random(n)+1;/产生1n之间的随机下标Typex=Ti;/随机选择数组元素intk=0;for(intj=
8、1;jn/2);/当kn/2时,T含有主元素,6.3.1主元素问题,boolmajorityMC(TypeT,intn,double)/重复次调用多次算法majorityintk=(int)ceil(log()/log(1-p);for(inti=1;i=k;i+)if(majority(T,n)returntrue;returnfalse;,6.3.2素数测试,试除法用2,3,去除n,判断是否能被整除,如果能,则为合数,否则为素数。算法描述boolPrime(unsignedintn)intm=floor(sqrt(double(n);for(inti=2;i=m;i+)if(n%i=0)r
9、eturnfalse;returntrue;,Wilson定理对于给定的正整数n,判定n是一个素数的充要条件是(n-1)!-1(modn)。费尔马小定理如果p是一个素数且a是整数,则apa(modp)。特别地,若a不能被p整除,则ap-11(modp)。二次探测定理如果p是一个素数,x是整数且0xp,则方程x21(modp)的解为x=1,p-1。,6.4拉斯维加斯算法,设p(x)是对输入x调用拉斯维加斯算法获得问题的一个解的概率。一个正确的拉斯维加斯算法应该对所有输入x均有p(x)0。在更强意义下,要求存在一个常数0,使得对问题的每一个实例x均有p(x)。思考:给定一个拉斯维加斯算法,设p(x
10、)是对输入x调用它获得问题的一个解的概率,s(x)和e(x)分别是算法对于具体实例x求解成功或失败所需的平均时间,算法找到具体实例x的一个解所需的平均时间是多少?,6.4.1整数因子分解,整数因子分解将大于1的整数n分解为的形式p1,p2,pk是k个素数且p1p2pk,m1,m2,mk是k个正整数如果n是一个合数,则n必有一个非平凡因子x,1xn,使得x可以整除n。给定一个合数n,求n的一个非平凡因子的问题称为整数n的因子分割问题。结合上节的素数测试问题,整数因子分解问题实质上可以转化为整数的因子分割问题,试除法进行因子分割intSplit(intn)intk=floor(sqrt(doubl
11、e(n);for(inti=2;i=k;i+)if(n%i=0)returni;return1;思考:该算法有什么不足?能否设计一个随机算法进行因子分割?,Pollard(n)算法进行因子分割(提高概率)产生0n-1范围内的一个随机数x,令y=x;按照产生一系列的xi对于k=2j(j=0,1,2,),以及,计算xi-xk与n的最大公因子d=gcd(xi-xk,n),如果,则实现对n的一次分割,输出d。,intPollard(intn)RandomNumberrnd;inti=1;intx=rnd.Random(n);/随机整数inty=x;intk=2;,while(true)i+;x=(x*
12、x-1)%n;intd=gcd(y-x,n);if(d1)/endwhile(),6.4.2n皇后问题,问题描述n皇后问题要求将n个皇后放在nn棋盘的不同行、不同列、不同斜线的位置,找出相应的放置方案随机化措施对某行放置皇后的有效位置进行随机对某行所有列位置进行随机,关键代码分析boolQueen:QueensLV()RandomNumberrnd;/随机数产生器intk=1;/下一个放置的皇后编号intcount=1;/记录当前要放置的第k个皇后在第k行的有效位置数while(k0)count=0;for(inti=1;i0)xk+=yrnd.Random(count);return(cou
13、nt0);/count0表示放置成功,boolQueen:QueensLV1(void)/棋盘上随机放置n个皇后拉斯维加斯算法RandomNumberrnd;/随机数产生器intk=1;/下一个放置的皇后编号intcount=maxcout;/尝试产生随机位置的最大次数,用户根据需要设置while(kn);/kn表示放置成功,6.5舍伍德算法,随机快速排序在3.5节确定性算法的基础上,引入随机性操作。随机操作随机选择基准元素关键代码分析intRandPartition(inta,intlow,inthigh)/随机划分RandomNumberrandom;inti=random(high-lo
14、w+1)+low;swap(alow,ai);intj=Partition(a,low,high);returnj;,voidrqs(inta,intleft,intright)/随机快速排序if(leftright)intp=RandPartition(a,left,right);rqs(a,left,p-1);rqs(a,p+1,right);,6.5.2线性时间选择,确定性算法中,首先分组,然后取每一组的中位数,再取每组中位数的中位数,最后以该中位数为基准元素对n个元素进行划分引入随机性成分随机选择一个元素作为基准元素关键代码分析,templateTypeselect(Typea,intleft,intright,intk)RandomNumberrnd;if(left=right)returnaleft;inti=left,j=rnd.Random(right-left+1)+left;swap(ai,aj);j=Partition(a,left
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境教育政策执行效果监测考核试卷
- 交通事故预防技术研发考核试卷
- 手术前后护理评估
- 2025年中国PCB网印刮刀数据监测报告
- 2025年中国3G橱柜板数据监测报告
- 2025至2030年中国香槟酒瓶架市场分析及竞争策略研究报告
- 2025至2030年中国铸铁用孕育剂市场分析及竞争策略研究报告
- 2025至2030年中国通轴型轴向柱塞泵市场分析及竞争策略研究报告
- 2025至2030年中国螺丝玩具车市场分析及竞争策略研究报告
- 2025至2030年中国耐磨环氧地坪涂料市场分析及竞争策略研究报告
- 国开电大《Java语言程序设计》形考任务三答案
- 国开作业《马克思主义基本原理概论》学习行为表现参考(含答案)121
- IATF16949体系培训资料课件
- 中学生法制教育:防电信诈骗课件
- 产房实习生带教计划修改版
- 生活中的立体图形--完整版课件
- 企业安全生产自查台账(建筑施工)
- 综合实践活动评价表完整
- GB∕T 16422.3-2022 塑料 实验室光源暴露试验方法 第3部分:荧光紫外灯
- 菲迪克(FIDIC)简明合同格式-中英对照版
- 浙江省基础教育地方课程(通用内容)标准1-9年级
评论
0/150
提交评论