KMP演算法基本思想與實現

2021-06-05 13:49:00 字數 1051 閱讀 8232

/**

kmp演算法

演算法思想:

t0....t(j-i)......t(j-1) tj

= = !=

p0 p(i-1) pi

即在比較的過程中有

p(0...i-1) = t(j-i....j-1) 再往下匹配時 pi =!tj

如果找到k值使

p(0..i-k-1) = p(k..i-1)

這樣字元創p可以移動k位

因為p(k..i-1)與tj-1前面的i-1-k為相等

所以p(0..i-k-1)也與tj-1前面的i-1-k為相等

因此只需要比較p(i-k) 和tj就行了

*/#include #include using namespace std;

/**尋找模式串p每個字元的特徵數

即每個字元前p(0...i-1)的最大相同字首子串和字尾子串

next(i) = -1 當i = 0使

max k存在

0 k不存在

*/int * findnext(string p)

i ++;

k ++;

if(i == m) break;

//如果p[i] 和 p[k] 相等,優化

/**如果p[i] 和 p[k] 相等

則p[k]也不會和tj相等

還需要向右移動

*/if(p[i] == p[k])

else

next[i] = k;

}return next;

}int kmp(const string & t ,const string & p , int * next)

else return -1;

}int main()

cout

cout

}

KNN演算法 基本思想

knn k 最近鄰居 演算法 該演算法的基本思路是 在給定新文字後,考慮在訓練文字集中與該新文字距離最近 最相似 的 k 篇文字,根據這 k 篇文字所屬的類別判定新文字所屬的類別,具體的演算法步驟如下 step one 根據特徵項集合重新描述訓練文字向量 step two 在新文字到達後,根據特徵詞...

MVP基本思想

mvp的邏輯性思維都在p層,他降低了頁面的耦合度,具備低耦合的特性,mvp的出現使 更具邏輯性 首先我們看到分包的嚴謹性 mvp的結構分析 p層負責整體邏輯並且將m層和v層聯絡起來,m層主要負責 塊,callback將結果集返回p層,v層最後展示檢視 注意以下介面 public inte ce my...

git基本思想

git相比叫傳統的基於檔案svn優勢明顯,主要體現在天然分布式不怕丟失 不以檔案為為基礎,基於git的資料庫 commit雜湊健值檔案 的版本管理,分支 標籤等操作飛速,而不是緩慢地檔案和目錄操作 git下每個人都有乙個獨特的工作區和分支,不必實時和中心伺服器同步就可以 帶有社交性質的基於fork ...