算法设计与分析_第1页
算法设计与分析_第2页
算法设计与分析_第3页
算法设计与分析_第4页
算法设计与分析_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法设计与分析算法设计与分析授课教师:王秋芬授课教师:王秋芬办公地点:办公地点:7307Email: w_第六章第六章 随机化算法随机化算法教学目标教学目标理解产生伪随机数的线性同余法掌握数值随机化算法的特点及应用 掌握蒙特卡罗算法的特点及应用掌握拉斯维加斯算法的特点及应用掌握舍伍德算法的特点及应用6.1概述概述6.1.1随机化算法的类型及特点随机化算法的类型及特点类型类型数值随机化算法数值随机化算法 蒙特卡罗算法蒙特卡罗算法 拉斯维加斯算法拉斯维加斯算法 舍伍德算法舍伍德算法 特点特点数值随机化算法常用于数值问题的求解,所得到的解往数值随机化算法常用于数值问题的求解,所得到的解往往都是近似解

2、,而且近似解的精度随计算时间的增加不往都是近似解,而且近似解的精度随计算时间的增加不断提高。断提高。蒙特卡罗算法每次均能求得问题的一个准确解,但这蒙特卡罗算法每次均能求得问题的一个准确解,但这个解未必是正确的。求得正确解的概率依赖于算法执个解未必是正确的。求得正确解的概率依赖于算法执行时所用的时间,所用的时间越多得到正确解的概率行时所用的时间,所用的时间越多得到正确解的概率就越高。一般情况下,蒙特卡罗算法不能有效地确定就越高。一般情况下,蒙特卡罗算法不能有效地确定求得的解是否正确。求得的解是否正确。 拉斯维加斯算法不会得到不正确的解,一旦找到一个拉斯维加斯算法不会得到不正确的解,一旦找到一个解

3、,那么这个解肯定是正确的。但是有时候拉斯维加解,那么这个解肯定是正确的。但是有时候拉斯维加斯算法可能找不到解。拉斯维加斯算法得到正确解的斯算法可能找不到解。拉斯维加斯算法得到正确解的概率随着算法执行时间的增加而提高。概率随着算法执行时间的增加而提高。舍伍德算法不会改变对应确定性算法的求解结果,每舍伍德算法不会改变对应确定性算法的求解结果,每次运行都能够得到问题的解,并且所得到的解是正确次运行都能够得到问题的解,并且所得到的解是正确的的 6.1.2 随机数发生器随机数发生器随机数发生器随机数发生器 产生随机数的方法产生随机数的方法 伪随机数发生器伪随机数发生器通过一个固定的、可以重复的计算方法产

4、生随机通过一个固定的、可以重复的计算方法产生随机数的发生器数的发生器线性同余法线性同余法 2 , 1mod)(10nmcbaadann,d为种子;为种子;b为系数,满足为系数,满足b0;c为增量,满为增量,满足足c0;m为模数,满足为模数,满足m0。b、c和和m越大越大且且b与与m互质可使随机函数的随机性能更好互质可使随机函数的随机性能更好思考:如何产生思考:如何产生0-1之间的随机数?之间的随机数? /建立随机数类建立随机数类RandomNumber #define m 65536L#define b 1194211693L#define c 12345Lclass RandomNumber

5、 private: unsigned long d; /d为当前种子为当前种子 public: RandomNumber(unsigned long s=0); /缺省值缺省值0表示由系统自动产生表示由系统自动产生种子种子 unsigned short random(unsigned long n); /产生产生0:n-1之间的随机之间的随机整数整数 double fRandom(); /产生产生0,1)之间的随机实数之间的随机实数 ; RandomNumber:RandomNumber(unsigned long s) if(s=0) d=time(0); /用系统时间产生种子用系统时间产生

6、种子 else d=s; /由用户提供种子由用户提供种子 unsigned short RandomNumber:random(unsigned long n) d=b*d+c; /用线性同余计算新的种子用线性同余计算新的种子 return (unsigned short)(d16)%n); /把把d的高的高16位映射到位映射到0(n-1)范围内范围内 double RandomNumber:fRandom() /产生产生0,1)之间的随机实数之间的随机实数 return random(m)/double(m); 6.2数值随机化算法数值随机化算法6.2.1计算计算的值的值将将n个点随机投向一

7、个正方形,设落入此正方形个点随机投向一个正方形,设落入此正方形内切圆(半径为内切圆(半径为r)中的点的数目为)中的点的数目为k,如图,如图6-1a)所示。所示。a)b)0 xy11假设所投入的点落入正方形的任一点的概率相等,假设所投入的点落入正方形的任一点的概率相等,则所投入的点落入圆内的概为则所投入的点落入圆内的概为 。当当n足够大时,足够大时, k与与n之比就逼近这一概率,从而之比就逼近这一概率,从而 在具体实现时只以第一象限为样本且在具体实现时只以第一象限为样本且r取值为取值为1,建,建立直角坐标系,如图立直角坐标系,如图6-1b)所示)所示 4422rrnk4double Darts(

8、int n) static RandomNumber darts; int k=0,i;double x,y;for( i=1;i=n;i+)x=darts.fRandom(); /产生一个产生一个0,1)之间的实数,赋给之间的实数,赋给xy=darts.fRandom(); /产生一个产生一个0,1)之间的实数,赋给之间的实数,赋给y if(x*x+y*y)=1) k+;return 4*k/double(n);6.2.2计算定积分设f(x)是0,1上的连续函数且0f(x)1,需要计算积分值 。假设向单位正方形内随机投入n个点,如果有m个点落入G内,则I近似等于随机点落入G内的概率,即Im/

9、n 10)(dxxfIy=f(x)01x1yG 图6-2 随机投点实验估算I值示意图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)之间的实数,赋给之间的实数,赋给xy=dart.fRandom ( ); /产生一个产生一个0,1)之间的实数,赋给之间的实数,赋给y if(y=f(x) k+;return k/double(n);6.3蒙特卡罗算法设设p是一个实数,且是一个实数,且0.5pn/2时,称元时,称元

10、素素x是数组是数组T的主元素的主元素算法描述算法描述Template bool majority(Type T, int n) / 判定主元素的蒙特卡罗算法判定主元素的蒙特卡罗算法 RandomNumber rnd;int i=rnd.random(n)+1; /产生产生1n之间的随机下标之间的随机下标Type x=Ti; / 随机选择数组元素随机选择数组元素int k=0;for (int j=1;jn/2); /当当 kn/2 时,时,T含有主元素含有主元素 6.3.1主元素问题主元素问题bool majorityMC(Type T, int n, double ) / 重复次调用多次算法

11、重复次调用多次算法majorityint k= (int) ceil(log()/log(1-p);for (int i=1;i=k;i+) if (majority(T,n) return true;return false;6.3.2素数测试素数测试试除法试除法 用用2,3, 去除去除n,判断是否能被整除,如果能,判断是否能被整除,如果能,则为合数,否则为素数。则为合数,否则为素数。算法描述算法描述bool Prime(unsigned int n)int m=floor(sqrt(double(n);for(int i=2;i=m;i+) if(n%i=0) return false;r

12、eturn true; nWilson定理定理对于给定的正整数n,判定n是一个素数的充要条件是(n-1)! -1(mod n)。费尔马小定理费尔马小定理如果p是一个素数且a是整数,则 apa(mod p)。特别地,若a不能被p整除,则ap-11(mod p)。 二次探测定理二次探测定理如果p是一个素数,x是整数且0 x0。在更强意义下,要求存在一个常数在更强意义下,要求存在一个常数0,使得对,使得对问题的每一个实例问题的每一个实例x均有均有p(x)。思考:给定一个拉斯维加斯算法,设思考:给定一个拉斯维加斯算法,设p(x)是对输是对输入入x调用它获得问题的一个解的概率,调用它获得问题的一个解的概

13、率,s(x)和和e(x)分别是算法对于具体实例分别是算法对于具体实例x求解成功或失败所需求解成功或失败所需的平均时间的平均时间 ,算法找到具体实例,算法找到具体实例x的一个解所需的一个解所需的平均时间是多少?的平均时间是多少? )()()(1)()()()(1 ()()(xexpxpxsxnpxexpnxsxnp6.4.1整数因子分解整数因子分解整数因子分解整数因子分解 将大于将大于1的整数的整数n分解为分解为 的形式的形式p1,p2,pk是是k个素数且个素数且p1p2pk,m1,m2,mk是是k个正整数个正整数 如果如果n是一个合数,则是一个合数,则n必有一个非平凡因子必有一个非平凡因子x,

14、1xn,使得,使得x可以整除可以整除n。给定一个合数给定一个合数n,求,求n的一个非平凡因子的问题称的一个非平凡因子的问题称为整数为整数n的因子分割问题。的因子分割问题。结合上节的素数测试问题,整数因子分解问题实结合上节的素数测试问题,整数因子分解问题实质上可以转化为整数的因子分割问题质上可以转化为整数的因子分割问题 kmkmmpppn2121试除法进行因子分割试除法进行因子分割int Split(int n) int k=floor(sqrt(double(n); for (int i=2; i1) & (dn) return d; if (i=k) y=x; k*=2; /end

15、while() 6.4.2 n皇后问题皇后问题问题描述问题描述n皇后问题要求将皇后问题要求将n个皇后放在个皇后放在nn棋盘的不同棋盘的不同行、不同列、不同斜线的位置,找出相应的放置行、不同列、不同斜线的位置,找出相应的放置方案方案 随机化措施随机化措施对某行放置皇后的有效位置进行随机对某行放置皇后的有效位置进行随机对某行所有列位置进行随机对某行所有列位置进行随机关键代码分析关键代码分析bool Queen:QueensLV( ) RandomNumber rnd; /随机数产生器随机数产生器int k=1; /下一个放置的皇后编号下一个放置的皇后编号int count=1;/记录当前要放置的第

16、记录当前要放置的第k个皇后在第个皇后在第k行的有效位置数行的有效位置数while(k0) count=0; for(int i=1;i0) xk+=yrnd.Random(count); return (count0); /count0表示放置成功表示放置成功bool Queen:QueensLV1(void) /棋盘上随机放置棋盘上随机放置n个皇后拉斯维加斯算法个皇后拉斯维加斯算法RandomNumber rnd; /随机数产生器随机数产生器int k=1; /下一个放置的皇后编号下一个放置的皇后编号int count=maxcout;/尝试产生随机位置的最大次数,用户根据需要设尝试产生随机

17、位置的最大次数,用户根据需要设置置while(k=n) int i=0; for(i=1;i=count;i+) xk=rnd.Random(n)+1; if(Place(k)break; /第第k个皇后在第个皇后在第k行的有效位置存于行的有效位置存于y数组数组 if(in); /kn表示放置成功表示放置成功6.5舍伍德算法舍伍德算法随机快速排序随机快速排序在在3.5节确定性算法的基础上,引入随机性操作。节确定性算法的基础上,引入随机性操作。随机操作随机操作随机选择基准元素随机选择基准元素关键代码分析关键代码分析int RandPartition(int a,int low,int high)

18、 /随机划分随机划分 RandomNumber random; int i=random(high-low+1)+low; swap(alow,ai); int j=Partition(a,low,high); return j;void rqs(int a,int left,int right)/随机快速排序 if(leftright) int p=RandPartition(a,left,right);rqs(a,left,p-1); rqs(a,p+1,right); 6.5.2线性时间选择线性时间选择确定性算法中,首先分组,然后取每一组的确定性算法中,首先分组,然后取每一组的中位数,再取每组中位数的中位数,最后以中位数,再取每组中位数的中位数,最后以该中位数为基准元素对该中位数为基准元素对n个元素进行划分个元素进行划分 引入随机性成分引入随机性成分随机选择一个元素作为基准元素随机选择一个元素作为基准元素关键代码分析关键代码分析templateType select(Type a, int left, int right, int k) RandomNumber rnd; if(left=right) return aleft; int i=left, j=rnd.Random(right-left+1)+left; swap(ai, aj); j=Partitio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论