從KMP原理原理出發解決問題

2021-08-04 06:31:32 字數 941 閱讀 5604

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的連線問題,在乙個區域網中...