- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)