收藏 分享(赏)

算法分析——6.ppt

上传人:wspkg9802 文档编号:7257914 上传时间:2019-05-11 格式:PPT 页数:93 大小:401.50KB
下载 相关 举报
算法分析——6.ppt_第1页
第1页 / 共93页
算法分析——6.ppt_第2页
第2页 / 共93页
算法分析——6.ppt_第3页
第3页 / 共93页
算法分析——6.ppt_第4页
第4页 / 共93页
算法分析——6.ppt_第5页
第5页 / 共93页
点击查看更多>>
资源描述

1、算法设计与分析,概率算法,概率算法,概率算法 同前几章算法的区别 概率算法允许算法在执行过程中随机地选择下一个计算步骤。 在许多情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时。 概率算法的一个基本特征:对所求解问题的同一实例用同一概率算法求解两次,可能得到完全不同的效果。 反映在求解时间、结果质量等方面。,概率算法的主要类型,概率算法的主要类型 数值概率算法 蒙特卡罗算法 拉斯维加斯算法 舍伍德算法,数值概率算法,数值概率算法 常用于数值问题的求解,得到的往往是近似解 解的精度随计算时间的增加而提高 在许多情况下,计算出问题的精确解是不可能或没必要,蒙特卡罗算法,蒙特卡罗

2、算法 用于求解问题的准确解 在有些情况下,近似解没有意义,比如“0/1”判定问题 可以求得问题的一个解,但该解未必正确 求得正确解的概率依赖于算法的计算时间 蒙特卡罗算法的主要缺点就在于无法有效判定所得到的解是否肯定正确。,拉斯维加斯算法,拉斯维加斯算法 不会得到不正确的解 但有时找不到问题的解 找到正确解的概率随算法计算时间的增加而提高 用同一拉斯维加斯算法反复对问题实例求解足够多次,可使求解失败的概率任意小。,舍伍德算法,舍伍德算法 总能求解得到问题的一个解,而且所求得得解总是正确的。 当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可在这个确定算法中引入

3、随机性,将它改造成一个舍伍德算法,消除或减少问题的好坏实例间的差别。 舍伍德算法的精髓 不是避免算法的最坏情况,而是设法消除这种最坏情形行为与特定实例之间的关联性。,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,随机数,随机数 在科学计算中扮演非常重要的角色。 现有的随机数产生器所产生的随机数都是伪随机数 在一定程度上是随机的 常用的随机数产生方法 线性同余法,线性同余法,随机序列的产生与实验,随机序列的产生 参看教材page241-242 Random fRandom 模拟抛硬币

4、实验 参看教材page243-244,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,通过实例学习数值概率算法,用随机投点法计算值 计算定积分 解非线性方程组,用随机投点法计算值,算法思想 设有一半径为r的圆及其外切四边形。向该正方形随机投掷n个点。落入圆内的点数为k。,计算定积分,用随机投点法计算定积分 用平均值法计算定积分,用随机投点法计算定积分,Y=f(x),用平均值法计算定积分,满足概率分布函数f(x)的要求,算法实现,用随机投点法计算定积分 参看教材page245-246 用平均值法计算定积分 参看教材page246-247,解非线性方程组,利用概率算

5、法求解,算法改进,概率算法在求解非线性方程组时,虽然有些耗时,但实际应用中还是比较有效的,对于那些精度要求较高的问题,概率算法往往会为其提供一个较好的初始值。 算法实现过程参看教材page248-249,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,舍伍德算法,舍伍德算法 目的:设法消除最坏情形行为与特定实例之间的关联性。 其计算时间复杂性对所有实例而言相对均匀,但同相应的确定性算法相比,其平均时间复杂性没有改进。,实例说明,线性时间选择 跳跃表,线性时间选择,线性时间选择 问题所在:选择合适的划分基准 对于选择问题,用拟中位数作为划分基准可以保证在最坏情况下

6、用线性时间完成选择。 舍伍德型选择算法 随机选择一个组元素作为划分基准,既保证算法的线性时间平均性能,又可以避免计算中位数的麻烦。,Select算法分析,Select算法分析,考虑这种情况:无论n是奇数还是偶数,T(n/2)都出现2次,结论,结论 非递归的舍伍德型选择算法Select可以在O(n)平均时间内找出个输入元素中的第小元素 提示 对于某些确定性算法,可以将其改造成舍伍德算法,使得该算法以高概率对任何实例均有效。 对于某些不能直接改造的情况,可以借助预处理技术,不改变原有的确定性算法,而仅对其输入元素进行随机洗牌,同样可以收到舍伍德算法的效果。,跳跃表,跳跃表 如果用有序链表来表示一个

7、含有个元素的有序集合,则在最坏情况下,搜索中的一个元素需要(n)计算时间。为了跳高效率,可以在部分结点处增加附加指针来提高搜索性能(借助这些附加指针,可以跳过链表中的若干结点,从而加快搜索速度)。这种增加了向前附加指针的有序链表称为跳跃表。,举例说明,没有附加指针的有序链表,如何进行搜索?,问题:如何在该跳跃表中搜索元素?,如何在该跳跃表中搜索元素?,元素不在集合中,有序链表跳跃表,存在的问题,随机算法的引入,解决方案 采用随机化方法来确定附加指针的增加结点位置和数量。使得跳跃表可以在O(logn)平均时间内支持关于有序集的搜索、插入和删除等运算操作。 实现方案参看教材page255-256,

8、如何保持附加指针的平衡性,如何随机生成新插入结点的级别,附加指针的平衡性,可用于指导附加指针的设置,解决方案,具体实现说明请参看教材page254,随机生成新插入结点的级别,解决方案 在完全跳跃表中,具有i级指针的结点中有一半同时具有i+1级指针 方案 事先确定一个实数p(0=p为止。 为避免出现过大的结点级别,用log1/pn作为新结点级别的上界 参看教材page254-255,跳跃表的算法实现,跳跃表的算法实现 参看教材page254-259,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,拉斯维加斯算法,拉斯维加斯算法(Las Vegas) 能够显著改进算

9、法的有效性,对某些目前还找不到有效算法的问题,也能得到较为满意的算法 不会得到不正确的解,但有时找不到问题的解 通常用boolean型方法来表示拉斯维加斯算法 找到解,返回true; 未找到解,返回false; 此时,可以对同一实例再次调用相同的算法,效率分析,Public static void obstinate( Object x, Object y) boolean success = false;while ( !success ) success = lv( x, y ) ,设p(x)是对输入调用拉斯维加斯算法获得问题一个解的概率,p(x)0 设t(x)是算法obstinate对于

10、具体实例找到解的平均时间 s(x)和e(x)分别是算法对于具体实例求解成功或失败所需的平均时间,实例说明,实例说明 后问题 整数因子分解,后问题,后问题 问题描述:在n*n格的棋盘上放置彼此不受攻击的个皇后。 用回溯法求解时,算法系统地对整个解空间树进行搜索,从而得到问题的解,时问题的一个解,被忽视的问题细节,被忽视的问题细节 对于后问题的任意一个解,每个皇后在棋盘上的位置无任何规律,不具有系统性(更象是被随机放置的);,算法实现,Public static void nQueen() x = new intn+1; for(int i=0;i=n;i+) xi=0; /初始化x/反复调用随机

11、放置皇后的拉斯维加斯算法,直到放置成功while ( !queensLV() ); ,!存在的问题: 一旦出现无法下一个皇后无法放置的情况,整个放置方案就需要推倒重来,而该方案中不排除包含部分合理的皇后位置设置,解决方案,随机放置的皇后数越多,后续回溯搜索的时间就越少,但失败概率也越大,*算法实现参看教材page261-263,随机放置皇后数对算法效率的影响,解皇后问题的拉斯维加斯算法中,随机放置皇后数所对应的算法效率,整数因子分解,用于整数因子分割的split算法,private static void split(n) int m = (int)Math.floor(Math.sqrt(d

12、ouble)n); for(int i=2;i=m;i+) if(n%i=0) return I;return 1; ,分析,分析 对于解整数因子分解问题,目前还没有找到多项式时间算法; 算法split(n)是对1x的所有整数进行试除而得到范围在1x2的任意整数的因子分割; 基于拉斯维加斯算法的整数因子分解问题求解方案 Pollard算法用split(n)算法相同的工作量可以得到在在1x范围内整数的因子分割,Pollard算法,*算法实现参看教材page265,花絮,Shor 算法 量子计算机理论的重要里程碑 算法显示如何以量子计算机实现大数质因子分解的最佳算法。 P. W. Shor, Pr

13、oceedings of the 35th Annual Symposium on the Foundations of Computer Sicence, eds. S. Goldwasser, p.124 (1994). 对当前公钥密码体系提出了挑战,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,蒙特卡罗算法,蒙特卡罗算法 可以求得问题的一个解,但该解未必正确,知识点,蒙特卡罗算法的基本思想 实例分析 主元素问题 素数测试,知识点,蒙特卡罗算法的基本思想 实例分析 主元素问题 素数测试,基本概念,偏真蒙特卡罗算法,偏真蒙特卡罗算法 设MC(x)是解某个判定

14、问题的蒙特卡罗算法。当MC(x)返回true时,解总是正确的,仅当它返回false时有可能产生错误的解。这类蒙特卡罗算法被称为偏真蒙特卡罗算法。 当多次调用一个偏真蒙特卡罗算法,只要有一次调用返回true,则可以判定相应的解为true; 对于偏真蒙特卡罗算法,p0即可;,偏y0蒙特卡罗算法,分析,总结,知识点,蒙特卡罗算法的基本思想 实例分析 主元素问题 素数测试,主元素问题,public static boolean majority(int t,int n) rnd = new Random();int i = rnd.fRandom(); int x=ti;/随机选择数组元素int k=

15、0;for(int j=1;in/2);/kn/2时,含有主元素 ,改进重复调用次,public static boolean majority2(int t,int n) if(majority(t,n) return true;else return majority(t,n); ,如果不含有主元素,则majority返回的肯定是false,则且majority2也返回false;,当含有主元素时, majority2返回true的概率为p+(1-p)p3/4 majority2是一个偏真3/4正确的蒙特卡罗算法,素数测试,素数测试 Wilson定理:对于给定的正整数,判定它为一个素数的充

16、要条件是(n-1)!-1(mod n) 理论价值高,但实际测试计算量大 目前,尚未找到素数测试的有效确定性方法或拉斯维加斯算法 费尔马小定理,费尔马小定理,费尔马小定理 如果是一个素数,且0ap,则ap-11(mod p) 判定一个数是否为素数的必要条件 满足费尔马小定理条件的整数未必都是素数,比如561,这些满足条件的合数被称做Carmichael数 采用二次探测定理来避免将这些合数误判为素数,二次探测定理,二次探测定理 如果是一个素数,且0xp,则方程x21(mod p)的解为x=1,p-1 可以在利用费尔马小定理计算an-1 mod n的过程中增加对于整数的二次测试。,*素数测试的蒙特卡罗算法的实现参看教材page265,提纲,随机数 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 本章小结,本章小结,本章小结 概率算法的基本特征 四种类型的概率算法(基本概念实例分析) 数值概率算法 蒙特卡罗算法 拉斯维加斯算法 舍伍德算法,本章作业,课本第章课后练习 作业: 7-5,7-8,7-10,7-13, 7-15, 7-18 上传到“/算法分析/第6次作业/”目录下,下一章内容,近似算法 近似算法的性能 实例分析,

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

当前位置:首页 > 网络科技 > 数据结构与算法

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


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

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

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