收藏 分享(赏)

第9章 随机算法.ppt

上传人:hskm5268 文档编号:8611400 上传时间:2019-07-05 格式:PPT 页数:35 大小:113KB
下载 相关 举报
第9章 随机算法.ppt_第1页
第1页 / 共35页
第9章 随机算法.ppt_第2页
第2页 / 共35页
第9章 随机算法.ppt_第3页
第3页 / 共35页
第9章 随机算法.ppt_第4页
第4页 / 共35页
第9章 随机算法.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、第9章 随机算法,1. 随机算法引例 2. 随机算法的类型 3. 舍伍德算法 4. 拉斯维加斯算法 5. 蒙特卡罗算法,1. 随机算法引例,r,r,由此推导出:,2. 随机算法的类型,第1类算法:数值概率算法。用于数值问题求解,所得到的几乎都是近似解,但计算精度随着计算时间的增加而不断提高。引例中就是一个数值概率算法;在给定函数f(x)的定义域和x与f(x)之间的映射关系,求解f(x)的最值时,可以用数值概率算法。 第2类算法:舍伍德算法。舍伍德算法不会从整体上或平均的改善问题求解的时间复杂度,但可以对一些特别耗时的特定输入改善至较适中的时间复杂度,第3类概率算法是拉斯维加斯算法。该算法可能给

2、出问题的正确答案,也可能得不到问题的正确答案。但对所求解的问题,用同一个拉斯维加斯算法反复求解多次,可以使得求解失效的概率任意小 蒙特卡罗算法总能得到问题的答案,但偶尔会产生不正确的答案。有时并不能判断给出的答案是否正确。重复运行算法使得产生不正确解的概率任意小,3. 舍伍德算法,3.1 舍伍德算法概述 3.2 随机快速排序算法 3.3 随机选择算法,3.1 舍伍德算法概述,假设TA(x)是确定性算法A对一个输入实例x的运行时间,则,上述算法可能存在某个x使得TA(x)远远大于平均时间复杂度。舍伍德类型算法通过向确定性算法A中加入随机因子,使得每一个输入实例与平均时间复杂度相差不大,3.2 随

3、机快速排序算法,快速排序的时间复杂度最好情况下是O(nlogn),最坏情况下是O(n2),平均情况是O(nlogn)。最坏情况的出现原因是:待排序的对象已经基本上排序完毕,使得问题的中轴始终处于所有数据的某端或接近于某端 为了排除上述情况,可以在中轴选取时,引入随机因子:端点和某个随机位置的数据交换。这使得中轴不大可能是最小(最大)值,或接近最小(最大)值的数值 有没有更保险的算法?,3.3 随机选择算法,从n个元素中选择第k小的元素,存在一个O(n)级别的算法,这个算法的时间复杂度上界是20n,具有一个较大的常数 上述算法最耗时的地方是:查找一个合适的中轴(把所有元素分成n/5组,每组5个,

4、找出每组中数,然后找出所有元素的近似中数) 计算元素中数的过程可以省略,取而代之的是在所有元素中取得一个随机位置,然后让这个位置上的数作为中数 这个随机算法的时间复杂度小于4n 是否可以继续改进这个随机算法?,4. 拉斯维加斯算法,4.1 拉斯维加斯算法概述 4.2 八皇后问题 4.3 字符串匹配,拉斯维加斯型概率算法有时成功,有时失败 当出现失败时,只要在相同的输入实例上再次运行相同的拉斯维加斯概率算法,就又有成功的可能 假设 BOOL las_vegas(P(x)是针对问题P的某个实例x的运行代码,则拉斯维加斯执行下面代码: while( !las_vegas(P(x) 假设p(x)是输入

5、实例x和运行成功的概率之间的关系,如果存在常数,使得p(x) ,就认为该拉斯维加斯算法正确,随着时间增加,可以让算法的错误概率(1- )k任意小,4.1 拉斯维加斯算法概述,4.2 八皇后问题,可以把拉斯维加斯概率算法和回溯法结合解决八皇后问题 单行随机选择的拉斯维加斯算法:单行选择位置时和回溯法相似,只是位置并不是从左到右遍历,而是随机在一行中选择一个位置。如果经过多次(预设的值)找不到,就回溯 多行随机选择的拉斯维加斯算法:在已有选择的基础上,对紧跟的多行随机选择位置。要同时保障满足两个约束:新添行之间的约束;与前面已有行的约束。如果经过多次(预设的值)找不到,就回溯 整体随机选择的拉斯维

6、加斯算法:在n行上随机选择n个列,如果满足约束就是一个解;如果不满足,就重新选择,4.3 字符串匹配,4.3.1 哈希查找概述 4.3.2 简单的哈希函数 4.3.3 字符串匹配算法总结 4.3.4 字符串匹配的拉斯维加斯算法,4.3.1 哈希查找概述,哈希查找算法是一个高效的算法,如果设计得当,可以通过O(1)的比较次数找到所需元素 哈希查找算法不可避免地会有地址冲突的问题 哈希算法的思想有许多其他的应用,例如在挖掘关联规则的过程中利用哈希查找的办法发现二次的大项集,4.3.2 简单的哈希函数,网络传输的冗余位就是一个哈希函数,1 1 0 1 0 0 1 0,虽然不能保证冗余位相同的两个字节

7、相同,但冗余位不同的两个字节一定是不同的 网络传输中的一位出现了错误是能够发现的,而这又是最常见的情况,4.3.3 字符串匹配算法总结,朴素的匹配算法。时间复杂度O(mn) KMP算法。时间复杂度O(m+n),4.3.4 字符串匹配的拉斯维加斯算法,一个简单例子:假设字符集是a, b, c, d。在母串“b c b c c d a b c”中查找子串“c d a” 任意取一个素数19(在计算允许的情况下越打越好) 把子串“c d a”变换成4进制数2 3 0,这个数对应的十进制数是44,模19之后的数是6 计算母串的前3个字符的4进制模19的数值,是6,因此,前3个字符构成的子串有可能和模式串

8、匹配,通过朴素的算法发现它们不匹配,字符集是a, b, c, d。母串“b c b c c d a b c”中查找子串“c d a” 由“b c d”的哈希值可以花费O(1)的计算得到“c b c”的哈希值。计算过程如下:(6-16*1)%19 = 9;(9*4)%19 = 17, (17+2)%19=0,即“c b c”的哈希值是0。通过验证可以发现这个计算是正确的。 依次可以计算“bcc”、 “ccd”、的哈希值。如果和模式串的哈希值6相同,则朴素匹配验证;否则,掠过。,基于哈希计算的字符串匹配算法是拉斯维加斯型概率算法,母串的子串与模式串的哈希值相等时并不能保证匹配成功,而需要用朴素的方

9、式进行验证 拉斯维加斯型概率算法的时间复杂度是O(m+n),当伪匹配大量出现时,复杂度会有所增加 当所选素数足够大时,能够保证不出现伪匹配。但算法所能容忍的素数大小与计算机的处理位数有关。例如,64位机所能采用的素数不会超过264。否则,虽然减少了伪匹配的可能性,但增加了每次移动窗口所需的计算量,5. 蒙特卡罗算法,5.1 蒙特卡罗算法概述 5.2 主元素问题 5.3 素数测试问题,5.1 蒙特卡罗算法概述,蒙特卡罗算法用于求问题的准确解。它偶尔会出错,但对任何输入实例,总能以很高的概率找到正确解 假设p是一个实数,1/2p1。如果蒙特卡罗型概率算法对问题的任意输入实例得到正确解的概率不小于p

10、,则称该蒙特卡罗概率型算法是p正确的 如果对于同一实例,蒙特卡罗概率型算法不会给出两个不同的解释,则称该蒙特卡罗型概率算法是一致的 如果某个蒙特卡罗型算法是p正确的,又是一致的,则可以重复、独立地运行这个算法,使得产生不正确解的概率任意小,5.2 主元素问题,5.2.1 主元素问题描述 5.2.3 主元素问题的蒙特卡罗型概率算法求解 5.2.4 主元素问题的蒙特卡罗型概率算法求解的时间复杂度估计,设Tn是一个含有n个元素的数组,x是数组T的一个元素,如果数组中有一半与x相同,则称x是Tn的主元素 一个数组可以不存在主元素。如果存在,则至多有一个 例如,在数组T7 = 3, 2, 3, 2, 3

11、, 3, 5中,元素3就是主元素,5.2.1 主元素问题描述,5.2.3 主元素问题的蒙特卡罗型概率算法求解,(1) 随机找出一个元素 (2) 遍历整个数组,验证这个元素是不是数组的主元素。如果是,运行成功,返回这个解;否则返回第(1)步,5.2.4 主元素问题的蒙特卡罗型概率算法求解的时间复杂度估计,如果主元素在整个数组中的比例是p(显然p1/2),那么每一次挑出的元素不是主元素的概率小于1/2; 连续运行k次,结果返回false的概率小于2-k; 对于给定的任何0,如果要求算法错误概率小于,则需要运行log2(1/ )次。每次需要一趟验证。因此,整体的时间复杂度是O(n log2(1/ )

12、,5.3 素数测试问题,5.3.1 素数概述 5.3.2 有关素数运算的核心基础 5.3.3 朴素的素数测试算法 5.3.4 费马定理 5.3.5 Charmichael数 5.3.6 伪证据 5.3.7 二次探测定理 5.3.8 Miller测试,5.3.1 素数概述,素数是数论的研究的核心和骨架 素数和密码学有着极密切的关系 素数中的主要议题有3个:判断一个整数是不是素数;如果知道一个数不是素数,怎样对它分解;快速发现一个很大的素数 素数对整数是稀疏的,5.3.2 有关素数运算的核心基础,整体计算复杂度可以用n的二进制表示位数m表示O(m)。如果再考虑y本身是一个大数,其位数为t,则整体的

13、复杂度为O(mmt),5.3.3 朴素的素数测试算法,素数的朴素测试算法是:对一个整数n,从2到n1/2分别去除n,如果有一个整除n就不是素数;如果全部不整除,n才是素数 这个算法的时间复杂度是O(n1/2)。如果考虑到n是特别大的数这个复杂度会更高一些 对素数的算法一般要以logn作为基础,例如(logn)2、 (logn)3等等。如果某个素数算法的时间复杂度高于这些量级,一般认为是不可行的 但朴素的素数测试算法在建立最初的素数表时也是经常用的,5.3.4 费马定理,如果n是素数,a为正整数且0an,则有:,费马定理是素数判断的一个必要条件,而不是充分条件 例如341是否合数(341 = 3

14、1*11),但有: 2340 mod 341 = 1,5.3.5 Charmichael数,符合费马定理的合数称为Carmichael数 Carmichael数非常少。在1, 1亿的整数中,有255个Carmichael数 为了提高判断素数的准确性,可以多次随机选取小于n的正整数a,使得判断出n为合数的概率不断增加,5.3.6 伪证据,当一个合数n对于整数a满足费马定理时,称整数a为合数n的伪证据 伪证据相当少。小于1000的332个合数中,只有5个没有伪证据;超过一半的合数最多只有2个伪证据;超过15个伪证据的合数不超过160个。如果把n的范围扩大,这个概率会更小 但有些合数的伪证据比例相当

15、高。小于1000的合数中,情况最坏的是561,它有318个伪证据;15位的合数651 693 055 693 681的伪证据占所有测试数据的99.9965%,5.3.7 二次探测定理,二次探测定理:如果n是一个素数,x为正整数且0xn,则方程x2 mod n = 1的解为x=1或x=n-1 利用二次探测定理,可以在计算an-1 mod n 的过程中增加二次探测,如果n违背二次探测定理,则它不是素数,5.3.8 Miller测试,如果n是素数,则n-1必是偶数,可以令n-1=2qm,并考虑下面的测试序列: am(mod n), a2m(mod n) a4m (mod n) a2*2*2*2m (mod n),(最后一项中共有q个2相乘) 上述测试称为Miller测试 如果n是合数,a是小于n的正整数,则n对以a为底的Miller测试结果为真的概率小于1/4,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报