隨機化演算法randomized algorithm)是在邏輯或執行過程中使用隨機性的演算法。這類演算法通常使用均勻隨機位元作為輔助輸入,以引導演算法的行為,並期望在所有可能的隨機選擇之平均情況下取得良好效能。因此,隨機化演算法的執行時間、輸出結果,或兩者都可能是隨機變數。[1]

隨機化演算法可依其對正確性與執行時間的保證分為不同類型。一類演算法會使用隨機輸入,並總是以正確答案終止,其執行時間可能根據隨機選擇而改變,這類演算法稱為拉斯維加斯演算法。另一類演算法通常具有固定或有界的執行時間,但可能有一定機率產生錯誤結果或無法得到結果,這類演算法稱為蒙地卡羅演算法[1]

在實際應用中,隨機化演算法通常會以偽隨機數生成器取代理論上的真正隨機位元來源。不過,這樣的實作可能會偏離理論上預期的行為與數學保證,因為某些保證可能依賴理想的真正隨機數生成器。[1]


早期歷史

编辑

排序

编辑

快速排序東尼·霍爾於 1959 年發現,並於 1961 年正式發表。[2] 同年,霍爾也發表了快速選擇演算法;該演算法可在期望線性時間內找出列表中的中位數元素。[3] 至於是否存在確定性的線性時間選擇演算法,直到 1973 年才獲得解答。[4]

資料結構

编辑

最早的隨機化資料結構之一是雜湊表。雜湊表由 IBM 的漢斯·彼得·盧恩於 1953 年提出。[5] 盧恩的雜湊表使用鏈結法處理衝突,是鏈結串列的早期應用之一。[5]

例子

编辑

快速排序

编辑

快速排序是常見且廣泛使用的演算法,也是隨機性發揮作用的典型例子。許多確定性版本的快速排序,對於某些類型的退化輸入,例如已排序的陣列,可能需要   時間才能完成對   個數的排序;實際會導致此情況的輸入類型,取決於演算法選擇基準值的方式。

然而,若演算法每次都均勻隨機選取基準值,則無論輸入資料本身具有何種特性,快速排序被證明有很高的機率在   時間內完成。[1]

參考資料

编辑
  1. ^ 1.0 1.1 1.2 1.3 Motwani, Rajeev; Raghavan, Prabhakar. Randomized Algorithms. Cambridge University Press. 1995. ISBN 978-0-521-47465-8. 
  2. ^ Hoare, C. A. R. Algorithm 64: Quicksort. Communications of the ACM. 1961-07, 4 (7): 321. ISSN 0001-0782. doi:10.1145/366622.366644. 
  3. ^ Hoare, C. A. R. Algorithm 65: Find. Communications of the ACM. 1961-07, 4 (7): 321–322. ISSN 0001-0782. doi:10.1145/366622.366647. 
  4. ^ Blum, Manuel; Floyd, Robert W.; Pratt, Vaughan; Rivest, Ronald L.; Tarjan, Robert E. Time bounds for selection. Journal of Computer and System Sciences. 1973-08, 7 (4): 448–461. doi:10.1016/S0022-0000(73)80033-9. 
  5. ^ 5.0 5.1 Knuth, Donald E. The Art of Computer Programming, Volume 3: Sorting and Searching 2nd. Addison-Wesley. 1998: 536–549. ISBN 978-0-201-89685-5. 

📚 Artikel Terkait di Wikipedia

算法

membership oracle) can be approximated to high accuracy by a randomized polynomial time algorithm, but not by a deterministic one: see Dyer, Martin; Frieze

拉斯维加斯算法

在电脑运算中,拉斯维加斯算法(Las Vegas algorithm)是一种永远给出正确解的随机化算法;也就是说,它总是给出正确结果,或是返回失败。 换言之,拉斯维加斯算法不赌结果的正确性,而是赌运算所用资源。一个简单的例子是随机快速排序,他的中心点虽然是随机选择的,但排序结果永远一致。

元素唯一性问题

Karpinski, Marek; Heide, Friedhelm Meyer; Smolensky, Roman, A lower bound for randomized algebraic decision trees, Computational Complexity, 1996, 6 (4): 357,

迈克尔·拉宾 (科学家)

[2009-01-06], (原始内容存档 (PDF)于2021-11-23)  Karp, RM; Rabin, MO. Efficient randomized pattern-matching algorithms. IBM Journal of Research and Development.

P/NP问题

此外,P与NP的定义完全根植于传统的经典图灵机模型。如果我们把目光投向不符合该模型的其他前沿计算类型,例如量子计算和随机算法(英语:Randomized algorithm),整个复杂性理论体系可能会呈现出完全不同的风貌。 库克在《P与NP问题》(The P Versus NP Problem)一文中,将该问题精炼地表述为:“P

Bogo排序

Holzer and O. Ruepp: Sorting the Slow Way: An Analysis of Perversely Awful Randomized Sorting Algorithms (页面存档备份,存于互联网档案馆), 4th International Conference on

时间复杂度

time)。实际上除了符合以上定义的演算法,其他一些演算法也拥有次线性时间的时间复杂度。例如有O(n½) 葛羅佛搜尋(英语:Grover's algorithm)演算法。 常见的非合次线性时间演算法都采用了诸如平行处理(就像NC1 matrix行列式计算那样)、非古典處理(如同葛羅佛搜尋那樣),又或

拉宾-卡普算法

在计算机科学中,拉宾-卡普算法(英語:Rabin–Karp algorithm)或卡普-拉宾算法(Karp–Rabin algorithm),是一种由理查德·卡普与迈克尔·拉宾于1987年提出的、使用散列函数以在文本中搜寻单个模式串的字符串搜索算法单次匹配。该算法先使用旋转哈希以快速筛出无法与给定