據我了解,用于模數的 P 素數的大小應該是 32\64 位,因此可以在 O(1) 中比較最終的散列密鑰。如果我們決定使用大于 m(模式大小)的素數,這是否會使我們恢復到 O(mn) 的幼稚運行時間,因為我們將在 O(m) 中比較 nm 迭代?
uj5u.com熱心網友回復:
將事情推向極端可能會有所幫助。
假設您的素數 P 是可能的最小素數 2。那么只有兩個可能的哈希碼可以在滾動哈希中計算,因此您希望在字串中大約 50% 的索引處看到匹配的哈希。如果模式永遠不存在,這將使您的運行時間平均達到 Θ(mn)。
另一方面,想象選擇一個對于所有意圖和目的都是無限的素數 P(例如,一個包含超過2300位的素數)。這意味著 P 的修改本質上是無操作的,因為滾動哈希永遠不會超過 P。在這種情況下,滾動哈希中的位數將大致與模式的長度相當,所以在每一步更新滾動哈希的作業將是 Ω(m),平均凈運行時間為 Ω(mn)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435774.html
