1. 程式人生 > >再學概率論-蒙特卡羅和拉斯維加斯

再學概率論-蒙特卡羅和拉斯維加斯

對於喜歡看片的人來說,拉斯維加斯是再熟悉不過了,這座以賭城聞名的城市幾乎出現在很多的賭類電影中,而蒙特卡羅也是一個賭城。這裡之所以和演算法相關聯,主要在於概率論最早的使用領地就是賭場之中,而蒙特卡羅演算法和拉斯維加斯演算法就是其中兩種演算法的核心原理。

  • 蒙特卡羅

為了更加形象的說明兩個演算法的原理,我們先舉一個例子,以防迷失在過多的公式之中。
蒙特卡羅:假如你是一個賭徒,你經常去玩轉輪盤遊戲,輪盤有0-9是個數字,但是由於使用機械輪盤,很顯然,這裡的0-9數字並不是均勻的,因而,隨著時間的流逝,你開始發現輪盤的結果經常停留在2.8.5這三個點,而0.7.4基本上很少出現。因此,之後的你不在隨機選擇下注,而時大量下注2.8.5。最後,由於你的這個發現,你開始大量的贏錢,最後你被發現了,進而被趕出了賭場。
這裡的賭徒正是使用了蒙特卡洛演算法,這種演算法原理類似於大數定理,它通過不斷地隨機行為,從而發現系統的內在規律。就像是計算π值一樣,通過不斷地隨機化正方形的值,計算落在圓中的數目,就能近似求助π的精確值,只要次數足夠多,就能無限接近。
使用蒙特卡羅方法估算π值. 放置30000個隨機點後,π的估算值與真實值相差0.07%.

蒙特卡羅卡羅在不同的場景中有不同的使用,它主要的作用就是使用計算機來對事物狀態隨機進行模擬,從而找到事物的分佈情況。特別是在概率論中,對於很多問題,我們需要直到其中的概率分佈,比如一天交通流量情況、河裡魚群的分佈等,由於這裡的資料可能很大,我們不可能實際調查,但是由於計算機的存在,如果我們知道了使用者位置資訊或者車輛資訊等等輔助資訊,我們就可以通過計算機隨機模擬,從而找到其中的分佈狀態,大大節省人力(舉個例子,實際情況可能並非如此)

  • 拉斯維加斯

拉斯維加斯演算法也是一個隨機演算法,與蒙特卡羅不同的是,它並不是儘量接近於真實值,而是每次都返回true或者false,一個比較好的例子,就是在100把鑰匙中找鑰匙,在沒有找到鑰匙之前,每次的結果都是false。

使用場景,隨機快速排序演算法:
快速排序有一種優化演算法,即如果數字一開始就是倒置的,由於初始參照點的選取在第一個,反而加大了運算複雜度,因而,後來提出了一種隨機快速排序演算法,即參照點從中間選取,這樣,就不會出現增大的情況,但是這種也只能適用於特殊情況。

快速排序演算法:它隨機選取一個pivot,然後將元素分成三組:所有小於pivot的元素、所有等於pivot的元素以及所有大於pivot的元素。

隨機快速排序
隨機快速排序方法往往消耗大量資源,但保證了確切的答案。因此,在具有少量潛在答案的情景中,傾向於推薦拉斯維加斯方法。

總結:

  • 蒙特卡羅演算法:取樣越多,越接近最優解;(強調每一個iteration都在進步,提高的過程)
  • 拉斯維加斯演算法:取樣越多,越有可能找到最優解,但不保證找到;(強調直接想要最優解)