簡體   English   中英

如何確定隨機算法是否可以使用?

[英]How to decide if randomised algorithm is OK to use?

據我了解,隨機算法可能會給出錯誤的答案,例如,使用收縮算法來解決圖最小割問題,您需要將算法運行n ^ 2 * ln(n)次,以使失敗的可能性不大。正確答案最多為1 / n。 無論失敗的可能性有多小,答案都可能是錯誤的,那么什么時候才允許我們給出錯誤的答案?

首先,我認為您需要區分不同類別的隨機算法:

  1. 蒙特卡洛算法是具有正確性的隨機算法。 根據您的問題,隨機最小割算法就是此類算法的一個示例。

  2. 拉斯維加斯算法是隨機運行時間的算法。 例如,隨機快速排序就是這種算法。

您似乎是在說問題中的蒙特卡洛算法。


蒙特卡洛算法是否適合您的問題,可能無法客觀地回答,因為它基於類似效用經濟理論 給定兩個算法AB ,則每次調用AB都要花費一些時間t,並且得出正確性為c的結果。 實用程序U(t,c)是一個隨機變量,只有您可以確定U A (T,C)的分布是優於還是小於U B (T,C)的分布 一些示例,其中算法A的執行速度是B的兩倍,但以1e-6的概率出錯

  1. 如果這些是網站上的偏好建議,那么讓您的網站的響應能力是競爭對手的兩倍,可能是值得的,這極有可能導致客戶錯誤地提出建議。

  2. 如果這些是用於核反應堆的控制系統(從TemplateTypedef的評論中借用),那么出現故障的機會可能不值得節省時間(例如,您可能最好將處理器投資為運行較慢算法的速度的兩倍) 。

上面的兩個示例表明,對於不同的設置,兩個選擇中的每一個可能都是正確的。 實際上,效用理論很少顯示出明顯錯誤的選擇集。 但是,在Motwani和Raghavan撰寫的《 隨機算法 》一書的導言中,作者確實給出了避免使用蒙特卡洛算法的謬誤的示例。 由於宇宙輻射而導致CPU故障的可能性約為α (其值我忘記了)。 因此,避免運行錯誤概率遠低於α的蒙特卡洛算法可能完全是不合理的。

您將始終需要分析算法的屬性,並確定應用程序中是否可以承受非最佳答案的風險。 (如果答案是布爾值,則“非最佳”與“錯誤”相同。)

有許多編程問題,其中一些接近最優且在合理時間內獲得的答案要比提供得太晚根本沒有提供的最優答案好得多。

旅行商問題就是一個例子。 如果您是沃爾瑪,並且需要每晚為給定的城市集計划送貨路線,那么獲得一條接近最佳路線的狀況要比沒有路線,天真的選擇一條路線或從兩天后獲得的最佳路線要好得多。

隨機算法提供了多種保證。 它們的形式通常為error <= F(cost) ,其中errorcost幾乎可以是任何東西。 成本可以用運行時間表示,也可以用多少次重復運行來尋找更好的答案。 空間也可能計入成本。 該錯誤可能是錯誤的1/0答案的概率,與最佳結果的距離度量,錯誤分量的離散計數等,等等。

有時您只需要面對一個可能錯誤的答案,因為沒有其他有用的選擇。 大數的素數測試屬於此類。 盡管有多項式時間確定性測試,但它們仍然比為所有實際目的產生正確答案的概率測試慢得多。

例如,如果您有一個布爾型隨機函數,其中True結果總是正確的,而False錯誤的概率是50%,那么您的狀態就很好。 (Miller-Rabin素數檢驗實際上比這更好。)

假設您有能力運行該算法40次。 如果有任何運行結果為False,則您知道答案為False。 如果它們全都為True,則如果為false,則真實答案的概率大約為2 ^ 40 = 1 /(1萬億)。

即使在對安全至關重要的應用中,這也可能是一個很好的結果。 一生中被雷擊的幾率約為1 / 10,000。 我們都同意這一點,不要再三思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM