锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
鏂板湴鍧錛?a data-cke-saved- >澶滄繁浜洪潤鍐欑畻娉曪紙浜屽崄涓夛級- 鏈鐭礬
KMP綆楁硶鍙互璇?/span>鎵鏈夋暟鎹粨鏋勪功涓婇兘鏈夛紝涓婂ぇ瀛︾殑鏃跺欎篃闄嗛檰緇畫瀛﹁繃涓夋錛屾瘡嬈″瀹岀湅浼肩悊瑙d簡錛?/span>鍙槸榪囦簡涓嶅埌鍗婂勾鍙?/span>蹇樿浜嗭紝鎴栬鏄洜涓轟唬鐮佸お鐭紝鑳藉啓鍑烘潵灝變互涓鴻嚜宸變細(xì)浜嗭紝娌℃湁娣卞叆鍘葷悊瑙o紝瀵艱嚧涓嬫鍐嶆潵鐪嬬殑鏃跺欐劅瑙夊緢闄岀敓錛屼竴瀹氭槸榪欐牱鐨勩?/span>
浠婂ぉ鐪嬩簡matrix67瀵筀MP鐨勮В閲婏紝寰堣禐錛岄檮涓婂湴鍧錛?/span>http://www.matrix67.com/blog/archives/115
涓轟簡璁╄佸勾鐨勮嚜宸變笉鐢ㄥ湪榪熸毊鐨勬椂鍊欏啀瀛︿竴閬岾MP錛岃繕鏄喅瀹氭妸涓浜涘叧閿х殑涓滆タ璁板綍涓嬫潵錛屽鏋滈偅鏃跺欑殑鑷繁鐪嬪埌鑷繁褰撳勾鍐欑殑榪欑瘒絎旇鑳芥湁鎭嶇劧澶ф?zhèn)熺殑鎰熻锛岄偅涔堢幇鍦兏嶆槸鍦▼躬璐规棄櫁翠簡銆?/span>
瀹氫箟錛?/span>
S[1... n] 鐩爣涓?nbsp; T[1...m] 妯″紡涓?/span>
綆楁硶鐩殑錛?/span>
浠庣洰鏍囦覆S涓壘鍒頒竴涓瓙涓插拰妯″紡涓睺瀹屽叏鍖歸厤銆?/span>
綆楁硶鏍稿績鎬濇兂錛?/span>
1) 鏋氫婦i浠?鍒皀錛屽湪S[i-j...i-1]鍜孴[1...j]瀹屽叏鍖歸厤鐨勫墠鎻愪笅錛屽垽鏂璖[i]鏄惁鍜孴[j+1]鐩哥瓑錛?/span>
a) 濡傛灉鐩哥瓑錛岃鏄嶴[i-j...i]鍜孴[1...j+1]瀹屽叏鍖歸厤錛岄偅涔坕鍜宩閮借嚜澧?錛?/span>
b) 濡傛灉涓嶇浉絳夛紝鍒欓渶瑕佹壘鍒頒竴涓渶澶х殑j' < j錛屾弧瓚砈[i-j'...i-1]鍜孴[1...j']瀹屽叏鍖歸厤錛?/span>
2) 褰搃=n鎴杍=m鐨勬椂鍊欒鏄庡尮閰嶇粨鏉燂紝鍚﹀垯閲嶅1)錛?br />
瀵逛簬j'鍙互榪欐牱鐞嗚В錛岀敱浜庡墠鎻愭槸S[i-j...i-1]鍜孴[1...j]瀹屽叏鍖歸厤錛屽鏋滆鎵懼埌涓涓猨'婊¤凍S[i-j'...i-1]鍜孴[1...j']涔熷畬鍏ㄥ尮閰嶏紝閭d箞T[1...j']蹇呭畾涓篢[1...j]鐨勫悗緙錛?/span>璇佹槑濡備笅錛氶鍏堝皢浠ヤ笅鐨勫瓙涓茶繘琛岀紪鍙鳳細(xì) A = S[i-j...i-1] B = T[1...j] C = S[i-j'...i-1] D = T[1...j']
鍥犱負(fù)A鍜孊瀹屽叏鍖歸厤錛孋鍜孌瀹屽叏鍖歸厤錛岀敱浜嶤涓篈鐨勫悗緙錛屾墍浠涓築鐨勫悗緙銆?/span>
褰揝[i]鍜孴[j+1]涓嶇浉絳夌殑鏃跺欓渶瑕佽皟鏁磈鐨勫鹼紝璋冩暣瀹屽悗鐨刯 = Next[j](榪欎釜Next[j]灝辨槸涔嬪墠鎵璇寸殑j')錛岄渶瑕佹弧瓚?T[1 ... Next[j] ] = = T[ j - Next[j] + 1... j ]錛?騫朵笖Next[j]鐨勫兼渶澶э紝姣旇緝涔﹂潰鐨勮娉曞氨鏄疦ext[j]琛ㄧず鍦ㄦā寮忎覆T涓互絎琷涓厓绱犱負(fù)緇撳熬鐨勬渶闀垮悗緙涓弧瓚沖畠鏄疶鐨勫墠緙鐨勫悗緙鐨勯暱搴?/span>銆?/span>
涓句釜渚嬪瓙錛孴 = "ababaaba"鐨凬ext鏁扮粍涓?nbsp;[0, 0, 1, 2, 3, 1, 2, 3]銆?/span>
鐢變簬Next鏁扮粍琛ㄧず鐨勫惈涔夊彧鍜岃嚜韜殑鎬ц川鏈夊叧錛屾墍浠ュ湪娌℃湁鐩爣涓茬殑鎯呭喌涓嬪悓鏍峰彲浠ユ眰鍑篘ext鏁扮粍錛孠MP鐨勭簿濡欎箣澶勫氨鍦ㄤ簬姹傝繖涓狽ext鏁扮粍浜嗐?/span>
鍦ㄤ笂鏂囦腑鎻愬埌鐨凷鍜孴鐨勫尮閰嶄腑錛屾瘡嬈[i-j...i-1]閮芥槸灝介噺鎵懼埌鏈澶х殑j浣垮緱瀹冨拰T[1...j]瀹屽叏鍖歸厤錛屽綋鐒舵湁鍙兘鎵句笉鍒拌繖鏍風(fēng)殑j錛屾鏃朵護(hù)j = 0錛屽嵆 S[i,i-1]鍜孴[1,0]鍖歸厤(榪欐槸涓や釜絀轟覆錛岀┖涓插拰絀轟覆涔熷彲浠ュ尮閰嶏紝hohoho~~鎵浠鏄竴瀹氬瓨鍦ㄧ殑)銆傚鏋滅幇鍦ㄦ妸S鎹㈡垚T錛岄偅涔堥棶棰樺氨杞寲鎴愪簡T[i-j...i-1]鍜孴[1...j]鐨勫尮閰嶉棶棰樹簡錛屽鏋淭[i-j...i-1]鍜孴[1...j]瀹屽叏鍖歸厤錛屽茍涓擳[1...j]鏄拰T[i-j...i-1]鍖歸厤鐨勬渶闀跨殑涓詫紝閭d箞 Next[i-1] 灝辨槸 j錛堟濊冧竴涓嬬孩鑹插瓧鐨勫畾涔夊氨鏄庣櫧浜嗭級錛屼簬鏄棶棰樺氨杞寲鎴愪簡T鐨勮嚜鎴戝尮閰嶇殑榪囩▼浜嗐?br /> 綆楁硶澶嶆潅搴︼細(xì)
O(n+m)
Next鍑芥暟鐨勬眰瑙i潪甯哥畝媧侊細(xì)
PKU 3461 Oulipo
棰樻剰錛氭眰涓涓尮閰嶄覆T鍦ㄧ洰鏍囦覆S涓殑鍑虹幇嬈℃暟銆?/span>
棰樿В錛?/span>姹傚嚭T鐨?/span>Next鏁扮粍錛岀劧鍚庡拰S榪涜KMP鍖歸厤錛屽尮閰嶆椂褰搄 = =m鐨勬椂鍊欒〃紺烘壘鍒頒竴涓彲琛岃В錛岃鏁板櫒+1錛岀劧鍚庡皢Next[j]璧嬪肩粰j錛屼嬌寰楀畠鐨勬渶闀垮墠緙鑳藉緇х畫鍜岀洰鏍囦覆榪涜鍖歸厤銆?/span>
KMP鍖歸厤榪囩▼鍜孨ext鏁扮粍鐨勬眰瑙f槸涓鏍風(fēng)殑銆?/span>
HDU 4763 Theme Section
棰樻剰錛氱粰瀹氫竴涓暱搴︿負(fù)N(1 <= N <= 106)鐨勫瓧絎︿覆S錛岄棶鑳藉惁鍜屾ā寮忎覆EAEBE榪涜鍖歸厤鍏朵腑A鍜孊琛ㄧず浠繪剰闅忔満瀛楃錛屽鏋滆兘鍖歸厤錛岃緭鍑篍鐨勬渶澶у彲鑳介暱搴︼紝涓嶈兘鍖歸厤杈撳嚭0銆?/span>
棰樿В錛氶鍏堝埄鐢↘MP姹傚嚭S鐨凬ext鏁扮粍錛岄偅涔圫[1...Next[N]]銆丼[1...Next[Next[N]]]銆丼[1...Next[...[N]] ]蹇呭畾鑳藉拰S鐨勫悗緙榪涜瀹屽叏鍖歸厤錛屽皢榪欎簺Next[i]鍒╃敤涓嬈¤凱浠f眰鍑烘潵錛屾渶緇堢殑絳旀涓瀹氬湪榪欎簺鍊間腑錛岀劧鍚庝粠澶у埌灝忔灇涓捐繖浜涘鹼紝鍒ゆ柇鍙鎬с?/span>
鍋囪褰撳墠鏋氫婦闀垮害涓篿錛岄偅涔堝湪S[i+1 ... N-i] 涓鏋滆兘澶熸壘鍒頒竴涓暱搴︿負(fù)i鐨勫瓙涓叉弧瓚沖拰S[1...i]瀹屽叏鍖歸厤錛岄偅涔坕灝辨槸涓涓彲琛岃В錛屽張鍥犱負(fù)鏋氫婦鏄粠澶у埌灝忚繘琛岀殑錛屾墍浠灝辨槸E鍙兘鐨勬渶澶ч暱搴︺?/span>
浜庢槸闂灝辮漿鍙樻垚浜嗗垽鏂璖[i+1 ... N-i]涓槸鍚﹀瓨鍦ㄤ竴涓拰S[1...i]瀹屽叏鍖歸厤鐨勫瓙涓層傚鏋滃瓨鍦紝閭d箞蹇呭畾瀛樺湪涓涓猭( 2*i <= k <= N-i )錛屼嬌寰桽[k-i+1 ... k] = = S[1 ... i ]錛屾墍浠ュ繀瀹氭湁Next[Next[...[k]]] = = i錛屾墍浠ユ垜浠彲浠ラ鍏堝皢S[i+1 ... N-i]鍖洪棿鍐呮墍鏈夌殑Next鍊奸鍖栧悗榪涜Hash錛岀劧鍚庡湪鏋氫婦鏌愪釜闀垮害i鐨勬椂鍊欏幓Hash鏁扮粍涓壘i鏄惁琚爣璁幫紝濡傛灉琚爣璁拌鏄庡瓨鍦ㄦ煇涓猭婊¤凍S[k-i+1 ... k] = = S[1 ... i ]錛宨灝辨槸鏈澶у彲鑳介暱搴︺?/span>
HDU 2594 Simpsons’ Hidden Talents
棰樻剰錛氱粰瀹氫袱涓暱搴︿笉澶т簬50000鐨?/span>涓詫紝姹備袱涓覆鐨勪竴涓渶闀垮叕鍏卞瓙涓叉弧瓚沖瓙涓蹭負(fù)絎竴涓覆鐨勫墠緙錛屽茍涓斾負(fù)絎簩涓覆鐨勫悗緙銆?/span>
棰樿В錛氬皢涓や釜涓茬敤涓涓粠鏈嚭鐜拌繃鐨勫瓧絎﹁繛鎺ワ紝鎷兼垚涓涓暱搴︿負(fù)N鐨勪覆錛?/span>鐒跺悗榪涜涓嬈¤嚜鎴戝尮閰嶏紝姹傚嚭next鏁扮粍錛屾牴鎹甆ext鏁扮粍鐨勫畾涔夛紝Next[N]灝辨槸鎵姹傜殑鏈澶ч暱搴︺?/span>
HDU 3746 Cyclic Nacklace
棰樻剰錛氱粰瀹氫竴涓暱搴︿負(fù)N(N <= 105)鐨勫瓧絎︿覆S錛屾眰鍦ㄥ畠鐨勬湯灝炬坊鍔犲嚑涓瓧絎︿嬌寰椾粬鍙樻垚涓涓嚦灝戦噸澶嶄袱嬈$殑榪炵畫閲嶅涓詫紝瑕佹眰娣誨姞鐨勫瓧絎︽暟鏈灝戙?/span>
棰樿В錛氶鍏堝埄鐢↘MP榪涜涓嬈¤嚜鎴戝尮閰嶆眰鍑篘ext鏁扮粍錛岀劧鍚庢灇涓鵑噸澶嶄覆鐨勯暱搴錛屼護(hù)x = i * (N/i)錛屽鏋渪 - Next[x] == i錛岃鏄嶴[x]鏄疭鐨勪竴涓繛緇噸澶嶅瓙涓詫紙鎴栬呭彨榪炵畫閲嶅鍓嶇紑鏇村姞璐村垏錛夛紝鐞嗙敱寰堢畝鍗曪紝灝嗗瓧絎︿覆S[x]浠ラ暱搴涓哄崟浣嶅垎緇勶紝
S[1...i] S[i+1...2i] S[2i+1...3i] …… S[(N/i-1)i + 1...(N/i)i]
S[1...i] S[i+1...2i] …… S[(N/i-2)i + 1...(N/i-1)i]
鐢變簬x + i = = Next[x]錛屽彲浠ュ垪鍑鴻繛絳夊紡錛屾湁濡備笅絳変環(huán)鍏崇郴錛歋[1...i] = = S[i+1...2i] = = ... = = S[(N/i-1)i + 1...(N/i)i]銆?/span>
閭d箞鍓╀笅鐨勫氨鏄鐪婼[x+1...N]鏄惁涓篠鐨勫墠緙錛屽悓鏍峰彲浠ユ牴鎹甆ext鏁扮粍鐨勫畾涔夎繘琛屽垽鏂紝鐗規(guī)畩鐨勶紝褰搙 == N鏃訛紝S[x+1...N] == S[N+1,N]涓虹┖涓詫紝蹇呭畾涓篠鐨勫墠緙錛屼篃鏄弧瓚蟲潯浠剁殑錛屾灇涓炬墍鏈夋弧瓚蟲潯浠剁殑闀垮害L錛屽彇L - (N-x)鐨勬渶灝忚呭氨鏄瓟妗堜簡銆?/span>
PKU 2406 Power Strings
棰樻剰錛氱粰瀹氫竴涓暱搴︿笉瓚呰繃N(N <= 106)鐨勫瓧絎︿覆錛屽畠涓瀹氭槸鏌愪釜涓查噸澶岾嬈″緱鍒幫紝姹傝繖涓狵鐨勬渶澶у箋?/span>
棰樿В錛氬亣璁懼瓙涓睺閲嶅K嬈″悗寰楀埌涓睸錛岄偅涔圱鐨勯暱搴︿竴瀹氫負(fù)L = N/K(瑕佹暣闄?錛屽垯T = S[1...L]錛屽皢S鎷嗗垎鎴怟浠斤紝姣忎喚闀垮害涓篖錛屽垯鏈?/span>
S[1...L] = S[L+1...2L] = S[2L+1...3L] = ... = S[(K-1)L+1...KL]
鐢變簬瑕佷繚璇並鏈澶э紝鍔垮繀L瑕佸彇鏈灝忥紝鎵浠ユ牴鎹甆ext鍑芥暟鐨勫畾涔夛紝鏈塏ext[KL] = (K-1)L;
鍗砃ext[N] = N - L錛屾墍浠 = N - Next[N];
浣嗘槸寰楀嚭鐨勯暱搴榪樿淇濊瘉鑳借N鏁撮櫎錛屾墍浠ュ鏋滀笉鑳芥暣闄よ鏄嶭 = N錛屽嵆K = 1錛涜屽鏋滆兘鏁撮櫎錛岄偅涔圞 = N / (N - Next[N]);
PKU 2752 Seek the Name, Seek the Fame
棰樻剰錛氱粰瀹氫竴涓暱搴︿負(fù)N(N <= 400000)鐨勫瓧絎︿覆錛屾眰瀹冪殑鍓嶇紑絳変簬鍚庣紑鐨勬墍鏈夊瓙涓茬殑闀垮害銆?/span>
棰樿В錛氳冨療Next鏁扮粍鐨勫畾涔夈備笉鏂凱浠f眰N鐨凬ext錛孨ext[N]鐨凬ext......鐒跺悗閫嗗簭杈撳嚭鍗沖彲銆?/span>
HDU 3374 String Problem
棰樻剰錛氱粰瀹氫竴涓暱搴︿負(fù)N(N <= 106)鐨勫瓧絎︿覆S錛岀劧鍚庡皢瀹冭繘琛屽乏縐伙紝鎬誨叡浜х敓N涓驚鐜瓧絎︿覆錛屾眰鍏朵腑瀛楀吀搴忔渶灝忕殑涓茬殑緙栧彿浠ュ強(qiáng)榪欐牱鐨勪覆鐨勪釜鏁幫紝鍜屽瓧鍏稿簭鏈澶х殑涓茬殑緙栧彿浠ュ強(qiáng)榪欐牱鐨勪覆鐨勪釜鏁般?/span>
棰樿В錛氬厛姹傚瓧鍏稿簭鏈灝忕殑錛屽瓧鍏稿簭鏈澶х殑鍙渶瑕佸皢姣忎釜瀛楃鐢?27鍑忓幓鏈韓鍐嶆眰涓嬈″瓧鍏稿簭鏈灝忓嵆鍙紱瀹氫箟涓や釜鎸囬拡i錛宩錛宨鍒濆涓?錛宩鍒濆涓?錛屽啀瀹氫箟涓涓暱搴﹀彉閲弅 = 0錛?/span>
1) 姣旇緝S[i+k] 鍜孲[j+k]鐨勫ぇ灝忓叧緋伙細(xì)
a) 濡傛灉鐩哥瓑錛宬鑷1錛涘綋k==N鍒欒煩鍑哄驚鐜紝鍚﹀垯緇х畫1)鐨勬瘮杈冿紱
b) 濡傛灉S[i+k] < S[j+k]錛宩 += k + 1, k = 0;
c) 濡傛灉S[i+k] > S[j+k], i += k + 1, k = 0;
2) 濡傛灉i 鍜宩鐩哥瓑錛宩鑷1錛涘綋j==N鎴杋==N鍒欒煩鍑哄驚鐜紝鍚﹀垯緇х畫1)鐨勬瘮杈冿紱
榪欐牱寰幆緇撴潫鍚庡鏋滐紝鍙杋鍜宩鐨勫皬鑰呭氨鏄瓟妗堛?/span>
鐒跺悗鍦ㄥ埄鐢ㄦ眰鍑烘潵鐨勪笅鏍囷紝鐢熸垚涓涓柊鐨勫瓧絎︿覆浣滀負(fù)鍖歸厤涓插拰涓涓師涓茬殑涓ゅ嶇殑涓蹭綔涓虹洰鏍囦覆榪涜KMP鍖歸厤錛屽緱鍒扮鏁般?br />
棰樻剰錛氱粰瀹?font face="Times New Roman">N*M(N<=1000, M <= 1000)鐨?/font>01鐭╅樀S錛屽啀緇欏畾T(T <= 100)涓?/font>P*Q(P <= 50, Q <= 50)鐨?/font>01鐭╅樀錛岄棶P*Q鐨勭煩闃典腑鏈夊灝戜釜鏄?/font>S鐨勫瓙鐭╅樀銆?/font>
棰樿В錛氱敱浜?font face="Times New Roman">P <= 50錛屾墍浠ユ垜浠彲浠ユ妸鎵鏈?/font>P*Q鐨勭煩闃佃繘琛屼簩榪涘埗浣嶅帇緙╋紝灝?/font>P*Q鐨勭煩闃電殑姣忎竴鍒楀帇緙╂垚涓涓?/font>64浣嶆暣鏁幫紝榪欐牱P*Q鐨勭煩闃靛氨鍙樻垚浜嗕竴涓暱搴︿負(fù)Q鐨勬暣鏁板簭鍒?/font>T錛岀敤鍚屾牱鐨勬柟寮忓N*M鐨勭煩闃佃繘琛屽帇緙╋紝鎬誨叡鍙互浜х敓(N-P+1)涓暱搴︿負(fù)M鐨勬暣鏁板簭鍒楋紝鍓╀笅鐨勫氨鏄繘琛屾渶澶?/font>(N-P+1)嬈?/font>KMP鍖歸厤浜嗐?/font>