[英]What is the best & worst time complexity Of KMP algorithm
需要澄清 KMP 算法的最佳時間復雜度和最壞時間復雜度。 令我困惑的是 O(n) 的最差搜索時間復雜度。 我在網上閱讀后了解到,有兩個索引。 一個索引 i 用於文本,另一個索引 j 用於模式。 我們不減少文本索引 i。 但是當存在不匹配且 j 值大於 0 時,我們會遞減模式索引 j。在這種情況下,i 保持不變。 那么最壞的時間復雜度怎么會是O(n)呢? 它應該比 O(mn) 還多。 對於特定的 i 值,我們可以對 j 進行多次迭代。
最好的情況是什么? 它與最壞的情況有什么不同嗎? 我正在尋找簡單的解釋,因為我已經閱讀了不同的教程。
KMP 不會在不增加 i 的情況下增加 j。 因此,即使在 i 的每次增量之間可以有 j 的 Theta(m) 減量,在算法過程中 j 的減量總數不能超過 j 的增量總數,它等於增量數我的所有都是 Theta(n),KMP 的最壞和最好情況漸近運行時間(假設我們找到了所有匹配項;如果不是,那么顯然最好的情況是 Theta(m))。
大衛的回答是正確的。 您需要先匹配 j。 然后 j 值將增加並變得大於零。 之后,您可以遞減 j 值。 當你增加 j 時,你也在增加 i。 因此,如果您將 j 索引減少 n 次,則意味着您已經至少將 j 索引增加了 n 次 & 這反過來意味着您已經將 i 索引增加了 n 次。 這樣你就完成了對文本的遍歷。
所以時間復雜度是 n 個負步 + n 個正步 = 2n 步。 這就是 O(n)。
您可以查看此鏈接http://www.w3spot.com/2020/07/kmp-algorithm-explained-in-plain-english.html它通過幾個示例逐步解釋它,一個具有重復模式和一個與非重復模式。 而且很容易理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.