随机算法gydF4y2Ba
一个gydF4y2Ba随机算法gydF4y2Ba是使用随机源作为其逻辑的一部分的技术。它通常用于降低任一运行时间,或gydF4y2Ba时间复杂度gydF4y2Ba;或存储器使用,或空间复杂度,在标准的算法。该算法通过产生一个随机数,gydF4y2Ba 在指定的数字范围内,并根据基于的决策gydF4y2Ba 的价值。gydF4y2Ba
随机算法可以通过掷硬币或绘图从甲板上的卡,以便做出决定帮助疑问的情况。同样,这种算法可以帮助加快gydF4y2Ba蛮力gydF4y2Ba通过随机采样输入来进行过程以获得可能不完全最佳的解决方案,但对于指定的目的将足够好。gydF4y2Ba
一位督学正试图根据几项指标给一所高中打分,她希望通过秘密采访学生收集的信息来打分。然而,学区主管要对所有的学校都这样做,所以采访每一个学生的时间她负担不起。她该怎么办?gydF4y2Ba
管理者应该采用随机算法,在那里,不知道任何的孩子,她会随意选择一些和采访他们,希望她得到了各种各样的学生。这种技术更常见为gydF4y2Ba随机抽样gydF4y2Ba,这是一种随机算法。当然,她知道,有gydF4y2Ba收益递减gydF4y2Ba当收集到的数据量测量到她试图测量的精确度可接受的程度时,就应该停止。督学决定学校分数的方法可以被认为是一种随机算法。gydF4y2Ba
内容gydF4y2Ba
随机算法的定义gydF4y2Ba
在具有时间或内存约束的情况下呈现时使用随机化算法,并且平均案例解决方案是可接受的输出。由于算法的潜在错误输出,一个gydF4y2Ba算法gydF4y2Ba被称为gydF4y2Ba放大gydF4y2Ba是为了通过牺牲运行时来提高正确性的概率。放大的工作原理是用输入的不同随机子样本重复随机算法几次,并比较它们的结果。随机算法通常只放大过程的一部分,因为太大的放大可能会使运行时间超出给定的限制。gydF4y2Ba
随机算法通常以两种常见的形式设计:作为一个gydF4y2Ba拉斯维加斯gydF4y2Ba或作为一个gydF4y2Ba蒙特卡洛gydF4y2Ba算法。一个拉斯维加斯算法在指定的时间内运行。如果发现时间内的解决方案,该解决方案将是完全正确的;但是,它是可能的,它运行的时间并没有找到任何解决方案。在另一方面,蒙特卡罗算法是一种概率算法,依赖于输入,具有产生不正确的结果或者未完全产生结果的轻微概率。gydF4y2Ba
实际上,计算机不能产生完全随机的数字,所以计算机科学中的随机算法是用a来近似的gydF4y2Ba伪随机数发电机gydF4y2Ba代替真正的随机数来源,如抽牌。gydF4y2Ba
蒙特卡罗算法gydF4y2Ba
直观的解释gydF4y2Ba
可以使用蒙特卡罗随机算法播放游戏,财富之轮。而不是精心地选择字母,玩家(或计算机)选择随机字母来获取解决方案,如下图所示。玩家揭示的是越多的字母,球员就越自信。但是,如果玩家没有快速猜测,那么其他玩家将猜测解决方案也会增加。因此,蒙特卡罗算法被赋予了确定性的时间量,其中它必须基于所显示的信息来提出“猜测”;它可以提出的最好的解决方案。这允许出错的可能性,如果蒙特卡罗算法没有足够的时间来揭示足够的有用字母,则甚至是错误的概率。但是通过时间限制提供算法将采取的时间量,从而降低另一名球员猜测和获取奖品的风险。这是需要注意的重要,但是,从一个标准的蒙特卡洛算法作为游戏本场比赛的不同都有一个正确的解决方案,而对于蒙特卡罗算法中,“足够好”的解决方案是可以接受的输出。gydF4y2Ba
这种算法的术语,蒙特卡罗,是由数学家尼古拉斯大都会,斯坦尼斯拉夫乌拉姆和约翰冯诺伊曼创造的gydF4y2Ba曼哈顿计划gydF4y2Ba,在20世纪40年代。该姓名在1949年发布的一篇研究文件中,由一些来源归因于乌拉姆的叔叔在摩纳哥蒙特卡洛赌博赌博的事实中。gydF4y2Ba[1]gydF4y2Ba
技术的例子:近似gydF4y2Ba
蒙特卡罗算法的一个经典例子是近似的求解gydF4y2BaPI.gydF4y2Ba,gydF4y2Ba ,即圆的周长与直径之比。这个近似问题非常普遍,在大银行和其他数学严谨的公司的程序员职位面试中就会问到这个问题。gydF4y2Ba
想象一下,你是盲目和别人让你找到一个物体的形状。直观地说,解决办法是触摸物体在尽可能多的地方越好,直到一个熟悉的对象浮现在脑海中,在这一点上,你做一个猜测。当近似相同的策略被应用gydF4y2Ba .gydF4y2Ba
从带有x轴的笛卡尔平面(x,y坐标)开始gydF4y2Ba 来gydF4y2Ba , y轴为gydF4y2Ba 来gydF4y2Ba .这是一个gydF4y2Ba 盒子。然后在这个网格上生成许多随机点。数点数,gydF4y2BaCgydF4y2Ba在距离gydF4y2Ba 从原点gydF4y2Ba ,和点数,gydF4y2BaTgydF4y2Ba,不。例如,gydF4y2Ba 小于gydF4y2Ba 从起源开始,但是gydF4y2Ba 是gydF4y2Ba 从起源,由gydF4y2Ba勾股定理gydF4y2Ba.gydF4y2Ba
我们现在可以通过知道圆的面积与矩形边界的面积之比等于圆内点与圆外点之比来近似;也就是说,gydF4y2Ba
)gydF4y2Ba
由此得出结论,随着随机样本的增加,近似gydF4y2Ba 提高,如下所示。gydF4y2Ba
拉斯维加斯算法gydF4y2Ba
直觉gydF4y2Ba
LAS Vegas算法是一种随机算法,总是产生正确的结果,或者根本找不到一个,但不能保证时间约束;这gydF4y2Ba时间复杂度gydF4y2Ba因输入而异。然而,它确实保证了最坏情况下的上界。gydF4y2Ba
拉斯维加斯算法发生几乎每个时代的人看的东西了。想想一个拉斯维加斯算法作为一个任务,当找到解决方法,它有充分的信心,这是正确的解决方案,还没有得到可以有阴暗的路径。作为一个极其概括和简化的例子,一个拉斯维加斯算法可以被认为是用户使用的战略谁的东西在线搜索的。由于网上搜索每一个网站是非常低效的,用户通常会使用上手的搜索引擎。然后,用户将在网上冲浪,直到网站被发现含有正是用户所期待的。Since clicking through links is a decently randomized process, assuming the user does not know exactly what’s contained on the website at the other end of the, the time complexity ranges from getting lucky and reaching the target website on the first link, to being unlucky and spending countless hours to no avail. What makes this a Las Vegas algorithm is that the user knows exactly what she is looking for, so once the website is found, there is no probability of error. Similarly, if the user’s allotted time to surf the web is exceeded, she will terminate the process knowing that the solution was not found.
这个算法的术语,gydF4y2Ba拉斯维加斯gydF4y2Ba这个词是数学家拉兹洛·巴巴伊在1979年发明的,只是为了与更古老的词进行比较gydF4y2Ba蒙特卡洛gydF4y2Ba因为两者都是世界上主要的赌博中心。然而,两者的赌博风格与算法的风格无关,因为不能说拉斯维加斯的赌博总是给出一个正确的,甚至是正的,投票率。gydF4y2Ba[3]gydF4y2Ba
随机的快速排序gydF4y2Ba
一个普通的拉斯维加斯随机算法是gydF4y2BaQuicksort.gydF4y2Ba,一个gydF4y2Ba排序算法gydF4y2Ba在地方各种因素,不使用额外的内存。由于这是一个基于比较算法,进行两两比较的时候会发生最坏的情况下,服用gydF4y2Ba ,所花费的时间随着要排序的位数的平方增长而增长。然而,通过随机化,该算法的运行时间可以减少到gydF4y2Ba .gydF4y2Ba
快速排序施加分而治之范例以排序的数字阵列,gydF4y2Ba .它有三个步骤:首先选择一个枢轴元件,gydF4y2Ba ,使用随机数生成器(即随机算法);然后将数组重新排列为两个子数组gydF4y2Ba 和gydF4y2Ba ,其中第一个数组和第二个数组中的元素比第一个数组和第二个数组中的元素大或小gydF4y2Ba ,分别。gydF4y2Ba
该算法然后递归地在两个独立阵列上递归应用Quicksort的上述步骤,从而输出完全排序的阵列。gydF4y2Ba
伪代码gydF4y2Ba
1 2 3 4 5 6 7 8 9 10 11gydF4y2Ba |
|
在最坏的情况下,这个算法需要O(n²)时间来排序gydF4y2Ba 如果随机选择的主元素是数组中的第一个或最后一个元素,则为数字。gydF4y2Ba
以下是一个gydF4y2Ba时间复杂度gydF4y2Ba快速排序最坏情况的分析。因为每次插入和删除都需要gydF4y2Ba 时间,分割需要时间gydF4y2Ba 时间,因为必须迭代每个项目来创建两个子阵列,如果挑选数组中的最小或最大元素,则分区将导致两个数组:尺寸为0,因为一个极端不会有项目阵列,以及大小的数组gydF4y2Ba ;不包括所选的枢轴元素。因此,运行时分析如下:gydF4y2Ba
最后一步所遵循的地方gydF4y2Ba等差数列gydF4y2Ba.gydF4y2Ba
现在,使用随机QuickSort,其中枢轴随机选择,并且选择了数组中的最小或最大数量,预期的运行时是gydF4y2Ba .gydF4y2Ba
如果算法运气好,每次都选择中值元素,数组就会不断被分成两半,得到的时间复杂度如下:gydF4y2Ba
然而,这种情况发生的概率是1 /gydF4y2Ba 非常小的数字。然而,如果我们获得10%-90%的分成,而不是像上面所示的50%,50%呢?算法仍然有效!这是因为递归树的深度仍然是gydF4y2Ba ,它需要gydF4y2Ba 执行递归树的一级。因此,快速随机排序对数字数组的排序具有很大的优势。gydF4y2Ba
大西洋城算法gydF4y2Ba
蒙特卡洛算法总是快,可能是正确的,而拉斯维加斯的算法有时快,但总是正确的。有一种类型的算法是正确的谎言在这两个的中间,它被称为gydF4y2Ba大西洋城gydF4y2Ba算法。这种算法同时满足了另外两个条件:它几乎总是快速的,而且几乎总是正确的。然而,设计这些算法是一个极其复杂的过程,所以它们很少存在。gydF4y2Ba
计算复杂性gydF4y2Ba
随机化算法有gydF4y2Ba复杂性类gydF4y2Ba因为他们是在gydF4y2Ba概率图灵机gydF4y2Ba.调用最基本的概率复杂性类gydF4y2BaRPgydF4y2Ba,随机多项式时间算法,包含问题与有效的随机算法,采取gydF4y2Ba多项式时间gydF4y2Ba,并以绝对确定性识别不良解决方案,以及概率至少为½的正确解决方案。gydF4y2Ba
放大可以与RP算法一起使用,以增加正确答案被识别的概率。由于上述识别发生的概率是½,所以该算法可以重复gydF4y2Ba 以得到概率为1-的正确解gydF4y2Ba 倍。因此,如果RP算法执行100次,每次得到错误的答案的几率比宇宙射线破坏计算机的内存中运行的算法的几率低!这使得RP算法非常实用。gydF4y2Ba[4]gydF4y2Ba
RP类的补被称为联合RP,这意味着正确的解决方案是接受了绝对的把握,但如果答案不正确,该算法gydF4y2Ba 输出的概率gydF4y2Ba不gydF4y2Ba.gydF4y2Ba
具有多项式时间运行复杂度的随机算法,其输出总是正确的,称为在gydF4y2BaZPPgydF4y2Ba,或零误差概率多项式时间算法。因此,ZPP是拉斯维加斯算法,它同时存在于RP和co-RP中。最后,这类问题的YES和no实例都允许被识别出一些错误,通常被称为蒙特卡罗算法,在复杂性类中称为gydF4y2BaBPP.gydF4y2Ba,有界误差概率多项式时间。gydF4y2Ba
DerandomizationgydF4y2Ba
值得一提的是,有相当多的数学家和理论家正在研究一种高效的去随机化过程,即在保持运行时不变的情况下,从算法中去除所有的随机性。虽然已经开发了一些技术,但是否gydF4y2Ba , 在哪里gydF4y2Ba 是A.gydF4y2Ba多项式时间算法gydF4y2Ba,仍然是一个悬而未决的问题。大多数理论家认为gydF4y2Ba ,但尚未正式证实尚。gydF4y2Ba
查阅有关所涉问题的较技术性参考资料gydF4y2Ba ,参考论文gydF4y2Ba在一个P=BPP的世界里gydF4y2Ba,由Oderg Goldreich的计算机科学教授,在以色列威兹曼科学研究所的数学和计算机科学学院。gydF4y2Ba
附加的例子gydF4y2Ba
在这个时代,效率和性能决定了一个产品的成败;因此,算法设计者关注的是减少计算时间,经常转向随机算法。以下是一些常见的随机算法,在许多流行的计算机科学和数学课程中遇到,以及在日常生活中遇到的常见软件和硬件程序。gydF4y2Ba
素性测试gydF4y2Ba
测试一个数字是否为gydF4y2Ba主要的gydF4y2Ba或者gydF4y2Ba复合gydF4y2Ba一直是跨越几个世纪的问题,今天仍然是一个问题gydF4y2Ba加密gydF4y2Ba在许多其他技术中,保护重要信息的技术都依赖于它。gydF4y2Ba
素性测试gydF4y2Ba是最早在20世纪70年代正式发展起来的随机算法之一,然而,这个想法可以追溯到17世纪,当时费马发表了他的gydF4y2Ba小定理gydF4y2Ba,它可以帮助计算整数的幂gydF4y2Ba模gydF4y2Ba质数。gydF4y2Ba
随机化算法用于执行原始测试,以避免蛮力搜索,这将由消耗耗时的线性搜索到手头的数量的每个素数。gydF4y2Ba
随机的删减。gydF4y2Ba
的gydF4y2Ba最大流Min-cutgydF4y2Ba算法是应用在网络流和一般另一个基本随机算法gydF4y2Ba图的问题gydF4y2Ba.目标是找到最小的边的总权值,如果移除这些边,将断开源与汇聚的连接gydF4y2Ba网络最大流问题gydF4y2Ba.由于必须检查每条边,以确保找到正确的答案,因此,随机算法被开发出来,以加快这一过程,承认算法输出错误答案的可能性很小。更多关于最著名的随机算法的信息,在一个图中最小切割,见gydF4y2BaFord-Fulkerson算法gydF4y2Ba.gydF4y2Ba
矩阵乘积检验的Frievalds算法gydF4y2Ba
鉴于三gydF4y2Ba xgydF4y2Ba 矩阵,gydF4y2Ba一个gydF4y2Ba,gydF4y2BaBgydF4y2Ba,gydF4y2BaCgydF4y2Ba,一个常见的问题是验证是否gydF4y2Ba .由于矩阵乘法是一个相当昂贵的过程,并且检查所声明的等式需要对等式两边逐项进行比较,因此,为了避免这种检验等式的强力方法,已经开发了随机算法。最著名的算法是以Rusins Frievalds命名的,他意识到通过使用随机化,他可以减少这个问题的运行时间gydF4y2Ba蛮力矩阵乘法gydF4y2Ba使用gydF4y2BaStrassen算法gydF4y2Ba,运行时gydF4y2Ba , 到gydF4y2Ba , 在哪里gydF4y2BakgydF4y2Ba是算法执行的次数。虽然Frievald的算法快速,但假设失败的概率小于gydF4y2Ba .gydF4y2Ba
参考书目gydF4y2Ba
demaine,E.,Devadas,S.,Lynch,N。gydF4y2Ba算法的设计与分析gydF4y2Ba.MIT开放课件。检索2016年6月6日,从http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/gydF4y2Ba
Cormen,T .;Leserson,C。Rivest,R。斯坦伊坦,C.gydF4y2Ba算法介绍,第二版。gydF4y2Ba马萨诸塞州剑桥:麻省理工学院出版社,1990年。gydF4y2Ba
参考gydF4y2Ba
- Zhigilei,L.gydF4y2Ba计算 - 材料集团 - 笔记gydF4y2Ba.从2016年6月11日检索到的gydF4y2Bahttp://www.people.virginia.edu/~lz2n/mse524/notes-2003/MC.pdfgydF4y2Ba
- 乔C.gydF4y2Ba蒙特卡罗gydF4y2Ba.2016年6月9日,从gydF4y2Bahttps://simple.wikipedia.org/wiki/monte_carlo_algorithm#/media/file:pi_30k.gif.gydF4y2Ba
- 不列颠哥伦比亚省大学。gydF4y2BaCached-Correspondence-Between-ProfessorsgydF4y2Ba.检索2016年6月,gydF4y2Bawww.cs.ubc.ca /蜘蛛/ hoo /出版/ aaai99-pac.psgydF4y2Ba
- 拉宾,m(2014)。Classifying-Problems-into-Complexity-Classes。gydF4y2Ba进步的计算机gydF4y2Ba,gydF4y2Bavol. - 95gydF4y2Ba, 239 - 292。gydF4y2Ba