17
A
回答
23
KMP匹配算法基於finite automata,並通過爲與該字符串匹配的自動機隱式構建轉換表工作。使用對字符串進行非常聰明的線性時間預處理來搜索,可以構建匹配自動機,然後可以在字符串上模擬自動機以線性時間進行搜索。最終結果是用於字符串匹配的線性時間算法。
構建的自動機通過爲每個已經匹配的字符串量創建一個狀態。默認情況下,轉換是這樣的,即匹配下一個字符前進到機器中的下一個狀態,並讀取無效字符轉換回開始。但是,搜索字符串的某些部分可能會共享某些重疊結構,因此會添加一些新的轉換,以便在讀取字符時使自動機恢復到較早的狀態(但不是第一個狀態)。
該算法通過Aho-Corasick算法推廣,該算法構建更復雜的自動機以便一次搜索多個字符串。
我an implementation of this algorithm on my personal site包含的算法是如何工作的,包括正確性證明,該算法背後更正式的直覺,以及如何獲得從基本原理,算法的解釋實際的細節進行了廣泛討論。我花了一段時間纔將它們放在一起,但我希望它能夠更好地瞭解該算法。
希望這會有所幫助!
3
Morris從第一原理中發現了該算法,但是由於Stephen A. Cook的原因,Knuth獨立地學習了一個定理,即可以在線性時間模擬確定性雙向下推自動機,並通過專門化提取早期版本的「KMP」模擬一個字符串匹配自動機。普拉特提高了效率。見Knuth's retelling。
相關問題
- 1. 這個KMP模式匹配算法的實現是對的嗎?
- 2. 這是什麼模式匹配算法?
- 3. KMP模式查找算法
- 4. KMP模式匹配算法時間複雜度可以是O(m * n)?
- 5. 幫助理論背後的pixelate算法?
- 6. 用戶和帳戶模型 - 背後的理論是什麼?
- 7. 是否有可能允許KMP算法中的不匹配?
- 8. Random.next()背後的算法是什麼?
- 9. Robocopy背後的算法是什麼?
- 10. 色輪背後的算法是什麼?
- 11. 什麼是落後的scikit學習extract_patches函數理論/算法?
- 12. 模式匹配算法
- 13. 模式匹配sql算法
- 14. 算法模式匹配
- 15. 模式匹配序列理解的慣用方式是什麼?
- 16. 這是什麼模式匹配?
- 17. KMP字符串搜索算法的最壞情況是什麼?
- 18. 緩衝/流式在線視頻背後的算法是什麼?
- 19. 「After Effects」的Light Glow效果背後的理論是什麼?
- 20. python的KMP算法
- 21. 這個難題背後的理論是什麼?
- 22. 什麼是Rust中模式的定義,什麼是模式匹配?
- 23. 序列號的模式匹配算法
- 24. KMP字符串匹配算法:輔助陣列輸出
- 25. 模式後匹配模式?
- 26. 單線模式匹配的語法是什麼?
- 27. 模式匹配中byte_size的語法是什麼?
- 28. 理論/理論背後的ActiveRecord :: Base
- 29. 線性模式匹配算法?
- 30. 使用KMP-Algorithm在字符串匹配中處理通配符'*'運算符?
我被近親票選困惑。我對要問什麼和不問什麼感到困惑。 – anonymous
有些人投票結束那些沒有「節目內容」的問題,不管這是什麼意思。 – Per