KMT思想感悟

2021-08-17 01:23:31 字數 729 閱讀 8116

kmt字串匹配演算法的核心是1. 如何計算出next陣列 2. 對該演算法思想的理解。今天又複習了下這個演算法,領悟了一套自認為更形象的理解。概括一句話就是:可以把kmt看成是暴力演算法的加速版本或者跳躍版本,而如何加速跳躍則是next陣列的用途所在。

首先考慮暴力演算法,t(目標串),p是模式串,即尋找p在t中的位置。

t: aacaaxee

p: aacaazdd

在x與z處,出現了不匹配。按照暴力演算法,我們會把p按步長1逐步的從t往後移,也就是第二次從t的b位置,第三次是c位置開始,以此類推。

kmt演算法相比上面方法的改進之處就是,這個步長不用一直為1. 比如xz不匹配的時候,可以直接步長3來進行第二步的匹配。也就是說p在當前不匹配的位置左邊,即

t: aacaa

p:aacaa    尋找這兩個最大的重疊部分(沒移動前當然是最大的,但是這個時候已經發現xz不匹配,所以我們要排除這個。可以把t跟p看出寫著aacaa的並列的兩張紙條,p往右慢慢移動,尋找最大的兩張紙條重疊部分即可。)這樣可以避免無意義的一步步的走,比如要是只走一步,

aacaa

aacaa, 如果我們已經知道這個不是最大重疊串,那麼也就是說這一步走完後,t跟p肯定不等(因為目前重疊的部分已經不等了),所以我們要尋找最大重疊串。

t:aacaaxee

p:      aacaazdd

以t為參照就是t的當前下標不變,p移動到合適的下標位置。 緊接著,發現xc不等,於是在c左邊尋找最大的跳躍步長。

抽象思想的感悟

大多數事物重複三次以上,並且在可預見的範圍內它還會繼續重複,那麼就有必要將其抽象。一般複雜的問題都可以通過抽象,將其簡單化。這裡的重複次數,根據不同行業 所處的環境不同,也會有不同標準。同樣抽象也有不同的實現方式。舉個例子,公司招新人。每次新人來都會有幾乎差不多繁瑣的入職流程。那麼這個流程肯定會重複...

自我感悟 思想與行動的結合

感覺自己在外貿行業中長進了不少,但在很多很多的細節上我知道我還是要不斷的學習和不斷要去用頭腦去思考和去行動的。我發覺我的思想還不夠靈敏,要思考的事情還不全面,說真的,我很佩服我們的經理ttt,同時也很感謝他,真的如果沒有他,我想我永遠不會自己去反思和思考自己的思想和行為的,真的很高興有這樣的乙個好領...

昨日思想感悟及本部落格的宣告

2010年6月18日晚跟領導和幾位同事飯桌上暢談後,感觸很多,但大家都有著一股幹勁,都期待國信司南公司未來會成為gis領域一顆閃亮的明珠。帶著這份期許,包括領導在內,每個人都提出了中肯的建議。飯桌上有過激烈的辯論,有著信心滿腹的憧憬。雖然我的意見也遭到其他同事的反駁,但我還是想記錄下我的思想感受和建...