随机算法.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Randomized Algorithms (随机算法) Probabilistic Algorithms (概率算法) 起源可以追溯到20世纪40年代中叶。 当时Monte Carlo在进行数值计算时, 提出通过统计模拟或抽样得到问题的近似解, 而且出现错误的概率随着实验次数的增多而显著地减少, 即可以用时间来换取求解正确性的提高。 但Monte Carlo方法很长时间没有引入到非数值算法中来。 74年,Michael Rabin(76年Turing奖获得者, 哈佛教授, 以色列人) 在瑞典讲演时指出:有些问题,如果不用随机化的方法, 而用确定性的算法,在可以忍受的时间内得不到所需要的结果。 e.g. Presburge算术系统(其中只有加法)中的计算程序, 即使只有100个符号,用每秒1万亿次运算的机器1万亿台、 进行并行计算也需做1万亿年。但如果使用随机性的概念, 可以很快得出结果,而出错率则微乎其微。 74年Rabin关于随机化算法的思想还不太成熟,到76年, Rabin设计了一个判定素数的随机算法,该算法至今仍是一个典范。 随机算法在分布式计算、通信、信息检索、计算几何、密码学 等许多领域都有着广泛的应用。 最著名的是在公开密钥体系、RSA算法方面的应用。 用随机化方法解决问题之例:设有一函数表达式f(x1,x2,…xn), 要判断f在某一区域D中是否恒为0。 如果f不能用数学方法进行形式上的化简 (这在工程中是经常出现的),如何判断就很麻烦。 如果我们随机地产生一个n维的坐标(r1,r2,… rn)(D, 代入f得f(r1,r2,… rn)≠0,则可断定在区域D内f?0。 如果f(r1,r2,… rn)=0,则有两种可能: 1. 在区域D内f≡0;2. 在区域D内f?0,得到上述结果只是巧合。 如果我们对很多个随机产生的坐标进行测试,结果次次均为0, 我们就可以断言f?0的概率是非常之小的。 如上例所示,在随机算法中, 我们不要求算法对所有可能的输入均正确计算, 只要求出现错误的可能性小到可以忽略的程度; 另外我们也不要求对同一输入算法每次执行时给出相同的结果。 我们所关心的是算法在执行时,是否能够产生真正随机的结果。 有不少问题,目前只有效率很差的确定性求解算法, 但用随机算法去求解,可以(很快地)获得相当可信的结果。 随机算法通常分为两大类:Las Vegas算法、Monte Carlo算法。 LasVegas算法总是给出正确的结果, 但在少数应用中,可能出现求不出解的情况。 此时需再次调用算法进行计算,直到获得解为止。 对于此类算法,主要是分析算法的时间复杂度的期望值, 以及调用一次产生失败(求不出解)的概率。 Mont Carlo算法通常不能保证计算出来的结果总是正确的, 一般只能断定所给解的正确性不小于p(<p<1)。 通过算法的反复执行(即以增大算法的执行时间为代价), 能够使发生错误的概率小到可以忽略的程度。 由于每次执行的算法是独立的, 故k次执行均发生错误的概率为(1-p)k。 对于判定问题(回答只能是“Yes”或“No”), Monte Carlo法又分为两类: 带双错的(two-sided error): 回答”Yes”或”No”都有可能错。 带单错的(one-sided error):只有一种回答可能错。 Las Vegas算法可以看成是单错概率为0的Monte Carlo算法。 到底哪一种随机算法好?――依赖于应用。 在不允许发生错误的应用中(e.g. 人造飞船、电网控制等), Monte Carlo算法不可以使用; 若小概率的出错允许的话,Monte Carlo算法比Las Vegas算法 要节省许多时间,是人们常常采用的方法。 随机算法的优点: 对于某一给定的问题,随机算法所需的时间与空间复杂性, 往往比当前已知的、最好的确定性算法要好。 到目前为止设计出来的各种随机算法, 无论是从理解上还是实现上,都是极为简单的。 随机算法避免了去构造最坏情况的例子。 最坏情况虽有可能发生,但是它不依赖于某种固定的模式, 只是由于“运气不好”才出现此种情况。 Random Sampling问题(Las Vegas算法) 设给定n个元素(为简单起见,设为1,2,…n), 要求从n个数中随机地选取m个数(m≤n)。 可以用一个长为n的布尔数组B来标识i是否被选中, 初始时均表为“未选中”。然后随机产生〔1,n〕之间的一个整数i,若B[i]为“未选中”,则将i加入被选中队列, 同时把B[i]标识为“已选中”, 反复执行直到m个不同的数全部被选出为止。 该算法有两个问题: 当n和m很接近时(例n=1000,m=990), 产生最后几个随机数的时间可能很长 (有

文档评论(0)

wangshirufeng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档