本文主要是介绍再学概率论-蒙特卡罗和拉斯维加斯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于喜欢看片的人来说,拉斯维加斯是再熟悉不过了,这座以赌城闻名的城市几乎出现在很多的赌类电影中,而蒙特卡罗也是一个赌城。这里之所以和算法相关联,主要在于概率论最早的使用领地就是赌场之中,而蒙特卡罗算法和拉斯维加斯算法就是其中两种算法的核心原理。
- 蒙特卡罗
为了更加形象的说明两个算法的原理,我们先举一个例子,以防迷失在过多的公式之中。
蒙特卡罗:假如你是一个赌徒,你经常去玩转轮盘游戏,轮盘有0-9是个数字,但是由于使用机械轮盘,很显然,这里的0-9数字并不是均匀的,因而,随着时间的流逝,你开始发现轮盘的结果经常停留在2.8.5这三个点,而0.7.4基本上很少出现。因此,之后的你不在随机选择下注,而时大量下注2.8.5。最后,由于你的这个发现,你开始大量的赢钱,最后你被发现了,进而被赶出了赌场。
这里的赌徒正是使用了蒙特卡洛算法,这种算法原理类似于大数定理,它通过不断地随机行为,从而发现系统的内在规律。就像是计算π值一样,通过不断地随机化正方形的值,计算落在圆中的数目,就能近似求助π的精确值,只要次数足够多,就能无限接近。
蒙特卡罗卡罗在不同的场景中有不同的使用,它主要的作用就是使用计算机来对事物状态随机进行模拟,从而找到事物的分布情况。特别是在概率论中,对于很多问题,我们需要直到其中的概率分布,比如一天交通流量情况、河里鱼群的分布等,由于这里的数据可能很大,我们不可能实际调查,但是由于计算机的存在,如果我们知道了用户位置信息或者车辆信息等等辅助信息,我们就可以通过计算机随机模拟,从而找到其中的分布状态,大大节省人力(举个例子,实际情况可能并非如此)
- 拉斯维加斯
拉斯维加斯算法也是一个随机算法,与蒙特卡罗不同的是,它并不是尽量接近于真实值,而是每次都返回true或者false,一个比较好的例子,就是在100把钥匙中找钥匙,在没有找到钥匙之前,每次的结果都是false。
使用场景,随机快速排序算法:
快速排序有一种优化算法,即如果数字一开始就是倒置的,由于初始参照点的选取在第一个,反而加大了运算复杂度,因而,后来提出了一种随机快速排序算法,即参照点从中间选取,这样,就不会出现增大的情况,但是这种也只能适用于特殊情况。
快速排序算法:它随机选取一个pivot,然后将元素分成三组:所有小于pivot的元素、所有等于pivot的元素以及所有大于pivot的元素。
随机快速排序方法往往消耗大量资源,但保证了确切的答案。因此,在具有少量潜在答案的情景中,倾向于推荐拉斯维加斯方法。
总结:
- 蒙特卡罗算法:采样越多,越接近最优解;(强调每一个iteration都在进步,提高的过程)
- 拉斯维加斯算法:采样越多,越有可能找到最优解,但不保证找到;(强调直接想要最优解)
参考:
https://www.jianshu.com/p/21261fa9f48e
http://www.twoeggz.com/news/10845971.html
这篇关于再学概率论-蒙特卡罗和拉斯维加斯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!