<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              如何理解KMT字符串匹配算法?如何計算出KMT數組?

              來源:CSDN 時間:2023-03-02 09:43:44

              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不匹配,所以我們要排除這個??梢园裈跟P看出寫著AACAA的并列的兩張紙條,P往右慢慢移動,尋找最大的兩張紙條重疊部分即可。)這樣可以避免無意義的一步步的走,比如要是只走一步,

              AACAA

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

              T:AACAAXEE

              P:      AACAAZDD

              以T為參照就是T的當前下標不變,P移動到合適的下標位置。 緊接著,發現XC不等,于是在C左邊尋找最大的跳躍步長。

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩