/**
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 ...