當前位置:編程學習大全網 - 編程語言 - (6)概率算法

(6)概率算法

上面討論的算法的每個計算步驟都是確定的,而這次討論的概率算法允許算法在執行過程中隨機選擇下壹個計算步驟。在很多情況下,當算法在執行過程中面臨選擇時,隨機選擇往往比最優選擇更節省時間。因此,概率算法可以大大降低算法的復雜度。

概率算法的壹個基本特點是,用同壹個概率算法對問題的同壹個例題求解兩次,可能得到完全不同的結果。這兩種解法所需要的時間,甚至所得到的結果都可能大相徑庭。壹般來說,概率算法大致可以分為四類:數值概率算法、蒙特卡羅算法、拉斯維加斯算法和舍伍德算法。

隨機數在隨機化算法的設計中起著非常重要的作用。真正的隨機數不能在真正的計算機上生成,所以隨機化算法中使用的隨機數在某種程度上都是隨機的,即偽隨機數。

線性同余法是產生偽隨機數最常用的方法。線性同余法生成的隨機序列滿足

其中就有。d稱為隨機序列的種子。該方法中常數b、c、m的選取直接關系到生成的隨機序列的隨機性能。這是隨機性理論研究的內容,不在本書討論範圍之內。直觀上,m應該足夠大,所以可取m為機大數,另外,應該取,所以可取b為素數。

為了在設計概率算法時容易生成RandomNumbers,建立了壹個隨機數類random number:這個類包含壹個種子randSeed,需要用戶初始化。給定初始種子,可以生成相應的隨機序列。種子randSeed是壹個無符號長整數,可以由用戶選擇,也可以由系統時間自動生成。Random函數的輸入參數是壹個無符號長整數,它返回壹個範圍內的隨機整數。函數flandom返回[0,1]範圍內的隨機實數。

數值概率算法常用於解決數值問題。這種算法往往得到近似解。近似解的精度隨著計算時間的增加而增加。在很多情況下,計算問題的精確解是不可能或不必要的,因此通過數值概率算法可以得到壹個相當滿意的解。

當最壞情況下確定性算法的計算復雜度與平均情況下的計算復雜度非常不同時

Sherwood算法是壹種確定性算法,它使用隨機算法來消除或減少問題的好例子和壞例子之間的這種差異。舍伍德算法的本質不是避免算法的最壞情況行為,而是試圖消除這種最壞情況行為與具體例子之間的關聯。

思路:利用隨機算法對現有算法進行改造,使算法的性能盡可能與輸入數據無關,即平滑算法的性能。它總能找到解決問題的方法,而且解決方法總是正確的。

算法性能=平均性能+非常小的隨機值。舍伍德算法是為了獲得良好的平均性能。

對於不同的輸入數據,算法具有不同的性能。例如,快速排序算法每次選擇第壹個元素作為基準,並從小到大對序列進行排序:

拉斯維加斯算法不會得到錯誤的解。壹旦用拉斯維加斯算法找到壹個解,它壹定是正確的解。但是有時候拉斯維加斯算法找不到解。

與蒙特卡羅算法類似,拉斯維加斯算法找到正確解的概率隨著其計算時間的增加而增加。對於任何壹個已解問題的例子,用同壹個拉斯維加斯算法重復求解該例子足夠多次,可以使求解失敗的概率任意小。

蒙特卡羅算法用於尋找問題的精確解。對於很多問題,近似解是沒有意義的。比如壹個決策問題的解是“是”還是“否”,沒有近似解。再比如,當我們要求整數的因子時,給出的答案必須是精確的,整數的近似因子沒有任何意義。

用蒙特卡羅算法可以得到問題的壹個解,但這個解不壹定是正確的。找到正確解的概率取決於算法所用的時間。算法花費的時間越多,得到正確解的概率就越高。蒙特卡羅算法的主要缺點也在這裏。壹般情況下,無法有效確定得到的解是否絕對正確。

在實際應用中,我們經常會遇到壹些問題。無論使用確定性算法還是隨機化算法,都不能保證每次都能得到正確答案。壹般來說,蒙特卡羅算法可以保證問題的所有實例都能大概率給出正確解,但通常無法確定某個具體解是否正確。

壹些蒙特卡羅算法不僅具有描述問題示例的輸入參數,還具有描述錯誤解的可接受概率的參數。這類算法的計算時間復雜度通常由問題的案例大小和錯誤解的可接受概率的函數來描述

參考鏈接:/blog/2015/07/蒙特卡羅-方法. html

數值概率算法的應用

舍伍德算法的應用

拉斯維加斯算法的應用

蒙特卡羅算法的應用

  • 上一篇:如何編制C30水泥混凝土路面施工質量監理程序及要點?
  • 下一篇:ai扁平風景插畫教程-如何用ai做插畫
  • copyright 2024編程學習大全網