




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 随机算法 学习要点 了解随机算法的基本特征 理解产生伪随机数的算法 掌握数值随机化算法的设计思想 掌握舍伍德算法的设计思想 掌握拉斯维加斯算法的设计思想 掌握蒙特卡罗算法的设计思想 随机算法的基本特征 前面各章讨论的算法的每一个步骤都是确定的,而本 章讨论的随机算法允许算法在执行过程中随机地选择一下 计算步骤。 在许多情况下,一般算法比较复杂,性能较差,很 多具有很好平均运行时间的算法,在最坏的情况下,却具 有很坏的性能。由于随机性选择比最优选择省时间,因此 引入随机化算法可以在很大程度上降低算法的复杂度。 随机算法的基本特征 随机算法对所求解问题的同一个实例用同一随机算法求解 两次可能得到完全不同的效果。这两次求解所需要的时间 ,甚至所得到的结果都可能会有相当大的差别。 包括 数值概率算法 蒙特卡罗(Monte Carlo)算法 拉斯维加斯(Las Vegas)算法 舍伍德(Sherwood)算法 数值概率算法常用于数值问题的求解。将一个问题的计算与某 个概率分布已经确定的事件联系起来,求问题的近似解。这类 算法所得到的往往是近似解,且近似解的精度随计算时间的增 加而不断提高。在许多情况下,要计算出问题的精确解是不可 能或没有必要的,因此可以用数值随机化算法得到相当满意的 解。 蒙特卡罗算法用于求问题的准确解,但得到的解未必是正确 的。蒙特卡罗算法以正的概率给出正解,求得正确解的概率 依赖于算法所用的时间。算法所用的时间越多,得到正确解 的概率就越高。一般给定执行步骤的上界,给定一个输入, 算法都是在一个固定的步数内停止的。 随机算法的分类 舍伍德算法总能求得问题的一个解,且所求得的解总是正确的 。当一个确定性算法在最坏情况下的计算复杂性与其在平均情 况下的计算复杂性有较大差别时,可在这个确定性算法中引入 随机性将它改造成一个舍伍德算法,消除或减少问题的好坏实 例间的这种差别(精髓所在)。 拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法 找到一个解,这个解就一定是正确解。但有时可能找不到解。 拉斯维加斯算法找到正确解的概率随着它所用的计算时间的增 加而提高。对于所求解问题的任意实例,用同一拉斯维加斯算 法反复对它求解,可以使求解失效的概率任意小。 随机算法的分类 7.1随机数 7.1随机数 随机数在随机化算法设计中扮演着十分重要的角色。在现实计 算机上无法产生真正的随机数,因此在随机化算法中使用的随 机数都是一定程度上随机的,即伪随机数。 线性同余法是产生伪随机数的最常用的方法。由线性同余法产 生的随机序列a0,a1,an,满足: 其中b0,c0,dm。d称为该随机序列的种子。如何选取该 方法中的常数b、c和m直接关系到所产生的随机序列的随机性 能。这是随机性理论研究的内容,已超出本书讨论的范围。从 直观上看,m应取得充分大,因此可取m为机器大数。 为了在设计概率算法时便于产生所需的随机数,建立 一个随机数类RandomNumber。该类包含一个需有用户初始 化的种子randseed。给定初始种子后,即可产生与之相应 的随机序列。种子seed 是一个无符号长整型数,可由用户 选定也可用系统时间自动产生。函数Random的输入参数 n65536是一个无符号整形数,返回0,n-1范围内的一个 随机整数。函数fRandom()返回0,1内的一个随机实数。 /随机数类 Const unsigned long maxshort = 64436L; Const unsigned long multiplier = 1194211693L; Const unsigned long adder = 12345L; class RandomNumber private: /当前种子 unsigned long randSeed; public: /构造函数,默认值0表示由系统自动产生种子 RandomNumber (unsigned long s = 0); /产生0到n-1之间的随机整数 unsigned short Random (unsigned long n); /产生0,1)之间的随机实数 double fRandom (void); 函数Random在每次计算时,用线性同余式计算 新的种子randSeed。它的高16位的随机性较好。将 randSeed右移16位得到一个065535间的随机整数 ,然后再将此随机整数映射到0(n-1)范围内。 对于函数fRandom,先用函数Random(maxshort) 产生一个0(maxshort-1)之间的整形随机序列,将每 个整型随机数除以maxshort,就得到0,1)区间中的随 机实数。 /产生种子 RandomNumber: RandomNumber(unsigned long s) if (s = 0) randSeed = time (0); /用系统时间产生种子 else randSeed = s; /由用户提供种子 /产生0n-1之间的随机数 Unsigned short RandomNumber: Random (unsigned long n) randSeed = multiplier * randSeed + adder; return (unsigned short) ( (randSeed 16) % n ); /产生0,1)之间的随机实数 Double RandomNumber: fRandom (void) return Random (maxshort) / double (maxshort); 下面用计算机产生的伪随机数来模拟抛硬币实 验。假设抛10次硬币构成一个事件。调用 Random(2)返回一个二值结果。返回0表示抛硬币 得到反面,返回1表示得到正面。下面的算法 TossCoins模拟抛10次硬币这一事件50000次。用 headi (0 i 10)记录这50000此模拟恰好得到i次 正面的次数。最终输出模拟抛硬币事件得到正面事 件的频率图,如下图所示: 0 * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 模拟抛硬币得到的正面事件频率图 void main (void) / 模拟随机抛硬币事件 const int NCOINS = 10; const long NTOSSES = 50000L; / headsi是得到i次正面的次数 long i, headsNCOINS+1; int j, position; / 初始化数组heads for (j=0;j void quicksort_random(Type A,int low,int high) random_seed(0);/* 选择系统当前时间作为随机数种子 */ r_quicksort(A,low,high); /* 递归调用随机快速排序算法 */ void r_quicksort(Type A,int low,int high) int k; if (low Type select(Type a,int l,int k) /计算al:r中第k小元素 static RandomNumber rnd; while (true) if( l =r) return al; int i = l, j=l + rnd.Random(r- l+1); /随机选择划分基准 swap(ai,aj); j=r+1; Type pivot=al; /以划分基准为轴作元素交换 while (true) while (a+ipivot); if (i=j) break; Swap (ai,aj); if (j-l+1=k) return pivot; al=aj; aj=pivot; /对子数组重复划分过程 if (j-l+1 void Shuffle (Type a, int n) /随机洗牌算法 static RandomNumber rnd; for (int i=0; i bool OrderedList :Search(Type x,int Type max = Small; int m = floor(sqrt(double(n); /随机抽取数组元素次数 for (int i=1; i void OrderedList :Insert(Type k) / 插入集合中指定元素 if ( (n=MaxLength) | (k=TailKey) ) return; int index; if (!Search(k,index) value+n = k; linkn =linkindex; linkindex = n; 对于插入运算,首先用Search函数确认待
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字科学课件
- 统编版2025-2026学年五年级上册语文期末专项复习-句子(有答案)
- 江西省赣州市南康区第一中学2024-2025学年高一下学期期中模拟物理试卷(含解析)
- 第二章有理数 单元检测卷提优含解析 2025-2026学年数学苏科版七年级上册
- 汉字学识字课件
- 3D打印技术与应用 知到智慧树见面课答案-1
- 《人体系统解剖学》知到智慧树答案
- 建筑施工协议书集合15篇
- 银行渠道数字化转型的研究报告
- 软件开发行业软件开发平台
- 2023年山东水发集团有限公司招聘笔试题库及答案解析
- SB/T 10941-2012自动制冰机试验方法
- GB/T 6804-2008烧结金属衬套径向压溃强度的测定
- 沙盘游戏治疗(2017)课件
- SY∕T 5280-2018 原油破乳剂通用技术条件
- 苏教版五年级数学下册【全册课件完整版】
- 班组施工任务单
- 职业健康检查结果告知书模板
- 2022年小型发电站设备缺陷管理制度
- 慢性肾衰竭(慢性肾脏病)诊疗指南(内容清晰)
- 钢结构模块化安装施工方案
评论
0/150
提交评论