串匹配演算法(二) 手把手教你KMP演算法(1)

2021-07-29 18:09:22 字數 679 閱讀 4224

kmp演算法是一種比較高效的串匹配演算法,高效體現在:源串下標不回溯,子串合理的移動。

kmp演算法屬於思路比較複雜的演算法,我自己學習這個演算法可以說是第三次了,前兩次是似懂非懂的,但是最近在刷牛客題的時候,發現這個演算法還是挺高效的,按照常規思路我的程式在時間複雜度根本通不過,所以下狠心再次去學習這個演算法,終於整理出來了。現在覺得要想學懂這個演算法必須要耐下心來一遍遍的變數跟蹤。

本文主要整理出我自己學習kmp演算法的手工過程,只要認真跟著我的思路去走,多次變數跟蹤,理解這個演算法沒有問題。

例子一:

從例子一看出源字串每次從失配點與子字串下表為0的地方開始比較,沒有問題,因為子字串前面的字元都不一樣(很抽象)。請看例子二。

例子二:

例子三:

完整例子4:

手把手教你寫乙個ORM(二)

昨夜一夜未睡,本來以為下班回家能倒下就打呼嚕的,結果吃了晚飯後反而清醒起來了,於是決定把本打算明天寫的部分提前。半夜三更不睡覺幹嘛?出來假扮王祖賢阿 根據前面的需求,我們發現需要將配置檔案抽象出乙個元件出來,快取需要乙個單獨的元件,為了適應不同的資料庫需要做成乙個外掛程式架構的,為不同資料庫插入不同...

實戰RAID5 手把手教你組磁碟陣列 5

隨著pc硬體的不斷發展,以前多見於伺服器等高階應用的raid5技術也出現在pc機上。許多玩家開始接觸到這種提公升速同時也能確保資料安全性的良好的解決方案。raid 5 模式的入門知識 raid 5 是一種儲存效能 資料安全和儲存成本兼顧的儲存解決方案。它既能實現raid 0的高速儲存讀取功能也能夠實...

手把手教你 分析遞迴演算法的時間複雜度

遞迴演算法時間複雜度的計算方程式乙個遞迴方程 在引入遞迴樹之前可以考慮乙個例子 t n 2t n 2 n2 迭代2次可以得 t n n2 2 2t n 4 n 2 2 還可以繼續迭代,將其完全展開可得 t n n2 2 n 2 2 2 n 22 2 2 n 23 2 2 n 24 2 2 n 2i ...