ps:剛開始 也是想了好久 但是始終不得其解 後來 看了演算法導論 然後想了想 就明白了
前提:next陣列構造成功
如果匹配到pos位置匹配失敗 那麼在模式串中的匹配位置回跳到patten[0…pos-1]這個串的公共前字尾的下乙個位置 這樣就節省了匹配字首的時間 kmp優化思想就在這裡
void get_next(int lastpos)
else
else
j=next[j];}}
}
bool cast(int strlastpos,int pattenlen)
else
if(j==pattenlen)
return
true;
}return
false;
}
更新時間2017.11.23
從書上發現了更精簡的版本 然後自己寫了一遍 orz
原先我們的next陣列 到零了還得加乙個if判斷 更新版的next陣列首元素是-1 所以就和匹配到相同的 做了合併,非常完美! 順便帶上匹配函式(首匹配+返回匹配串的第乙個字元下標)
#include
const
int maxn = 1e7;
int next[maxn];
char p[maxn];
char s[maxn];
#include
void get_next(int ltp)
else
}}int cast(int ltp,int plen)
else
if(j==plen)
return i-plen+1;
}return -1;
}int main()
return
0;}
菱形繼承問題 解決問題的virtual原理
a類有public了個int age b類與c類都繼承了a類 son類分別繼承了b類與c類 這是問題就出現了 宣告乙個函式,函式體是賦值父類b的age,但是編譯器報錯 不明確 意思就是編譯器不知道你要給父類b.age賦值還是給c.age賦值?這時你要用到乙個virtual 虛繼承 關鍵字,而父類叫做...
從哈夫曼編碼再出發 原理和現實
title 從哈夫曼編碼再出發 原理和現實 tags categories 對於計算機科班出身的人來說,在大學階段幾乎都學過資訊理論和演算法這兩門課,資訊理論都會講到夏農三大定理以及哈夫曼編碼,演算法課上會學習二叉樹,甚至哈弗曼樹。在介紹哈夫曼編碼之前,先介紹一下什麼是有效編碼,以及夏農第一定理的內...
從錯誤中吸取解決問題之道
今天在解決問題時又犯了一些方向性的錯誤,以致於被乙個本不是很複雜的問題搞的焦頭爛額 其實自己一直以來都不能避免這個問 題,總是定期地犯這樣的毛病 為了今後少犯,特把這次的問題記錄下來,並把自己經常用到的解決問題的兩種方法總結出來。這次碰到的問題是sql server2000的連線問題,在乙個區域網中...