KMP算法詳解

相信很多人(包括自己)初識KMP算法的時候始終是丈二和尚摸不着頭腦,要麼完全不知所云,要麼看不懂書上的解釋,要麼自己覺得好像心裏瞭解KMP算法的意思,卻說不出個究竟,所謂知其然不知其所以然是也。
    經過七八個小時地仔細研究,終於感覺自己能說出其所以然了,又覺得數據結構書上寫得過於簡潔,不易於初學者接受,於是決定把自己的理解拿出來與大家分享,希望能拋磚引玉,這便是Bill寫這篇文章想要得到的最好結果了
-----------------------------------謹以此文,獻給剛接觸KMP算法的朋友,定有不足之處,望大家指正----------------------------------------
 
 
 
【KMP算法簡介】
 
        KMP算法是一種改進後的字符串匹配算法,由D.E.Knuth與V.R.Pratt和J.H.Morris同時發現,因此人們稱它爲克努特——莫里斯——普拉特操作(簡稱KMP算法)。通過一個輔助函數實現跳過掃描不必要的目標串字符,以達到優化效果。
 
 
 
【傳統字符串匹配算法的缺憾】
 
        Bill認爲,對於一種優化的算法,既要知道優化的細節,也更應該瞭解它的前身(至於KMP是否基於傳統算法,我不清楚,這裏只作語境上的前身),瞭解是什麼原因導致了人們要去優化它,因此加入了這一段:
請看以下傳統字符串匹配的代碼:
C++ code

 
void NativeStrMatching( ElemType Target[], ElemType Pattern[])            
{            
        registerint TarLen =0;        //Length ofTarget            
        registerint PatLen =0;        //Length ofPattern            
        
        //Compute the length ofPattern            
        while('\0' != Pattern[PatLen])            
                PatLen++;            
        
        while('\0' != Target[TarLen])            
        {            
                intTmpTarLen =TarLen;            
                for(inti=0; i
   
發佈了9 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章