我已經盡最大努力閱讀了大部分關於這方面的文獻,並且仍然沒有理解如何構造KMP算法中使用的失效函數。我一直主要提到http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=stringSearching教程,大多數人認爲這很好。但是,我仍然沒有理解它。如果你能夠給我一個簡單易懂的解釋,我會很感激。KMP算法中使用的故障功能是如何工作的?
4
A
回答
9
失敗函數實際上告訴我們:如果你匹配一個字符串的X個字符,那麼這個字符串的最長後綴是什麼,這也是一個搜索字符串的前綴。
你在問它是如何構建的,這種方法非常簡單。
如果在字符串的末尾添加一個新字符,那就是構建f [x],如果它與位置f [x-1]上的字符相匹配,那麼f [x]就是f [X-1] +1。
在其他不匹配的情況下,您會嘗試查找更小和更小的後綴並檢查它們是否匹配。
例如,您有一個詞"accadaccac"
正在爲其建立故障功能,並且您剛剛添加了字母'c'
。假設您正在爲最後一個字母'c'
構建失敗函數。
- 首先,你檢查以前的信件的功能失效,其故障作用是4,因爲你可以用前綴匹配
"acca"
後綴"acca"
,現在你添加字母'c'
,它不匹配字母'd'
成功的前綴"acca"
。 - 所以你回溯到最後的好後綴。您現在正在搜索後綴
"acca"
,它也是"accadaccac"
的前綴,但小於「acca」。這個問題的答案是f [長度(「acca」) - 1]或f [3],即f [3] = 1,因爲長度爲1的後綴(只是字母'a'
)也是一個前綴搜索字符串。 - 現在你可以嘗試如果
'c'
與位置1上的字符匹配,並且瞧,它匹配,所以現在你知道f [9] = f [f [8] -1] +1 = 2。
我希望這會幫助你。祝你好運! :)
-2
http://www.oneous.com/Tutorial-Content.php?id=24
U可以利用學習資源本網站對於理解KMP算法和故障功能。也可以嘗試使用代碼並手動對其進行一些運行。然而,理解其工作的最好方法是自己編寫一些基本算法的變體。我建議你從SPAY的NHAY和PERIOD開始。
相關問題
- 1. KMP故障功能的應用
- 2. AddNumber功能故障
- 3. EOF功能故障
- 4. R功能故障
- 5. 功能故障(javascript)
- 6. WordPress的add_menu_page功能故障
- 7. python的KMP算法
- 8. 故障使用reshape2 ::投功能
- 9. for循環中的功能故障
- 10. 故障與cbc.read.table功能中的R
- 11. 何時使用Rabin-Karp或KMP算法?
- 12. 製作功能幫助故障查找
- 13. 故障繪圖功能
- 14. 故障排除PG功能
- 15. AJAX和DOM功能故障
- 16. 故障排除SUMPRODUCT功能
- 17. 搜索功能故障
- 18. SAS現場功能故障
- 19. 輸出功能故障C++
- 20. 虛擬功能故障
- 21. 小功能分段故障
- 22. 雖然功能故障
- 23. 是否有可能允許KMP算法中的不匹配?
- 24. 使用故障消息無法處理WSO2 ESB中的故障
- 25. KMP算法應用程序
- 26. ServiceStack PooledRedisClientManager故障轉移如何工作?
- 27. 空的功能,但分段故障
- 28. 爲什麼我的功能故障
- 29. 方法是故障
- 30. TestNG中的部分故障功能是什麼意思?
「不匹配以字母‘A’後面的前綴‘ACCA’」 你的意思是字母「d」,因爲它是「亞甲」,是不是? – Tito