關於KMP演算法的重大發現

2022-05-09 20:05:47 字數 822 閱讀 1644

之前寫kmp模板的時候,nx[i]代表最大的乙個x,使s[1,x-1]是s[1,i-1]的字尾。(方法1)

然而網上還有另一種方法求nx陣列,nx[i]表示最大的乙個x,使s[1,x]是s[1,i]的字尾。(方法2)

兩種nx陣列在具體匹配的時候方法稍有不同,但都能正確匹配字串。

但是在做字串dp題的時候,發現網上的題解大多是利用第二種nx陣列的性質進行狀態的轉移。

當時試著寫了一下那種nx的求法,但是覺得很彆扭,用不慣也記不住。

不知所措。

今天看了一下洛谷的kmp模板(p3375)(傳送門),發現得求出第二種nx陣列......

這回把第二種求法忘了,也很反感那麼寫。

於是立志要找出兩種方法的聯絡。

很簡單嘛:nx2[i]=nx1[i+1]-1

同時,getnx的時候要走到m+1(m為模式串長),這樣nx[m+1]才有值。

給乙個洛谷p3375的**。

注意getnx的改動和最後要求輸出nx陣列的時候是怎麼操作的。

1 #include2 #include3

4char s1[1000005],s2[1000005];5

int nx[1000005];6

int pos[1000005

],cnt;

7int

n,m;89

void

getnx()

1018}19

20void

kmp()

2130

else i++,j++;31}

32}3334

intmain()

35

Mysql 批量操作重大發現

一直測試的批量操作和普通操作效能上沒什麼區別。覺得很奇怪,而且驅動裡面原始碼也會發現表面上是批量操作實際上也是一條條執行。後來看了這位的帖子 發現了rewritebatchedstatements這個引數 加上之後,簡單的測試了下效率提高了30倍 當時就讓我震驚了 又測試了下1000條記錄 提交 插...

外連線消除的重大發現

postgres select from test1 left join test2 on test1.id1 test2.id3 and test2.id3 is not null id1 id2 id3 id4 2 3 2 323 4 3 5512 34 3 rows postgres 那我要大...

做理工大發現的問題整理

1.布局 先用色塊把整體佈好。2.id 唯一的 重複也不會錯,同樣的css可以加標號 3.img 寬度和高度只設定一種,避免被拉伸 4.如果要不隨縮放而改變,所在的div和本身都不要設高。如果只給div設高,不會改變,但會遮蓋下面內容,如果也給設高,高度會縮放。5.對a和div的標籤組合設定 hov...