隨機化演算法
隨機化演算法
數值隨機演算法
這類演算法常用於數值問題的求解。 得到的往往是近似解,而近似解的精度與計算時間正相關。
E.g. 用投點方式計算圓的面積
圓半徑已知。 設想一個將整個圓包括其中的矩形,面積已知。 在矩形內隨機投入一定數量的點,對每個點檢測是否在圓內。
通過計算在圓內的點的數量比上投點的總量是圓佔矩形的比例。再乘以矩形面積可得圓的面積。
舍伍德演算法
我們知道一些演算法對特定的輸入會有不同的效率表現(我記得這類演算法被稱為輸入敏感型演算法)。
一個經典的例子是快速排序。對於接近有序的輸入,快速排序的效率會退化到O(n ^ 2)
的水平。
好在一般來說,這類壞例子所佔比例不大。如果我們的輸入資料是完全隨機的,效率表現還是可以的。
實際應用時的資料集其實不太可能符合完全隨機的要求,更有可能是在輸入空間內區域性聚集的。 一種解決辦法是消除特定資料與演算法表現之間的關係。在演算法過程中引入隨機。這就是舍伍德演算法的思想。
E.g. 隨機化快速排序
快速排序演算法中的特定資料與演算法表現之間的關係是通過固定的軸點選取引起的。
當我們始終選取第一個元素作為軸點,則演算法對於已排序的資料退化。 如果我們隨機選取軸點,則不會有一個固定輸入例項與退化情形關聯。
注意,在具體執行時仍有可能會出現一個輸入例項和一個隨機軸點序列一起發生退化,但此時這種退化不針對具體輸入空間,即演算法已對輸入不敏感。
E.g. 跳躍表
拉斯維加斯演算法
拉斯維加斯演算法是一種搜尋解的演算法,類似於貪心演算法,不想通過完備的計算得出一個區域性決策的解。 對此,拉斯維加斯演算法的解決方法是引入隨機決策。
引入隨機決策直接導致演算法的準確性下降,這一點可以由得到了巨大提升的演算法效率來彌補,也就是多執行幾次。 另一方面,可以採用混合策略:通過隨機決策迅速縮小搜尋空間,到達某一閥值後改用完全的搜尋。
E.g. : Pollard整數分解
蒙特卡羅演算法
蒙特卡羅演算法與拉斯維加斯演算法相似,通過在搜尋過程中引入隨機決策來提高演算法的效率。 與拉斯維加斯演算法不同的是:
- 拉斯維加斯演算法可以給出問題的準確解,或者告知演算法沒有找到解
- 蒙特卡羅演算法只給出概率意義上的解,即給出的解有p的概率是正確的
多次應用蒙特卡羅演算法可以快速提高演算法正確的概率。例如,如果演算法的正確解是唯一的,一次執行可以得出一個1 / 2
正確的答案。如果演算法執行n次的結果都是x,則x為正解的概率為1 - (1 / 2) ^ n
。
由此可見,蒙特卡羅演算法比較適用於判定問題,我們可以用一個p正確的隨機決策來代替確定的判定演算法,而執行隨機決策足夠多次就可以得出極可能正確的答案。
E.g. 尋找主元素
對於一個存在主元素的陣列,主元素是這個陣列中出現次數過陣列大小一半的元素。
我們可以在陣列中任選一個,(對於主元素存在的陣列)它是主元素的概率至少是1 / 2
。
此時我們掃描整個陣列,可以判斷其是否是主元素,這個演算法有超過1 / 2
的概率找到主元素,並且它找到的一定是主元素。
如果我們重複執行上述演算法常數(c)次,得到一個O(n)
的演算法,有1 - (1 / 2) ^ c
的可能性正確。
PS:尋找主元素存在O(n)
的確定演算法,參考《程式設計之美》
E.g. :素性測試
相關文章
- 隨機演算法隨機演算法
- 隨機化演算法(5) — 蒙特卡羅(Monte Carlo)演算法隨機演算法
- 【隨機演算法】洗牌隨機演算法
- 隨機演算法 概率演算法隨機演算法
- POJ 3318 Matrix Multiplication(隨機化演算法)隨機演算法
- CTF中的最佳化隨機演算法(爬山&退火)隨機演算法
- 隨機森林演算法隨機森林演算法
- javaScript隨機排序演算法JavaScript隨機排序演算法
- **PHP隨機數演算法PHP隨機演算法
- 隨機森林演算法梳理隨機森林演算法
- 隨機迷宮生成演算法隨機演算法
- 演算法隨筆——DP最佳化演算法
- CUDA 的隨機數演算法 API隨機演算法API
- 隨機森林演算法原理剖析隨機森林演算法
- MAC地址隨機化介紹Mac隨機
- 隨機化處理技術隨機
- 隨機森林演算法深入淺出隨機森林演算法
- 機器學習演算法的隨機資料生成機器學習演算法隨機
- 【演算法】3 由招聘問題看隨機演算法演算法隨機
- 弱隨機化種子漏洞科普隨機
- 風場視覺化:隨機重置視覺化隨機
- JavaScript 背景顏色隨機變化JavaScript隨機
- 加權輪詢和加權隨機演算法隨機演算法
- 權重隨機演算法的java實現隨機演算法Java
- 分享一個生成隨機序列的演算法隨機演算法
- 隨機之美,隨機森林隨機森林
- MySQL隨機選取資源--優化MySql隨機優化
- 向量(高階的隨機化應用)隨機
- 機器學習演算法的隨機資料生成總結機器學習演算法隨機
- 瞭解 “MAC 地址隨機化” 刻不容緩Mac隨機
- [Z]Oracle 的隨機數、隨機日期和時間、隨機字串Oracle隨機字串
- 將手機號轉化為由隨機字母表示隨機
- 演算法隨筆——主席樹(可持久化線段樹)演算法持久化
- python生成隨機數、隨機字串Python隨機字串
- 實現陣列的隨機排序(含洗牌演算法)陣列隨機排序演算法
- 基於量子隨機遊走的影像加密演算法隨機加密演算法
- 隨機森林演算法原理與Python實現隨機森林演算法Python
- 資料結構和演算法面試題系列—隨機演算法總結資料結構演算法面試題隨機