锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鏁扮粍a[N]錛?鑷砃-1榪橬-1涓暟瀛樻斁鍦╝[N]涓紝鍏朵腑鏌愪釜鏁伴噸澶嶄竴嬈°傚啓涓涓嚱鏁幫紝鎵懼嚭琚噸澶嶇殑鏁板瓧銆?/p>
鏂規硶涓錛氬紓鎴栨硶銆?/p>
鏁扮粍a[N]涓殑N涓暟寮傛垨緇撴灉涓?鑷砃-1寮傛垨鐨勭粨鏋滃啀鍋氬紓鎴栵紝寰楀埌鐨勫煎嵆涓烘墍姹傘?/p>
浠g爜錛?/p>
鏂規硶浜岋細鏁板娉曘?/p>
瀵規暟緇勭殑鎵鏈夐」姹傚拰錛屽噺鍘?鑷砃-1鐨勫拰錛屽嵆涓烘墍姹傛暟銆?/p>
瀵逛簬姹傚拰錛屽彲浠ョ洿鎺ユ牴鎹叕寮忓畾涔変竴涓畯銆?define sum(x) (x*(x+1)/2) 鏂規硶涓夛細鏍囧織鏁扮粍娉?/p>
鐢寵涓涓暱搴︿負n-1涓斿潎涓?0'緇勬垚鐨勫瓧絎︿覆銆傜劧鍚庝粠澶撮亶鍘哸[n]鏁扮粍錛屽彇姣忎釜鏁扮粍鍏冪礌a[i]鐨勫鹼紝灝嗗叾瀵瑰簲鐨勫瓧絎︿覆涓殑鐩稿簲浣嶇疆緗?錛屽鏋滃凡緇忕疆榪?鐨勮瘽錛岄偅涔堣鏁板氨鏄噸澶嶇殑鏁般傚氨鏄敤浣嶅浘鏉ュ疄鐜扮殑銆?濡傛灉鑰冭檻絀洪棿澶嶆潅搴︾殑璇濓紝鍏剁┖闂碠錛圢錛?/p>
鏂規硶鍥涳細鍥哄畾鍋忕Щ閲忔硶 a[N]錛岄噷闈㈡槸1鑷砃-1銆傚師鏁扮粍a[i]鏈澶ф槸N-1錛岃嫢a[i]=K鍦ㄦ煇澶勫嚭鐜板悗錛屽皢a[K]鍔犱竴嬈錛屽仛鏍囪錛屽綋鏌愬a[i]=K鍐嶆鎴愮珛鏃訛紝鏌ョ湅a[K]鍗沖彲鐭ラ亾K宸茬粡鍑虹幇榪囥傝鏂規硶涓嶇敤鍙﹀寮杈烵(N)鐨勫唴瀛樼┖闂達紝浣嗘槸鍦ㄦ煡閲嶄箣鍚庤灝嗘暟緇勮繘琛屾仮澶嶃?/p>
鏂規硶浜旓細絎﹀彿鏍囧織娉?/p>
涓婁釜鏂規硶鍑虹幇鍚庢槸鍔燦錛屼篃鍙互鍑虹幇鍚庡姞涓礋鍙鳳紝灝辨槸絎﹀彿鏍囧織娉曘?/p>
浠ヤ笂鐨勬柟娉曞鏁扮粍鍏冪礌鐨勫肩殑鑼冨洿鏄湁闄愬埗鐨勶紝濡傛灉鏁扮粍鍏冪礌鐨勫間笉鏄湪1鑷砃-1鑼冨洿鏃訛紝鍙互鍏堟眰鍑烘暟緇勫厓绱犵殑鏈澶у箋?/p>
杞細http://buptdtt.blog.51cto.com/2369962/749049 "蹇熸帓搴?鐨勬濇兂寰堢畝鍗曪紝鏁翠釜鎺掑簭榪囩▼鍙渶瑕佷笁姝ワ細 銆銆錛?錛夊湪鏁版嵁闆嗕箣涓紝閫夋嫨涓涓厓绱犱綔涓?鍩哄噯"錛坧ivot錛夈?/p>
銆銆錛?錛夋墍鏈夊皬浜?鍩哄噯"鐨勫厓绱狅紝閮界Щ鍒?鍩哄噯"鐨勫乏杈癸紱鎵鏈夊ぇ浜?鍩哄噯"鐨勫厓绱狅紝閮界Щ鍒?鍩哄噯"鐨勫彸杈廣?/p>
銆銆錛?錛夊"鍩哄噯"宸﹁竟鍜屽彸杈圭殑涓や釜瀛愰泦錛屼笉鏂噸澶嶇涓姝ュ拰絎簩姝ワ紝鐩村埌鎵鏈夊瓙闆嗗彧鍓╀笅涓涓厓绱犱負姝€?/p> 涓句緥鏉ヨ錛岀幇鍦ㄦ湁涓涓暟鎹泦{85, 24, 63, 45, 17, 31, 96, 50}錛屾庝箞瀵瑰叾鎺掑簭鍛紵 絎竴姝ワ紝閫夋嫨涓棿鐨勫厓绱?5浣滀負"鍩哄噯"銆傦紙鍩哄噯鍊煎彲浠ヤ換鎰忛夋嫨錛屼絾鏄夋嫨涓棿鐨勫兼瘮杈冨鏄撶悊瑙c傦級 絎簩姝ワ紝鎸夌収欏哄簭錛屽皢姣忎釜鍏冪礌涓?鍩哄噯"榪涜姣旇緝錛屽艦鎴愪袱涓瓙闆嗭紝涓涓?灝忎簬45"錛屽彟涓涓?澶т簬絳変簬45"銆?/p>
絎笁姝ワ紝瀵逛袱涓瓙闆嗕笉鏂噸澶嶇涓姝ュ拰絎簩姝ワ紝鐩村埌鎵鏈夊瓙闆嗗彧鍓╀笅涓涓厓绱犱負姝€?/p>
涓嬮潰鍙傜収緗戜笂鐨勮祫鏂欙紙榪欓噷鍜?a target="_blank">榪欓噷錛夛紝鐢↗avascript璇█瀹炵幇涓婇潰鐨勭畻娉曘?/p>
棣栧厛錛屽畾涔変竴涓猶uickSort鍑芥暟錛屽畠鐨勫弬鏁版槸涓涓暟緇勩?/p>
var quickSort = function(arr) { }; 鐒跺悗錛屾鏌ユ暟緇勭殑鍏冪礌涓暟錛屽鏋滃皬浜庣瓑浜?錛屽氨榪斿洖銆?/p>
var quickSort = function(arr) { 銆銆if (arr.length <= 1) { return arr; } }; 鎺ョ潃錛岄夋嫨"鍩哄噯"錛坧ivot錛夛紝騫跺皢鍏朵笌鍘熸暟緇勫垎紱伙紝鍐嶅畾涔変袱涓┖鏁扮粍錛岀敤鏉ュ瓨鏀句竴宸︿竴鍙崇殑涓や釜瀛愰泦銆?/p>
var quickSort = function(arr) { 銆銆if (arr.length <= 1) { return arr; } 銆銆var pivotIndex = Math.floor(arr.length / 2) ; 銆銆var pivot = arr.splice(pivotIndex, 1)[0]; 銆銆var left = []; 銆銆var right = []; }; 鐒跺悗錛屽紑濮嬮亶鍘嗘暟緇勶紝灝忎簬"鍩哄噯"鐨勫厓绱犳斁鍏ュ乏杈圭殑瀛愰泦錛屽ぇ浜庡熀鍑嗙殑鍏冪礌鏀懼叆鍙寵竟鐨勫瓙闆嗐?/p>
var quickSort = function(arr) { 銆銆if (arr.length <= 1) { return arr; } 銆銆var pivotIndex = Math.floor(arr.length / 2) ; 銆銆var pivot = arr.splice(pivotIndex, 1)[0]; 銆銆var left = []; 銆銆var right = []; 銆銆for (var i = 0; i < arr.length; i++){ 銆銆銆銆if (arr[i] < pivot) { 銆銆銆銆銆銆left.push(arr[i]); 銆銆銆銆} else { 銆銆銆銆銆銆right.push(arr[i]); 銆銆銆銆} 銆銆} }; 鏈鍚庯紝浣跨敤閫掑綊涓嶆柇閲嶅榪欎釜榪囩▼錛屽氨鍙互寰楀埌鎺掑簭鍚庣殑鏁扮粍銆?/p>
var quickSort = function(arr) { 銆銆if (arr.length <= 1) { return arr; } 銆銆var pivotIndex = Math.floor(arr.length / 2); 銆銆var pivot = arr.splice(pivotIndex, 1)[0]; 銆銆var left = []; 銆銆var right = []; 銆銆for (var i = 0; i < arr.length; i++){ 銆銆銆銆if (arr[i] < pivot) { 銆銆銆銆銆銆left.push(arr[i]); 銆銆銆銆} else { 銆銆銆銆銆銆right.push(arr[i]); 銆銆銆銆} 銆銆} 銆銆return quickSort(left).concat([pivot], quickSort(right)); }; 浣跨敤鐨勬椂鍊欙紝鐩存帴璋冪敤quickSort()灝辮浜嗐? 錛堝畬錛?br />
]]>
]]>
蹇熸帓搴忕殑鍩烘湰鎬濇兂錛?/p>
閫氳繃涓瓚熸帓搴忓皢寰呮帓搴忚褰曞垎鍓叉垚鐙珛鐨勪袱閮ㄥ垎錛屽叾涓竴閮ㄥ垎璁板綍鐨勫叧閿瓧鍧囨瘮鍙︿竴閮ㄥ垎鍏抽敭瀛楀皬錛屽垯鍒嗗埆瀵硅繖涓ら儴鍒嗙戶緇繘琛屾帓搴忥紝鐩村埌鏁翠釜搴忓垪鏈夊簭銆?/p>
鍏堢湅涓涓嬭繖騫呭浘錛?/p>
鎶婃暣涓簭鍒楃湅鍋氫竴涓暟緇勶紝鎶婄闆朵釜浣嶇疆鐪嬪仛涓醬錛屽拰鏈鍚庝竴涓瘮錛屽鏋滄瘮瀹冨皬浜ゆ崲錛屾瘮瀹冨ぇ涓嶅仛浠諱綍澶勭悊錛涗氦鎹簡浠ュ悗鍐嶅拰灝忕殑閭g姣旓紝姣斿畠灝忎笉浜ゆ崲錛屾瘮浠栧ぇ浜ゆ崲銆傝繖鏍峰驚鐜線澶嶏紝涓瓚熸帓搴忓畬鎴愶紝宸﹁竟灝辨槸姣斾腑杞村皬鐨勶紝鍙寵竟灝辨槸姣斾腑杞村ぇ鐨勶紝鐒跺悗鍐嶇敤鍒嗘不娉曪紝鍒嗗埆瀵硅繖涓や釜鐙珛鐨勬暟緇勮繘琛屾帓搴忋?/p>
2 3 7 10 14 23 34 53
榪欐牱灝辨帓搴忓ソ浜嗭紝蹇熸帓搴忔槸瀵瑰啋娉℃帓搴忕殑涓縐嶆敼榪涳紝騫沖潎鏃墮棿澶嶆潅搴︽槸O(nlogn)銆?br />
鎴戞兂璇翠竴鍙?#8220;鎴戞棩錛屾垜璁ㄥ帉KMP錛?#8221;銆?br />KMP铏界劧緇忓吀錛屼絾鏄悊瑙h搗鏉ユ瀬鍏跺鏉傦紝濂戒笉瀹規槗鐞嗚В濂戒簡錛屼究璧風爜鏉ュ法楹葷儲錛?br />鑰佸瓙灝辨槸浠婂ぉ鍥句功棣嗗湪鍐欎簡鍑犱釜灝忔椂鎵嶅媺寮哄啓浜嗕竴涓湁bug鐨勩佹晥鐜囦笉楂樼殑KMP錛岀壒鍒槸璁$畻next鏁扮粍鐨勯儴鍒嗐?br />
鍏跺疄錛屾瘮KMP綆楁硶閫熷害蹇殑綆楁硶澶ф妸澶ф妸錛岃屼笖鐞嗚В璧鋒潵鏇寸畝鍗曪紝涓轟綍闈炶鎶撲綇KMP鍛紵絎旇瘯鍑虹幇瀛楃涓叉ā寮忓尮閰嶆椂鐩存帴涓妔unday綆楁硶錛屾棦綆鍗曞張楂樻晥錛屼綍涔愯屼笉涓猴紵
璇村疄璇濓紝鎯沖埌sunday綆楁硶鐨勯偅涓漢錛岀粷瀵規槸鍙戞暎鎬濈淮錛岀粷瀵圭墰銆傚綋鎴戝湪琚獽MP鎶樼(鐨勫鍛涚殑鏃跺欙紝鎴戝氨鐞㈢(錛屾湁娌℃湁鍒殑濂界畻娉曞憿錛燂紵鐞㈢(浜嗗崐澶╀篃娌℃兂鍑轟釜鎵浠ョ劧鏉ャ傜鍟婏紝鑴戝瓙涓嶅鍙戞暎銆?br />
涓嬮潰璐翠笂涓浣嶅厔寮熷啓鐨勭畻娉曟葷粨錛屽緢綆鍗曪紙寤鴻KMP閮ㄥ垎灝變笉鐢ㄧ湅浜嗭紝鐪嬩簡璐硅剳瀛愶級銆?br />鍙傝錛?a >http://hi.baidu.com/willamette/blog/item/02bd0b5599c8b4c0b645ae06.html
瓚佺潃鍋歅resentation鐨勫姛澶紝欏轟究鍋氫竴涓葷粨
瀛楃涓插尮閰嶏細
---willamette
鍦ㄥ尮閰嶄覆涓鎵炬ā寮忎覆鏄惁鍑虹幇錛屾敞鎰忓拰鏈闀垮叕鍏卞瓙搴忓垪鐩稿尯鍒?span style="font-family: Times New Roman">(LCS: Longest Common Substring)
-錛?/strong>Brute Force(BF鎴栬洰鍔涙悳绱?綆楁硶錛?/strong>
榪欐槸涓栫晫涓婃渶綆鍗曠殑綆楁硶浜嗐?br />棣栧厛灝嗗尮閰嶄覆鍜屾ā寮忎覆宸﹀榻愶紝鐒跺悗浠庡乏鍚戝彸涓涓竴涓繘琛屾瘮杈冿紝濡傛灉涓嶆垚鍔熷垯妯″紡涓插悜鍙崇Щ鍔ㄤ竴涓崟浣嶃?/p>
閫熷害鏈鎱€?/p>
閭d箞錛屾庝箞鏀硅繘鍛紵
鎴戜滑娉ㄦ剰鍒?span style="font-family: Times New Roman">Brute Force綆楁硶鏄瘡嬈$Щ鍔ㄤ竴涓崟浣嶏紝涓涓竴涓崟浣嶇Щ鍔ㄦ樉鐒跺お鎱紝鏄笉鏄彲浠ユ壘鍒頒竴浜涘姙娉曪紝璁╂瘡嬈¤兘澶熻妯″紡涓插縐誨姩涓浜涗綅緗憿錛?/p>
褰撶劧鏄彲浠ョ殑銆?/p>
鎴戜滑涔熸敞鎰忓埌錛?span style="font-family: Times New Roman">Brute Force鏄緢涓?span style="font-family: Times New Roman">intelligent鐨勶紝姣忔鍖歸厤涓嶆垚鍔熺殑鏃跺欙紝鍓嶉潰鍖歸厤鎴愬姛鐨勪俊鎭兘琚綋浣滃簾鐗╀涪寮冧簡錛屽綋鐒訛紝灝卞鐜板湪鐨勫彉搴熶負瀹濅竴鏍鳳紝鎴戜滑涔熷悓鏍峰彲浠ュ皢鍓嶉潰鍖歸厤鎴愬姛鐨勪俊鎭埄鐢ㄨ搗鏉ワ紝鏋佸ぇ鍦板噺灝戣綆楁満鐨勫鐞嗘椂闂達紝鑺傜渷鎴愭湰銆?span style="font-family: Times New Roman">^_^
娉ㄦ剰錛岃洰鍔涙悳绱㈢畻娉曡櫧鐒墮熷害鎱紝浣嗗叾寰堥氱敤錛屾枃绔犳渶鍚庝細鏈変竴浜涙洿澶氱殑鍏充簬铔姏鎼滅儲鐨勪俊鎭?/span>
-: KMP綆楁硶
棣栧厛浠嬬粛鐨勫氨鏄?span style="font-family: Times New Roman">KMP綆楁硶銆?/p>
鍘熷璁烘枃錛?span style="font-family: Times New Roman">Knuth D.E., Morris J.H., and Pratt V.R., Fast pattern matching in strings, SIAM Journal on Computing, 6(2), 323-350, 1977.
榪欎釜綆楁硶瀹炲湪鏄お鏈夊悕浜嗭紝澶у涓婄殑綆楁硶璇劇▼闄や簡鏈絎ㄧ殑Brute Force綆楁硶錛岀劧鍚庡氨浠嬬粛浜?span style="font-family: Times New Roman">KMP綆楁硶銆備篃闅炬紝鍛靛懙銆傝皝璁?span style="font-family: Times New Roman">Knuth D.E.榪欎箞world famous鍛紝涓嶄粎鎷夸簡鍥劇伒濂栵紝鑰屼笖榪樺啓鍑轟簡璁$畻鏈虹晫鐨?span style="font-family: Times New Roman">Bible <The Art of Computer Programming>(涓氬唴浜哄+涓鑸畝縐?span style="font-family: Times New Roman">TAOCP).紼嶇◢鎻愪竴涓嬶紝鏈変釜鍙?span style="font-family: Times New Roman">H.A.Simon鐨勫浼欙紝涓嶄粎鎷夸簡Turing Award錛岄『鎵嬫嬁浜嗕釜Nobel Economics Award錛屽仛浜?span style="font-family: Times New Roman">AI鐨勭埜鐖革紝榪樻槸Chicago Univ鐨?span style="font-family: Times New Roman">Politics PhD錛屽彲璋撳叏鎵嶃?/p>
KMP鐨勫叿浣撴弿榪扮暐鍘伙紝鏁欑涔︿竴澶ф妸銆?/span>
-錛欻orspool綆楁硶
Horspool綆楁硶銆?/p>
褰撶劧錛屾湁甯傚満灝辨湁绔炰簤錛屽瓧絎︿覆鍖歸厤榪欎箞澶т竴涓競鍦猴紝涓嶅彲鑳借BF鍜?span style="font-family: Times New Roman">KMP鍏ㄩ儴鍗犱簡錛屼簬鏄張鍑虹幇浜嗗嚑涓己鍔茬殑瀵規墜銆?/p>
絎竴涓櫥鍦虹殑鏄?/p>
璁烘枃錛?span style="font-family: Times New Roman">Horspool R.N., 1980, Practical fast searching in strings, Software - Practice & Experience, 10(6):501-506
Horspool綆楁硶鐨勬濇兂寰堢畝鍗曠殑銆備笉榪囨湁涓垱鏂頒箣澶勫氨鏄ā寮忎覆鏄粠鍙沖悜宸﹁繘琛屾瘮杈冪殑銆傚緢濂藉緢寮哄ぇ錛屼負鍚庢潵鐨勭畻娉曞獎鍝嶅緢澶с?/p>
鍖歸厤涓詫細abcbcsdxzcxx
妯″紡涓詫細cbcac
榪欎釜鏃跺欐垜浠粠鍙沖悜宸﹁繘琛屽鏆楀彿錛?span style="font-family: Times New Roman">c-c錛屾仼瀵逛笂浜嗭紝絎簩涓?span style="font-family: Times New Roman">b-a錛屼笉瀵瑰晩錛屾垜浠簲璇ユ庝箞鍔烇紵闅鵑亾灝辮繖涔堟斁寮冧箞銆備簬鏄紝妯″紡涓蹭粠涓嶅尮閰嶇殑閭d釜瀛楃寮濮嬩粠鍙沖悜宸﹀鎵懼尮閰嶄覆涓笉鍖歸厤鐨勫瓧絎?span style="font-family: Times New Roman">b鐨勪綅緗紝緇撴灉鍙戠幇灞呯劧鏈夛紝璧跺揩瀵逛笂璧跺揩瀵逛笂錛屽埆鑰借浜嗐?/p>
鍖歸厤涓詫細abcbcsdxzcxx
妯″紡涓詫細 cbcac
鐒跺悗緇х畫浠庢渶鍙寵竟鐨勫瓧絎︿粠鍙沖悜宸﹁繘琛屾瘮杈冦傝繖鏃跺欙紝鎴戜滑鍙戠幇浜嗭紝d-c涓嶅尮閰嶅晩錛岃屼笖妯″紡絀塊噷闈㈡病鏈夊櫌錛屾病鍔炴硶錛屽彧濂界Щ鍔ㄤ竴涓ā寮忎覆闀垮害鐨勫崟浣嶄簡銆?/p>
鍖歸厤涓詫細abcbcsdxzcxx
妯″紡涓詫細 cbcac
-錛欱oyer-Moore綆楁硶
瀵逛簬BM綆楁硶錛屼笅闈㈡帹鑽愪竴涓瑙i潪甯鎬紭縐鐨勬枃绔狅紝鍙皳鍥炬枃騫惰寕鍟婏紝鑰屼笖榪樻槸涓狹M鍐欑殑銆?/p>
Boyer-Moore 緇忓吀鍗曟ā寮忓尮閰嶇畻娉?br />http://blog.csdn.net/iJuliet/archive/2009/05/19/4200771.aspx
-錛歋unday綆楁硶
鏈鍚庝竴涓槸Sunday綆楁硶錛屽疄闄呬笂姣?span style="font-family: Times New Roman">Boyer-Moore榪樺揩錛屽懙鍛點傞暱姹熷悗嫻帹鍓嶆氮銆?/p>
鍘熷璁烘枃錛?span style="font-family: Times New Roman">Daniel M. Sunday, A very fast substring search algorithm, Communications of the ACM, v.33 n.8, p.132-142, Aug. 1990
鐪嬪師濮嬭鏂囩殑棰樼洰錛?span style="font-family: Times New Roman">D.M. Sunday璨屼技鏄晠鎰忔兂姘旀皵Boyer-Moore涓や綅澶х墰浼肩殑銆傚懙鍛點備笉榪囧疄闄呬笂鐨勭‘Sunday綆楁硶鐨勭‘姣?span style="font-family: Times New Roman">BM綆楁硶瑕佸揩錛岃屼笖鏇寸畝鍗曘?/p>
Sunday鐨勭畻娉曟濇兂鍜?span style="font-family: Times New Roman">Horspool鏈変簺鐩鎬技錛屼絾鏄傚綋鍑虹幇涓嶅尮閰嶇殑鏃跺欙紝鍗翠笉鏄幓鎵懼尮閰嶄覆涓笉鍖歸厤鐨勫瓧絎﹀湪妯″紡涓茬殑浣嶇疆錛岃屾槸鐩存帴鎵炬渶鍙寵竟瀵歸綈鐨勫彸涓浣嶇殑閭d釜瀛楃鍦ㄦā寮忎覆鐨勪綅緗?/p>
姣斿錛?/p>
鍖歸厤涓詫細abcbczdxzc
妯″紡涓詫細zbcac
鎭╋紝榪欓噷鎴戜滑鐪嬪埌b-a娌℃湁瀵逛笂錛屾垜浠氨鐪嬪尮閰嶄覆涓殑z鍦ㄦā寮忎覆鐨勪綅緗紝鐒跺悗錛屽樋鍢褲?/p>
鍖歸厤涓詫細abcbczdxzc
妯″紡涓詫細 zbcac
濡傛灉妯″紡涓蹭腑鐨勬病鏈夐偅涓瓧絎︽庝箞鍔炲憿錛熷緢綆鍗曪紝璺寵繃鍘誨憲銆?/p>
鍖歸厤涓詫細abcbcedxzcs
妯″紡涓詫細zbcac
e涓嶅湪妯″紡涓蹭腑鍑虹幇
閭d箞鎴戜滑灝?/p>
鍖歸厤涓詫細abcbcedxzcs
妯″紡涓詫細 zbcac
(2009/10/20琛ュ厖)
RK綆楁硶
鏌愪竴澶╁湪鍥句功棣嗙殑涓鏈畻娉曞垎鏋愯璁′功涓婄炕鍒扮殑銆傛濊礬寰堟柊棰栵紒鍜屽ぇ瀹跺垎浜笅銆?br />鍦ㄤ覆鍖歸厤鐨勭畝鍗曠畻娉曚腑錛屾妸鏂囨湰姣弇涓瓧絎︽瀯鎴愮殑瀛楃孌典綔涓轟竴涓瓧孌碉紝鍜屾ā寮忚繘琛屽尮閰嶆鏌ャ傚鏋滆兘瀵逛竴涓暱搴︿負m鐨勫瓧絎?/p>
涓茶祴浠ヤ竴涓狧ash鍑芥暟銆傞偅涔堟樉鐒跺彧鏈夐偅浜涗笌妯″紡鍏鋒湁鐩稿悓hash鍑芥暟鍊肩殑鏂囨湰涓殑瀛楃涓叉墠鏈夊彲鑳戒笌妯″紡鍖歸厤錛岃繖鏄繀瑕佹潯浠?/p>
錛岃屾病鏈夊繀瑕佸幓鑰冭檻鏂囨湰涓墍鏈夐暱搴︿負m鐨勫瓧孌碉紝鍥犺屽ぇ澶ф彁楂樹簡涓插尮閰嶇殑閫熷害銆傚洜姝K綆楁硶鐨勬濇兂鍜孠MP錛孊M錛孲unday絳夋?/p>
璺駿鐒朵笉鍚岋紒
錛堜簨瀹炰笂錛屼箣鍓嶇殑涓插尮閰嶆柟娉曪紝鏄皢妯″紡涓茬殑涓涓竴涓瓧絎︿綔涓哄皬鐨勭壒寰佸幓鍒嗗埆榪涜鍖歸厤錛岃孯K綆楁硶鍒欐槸灝嗕覆鏁翠綋浣滀負涓涓?/p>
鐗瑰緛錛侀毦灝遍毦鍦ㄥ崟涓瓧絎︾殑鐗瑰緛寰堝鏄撴兂寰楀埌錛屾暣浣撲綔涓轟竴涓壒寰佸氨娌¢偅涔堝鏄撴兂寰楀埌浜嗭級
濡傛灉鎶婃暣浣撲綔涓轟竴涓壒寰侊紝閭d箞濡備綍蹇熺殑姹傚嚭榪欎釜鏁翠綋鐗瑰緛鐨勭壒寰佸鹼紵錛?br />妯″紡涓茬殑鐗瑰緛鍊間粎闇姹備竴嬈″嵆鍙傚浜庢枃鏈腑鐨勪換鎰弇涓瓧絎︽瀯鎴愮殑瀛椾覆濡備綍蹇熺殑姹傜壒寰佸氨鏄釜闅劇偣浜嗐?br />鎶涚爾寮曠帀錛岃繖閲岀粰鍑轟竴涓畝鍗曠殑鐗瑰緛璁$畻銆?灝嗗瓧絎︿覆鐨勬瘡涓涓瓧絎︾湅鍋氫竴涓暟錛岄偅涔堣繖涓瓧絎︿覆鐨勫氨鏄竴涓暟瀛楁暟緇勶紝閫?/p>
榪囩Н鍒嗗悜閲忓彲浠ュ揩閫熶換鎰忎竴涓暱搴﹀瓙瀛楃涓茬殑鍚戦噺鍜屻傚彲浠ユ妸瀛楃涓茬殑瀵瑰簲鐨勫瓧絎︽暟緇勭殑鍏冪礌鍜岀湅鍋氳繖涓瓧絎︿覆鏁翠綋鐗瑰緛銆?/p>
榪欎釜鐗瑰緛鏄彲浠ュ啀O錛?錛夌殑鏃墮棿鍐呮眰鍑虹殑銆傚叾瀹炲師濮嬬殑RK綆楁硶閲岄潰鏄妸瀛楃涓茬湅鍋氫竴涓?6榪涘埗鏁板湪璁$畻鐗瑰緛鐨勩傝繖閲屽氨涓嶅暟
鍡︿簡錛屾湁鍏磋叮鐨勫彲浠ユ繁鍏ユ煡鎵?/p>
aabseesds 妯″紡涓?ees
ees
鍙戠幇 see鍚戦噺鍜?== ees鐨勫悜閲忓拰
鐒跺悗灝卞see鍜宔es鍋氶愪釜瀛楃鐨勬瘮杈冦傚彂鐜頒笉鍖歸厤緇х畫寰涓嬭蛋
aabseesds 妯″紡涓?ees
ees
鍙戠幇 ees鍚戦噺鍜?== ees鐨勫悜閲忓拰
鐒跺悗灝卞ees鍜宔es鍋氶愪釜瀛楃鐨勬瘮杈冦傚彂鐜板尮閰峅K銆?br />
鍙﹀榪樻湁 瀛楃涓插尮閰嶈嚜鍔ㄦ満 鍚庣紑鏍戠畻娉曪紙鍒嗗湪綰垮拰闈炲湪綰夸袱縐嶏級絳?瑙佸涓嬫枃绔犮備笉鑳借閭d釜姣旈偅涓洿濂斤紝鍚勪釜綆楁硶閮芥湁鑷繁鐨勪紭鍔垮強鏈浣沖簲鐢ㄥ満鍚堛傚弬鑰冿細
http://blog.csdn.net/yifan403/archive/2009/06/16/4272793.aspx
鍙﹀錛屽叧浜庡妯″紡瀛楃涓插尮閰?鏈堿C綆楁硶錛堝瓧絎︿覆鍖歸厤鑷姩鏈烘濇兂錛?WM綆楁硶錛圔M鍦ㄥ妯″紡鐨勬帹騫垮簲鐢級
鍙傝冿細
http://blog.csdn.net/ijuliet/category/498465.aspx 璇ュコ瀛愮殑blog鏈夊緢澶氬ソ鏂囩珷銆?br />
===============================================================================
涓涓猻unday綆楁硶鐨勫疄鐜?br />http://hi.baidu.com/azuryy/blog/item/10d3d3460b97af0e6b63e5cd.html
澶存枃浠跺畾涔夛細
/* Sunday.h */
class Sunday
{
public:
Sunday();
~Sunday();
public:
int find(const char* pattern, const char* text);
private:
void preCompute(const char* pattern);
private:
//Let's assume all characters are all ASCII
static const int ASSIZE = 128;
int _td[ASSIZE] ;
int _patLength;
int _textLength;
};
婧愭枃浠?br />/* Sunday.cpp */
Sunday::Sunday()
{
}
Sunday::~Sunday()
{
}
void Sunday::preCompute(const char* pattern)
{
for(int i = 0; i < ASSIZE; i++ )
_td[i] = _patLength + 1;
const char* p;
for ( p = pattern; *p; p++)
_td[*p] = _patLength - (p - pattern);
}
int Sunday::find(const char* pattern, const char* text)
{
_patLength = strlen( pattern );
_textLength = strlen( text );
if ( _patLength <= 0 || _textLength <= 0)
return -1;
preCompute( pattern );
const char *t, *p, *tx = text;
while (tx + _patLength <= text + _textLength)
{
for (p = pattern, t = tx; *p; ++p, ++t)
{
if (*p != *t)
break;
}
if (*p == 0)
return tx-text;
tx += _td[tx[_patLength]];
}
return -1;
}
綆鍗曟祴璇曚笅錛?br />int main()
{
char* text = "blog.csdn,blog.net";
char* pattern = "csdn,blog" ;
Sunday sunday;
printf("The First Occurence at: %d/n",sunday.find(pattern,text));
return 1;
}
////////////////////////////////////////////
strstr鐨勫疄鐜般?br />闇瑕佽鏄庣殑鏄痵trstr鏄痗璇█鎻愪緵鐨勪嬌鐢˙rute Force瀹炵幇鐨勫瓧絎︿覆鍖歸厤錛岀畝鍗曘侀氱敤鏄叾鏈澶х殑浼樼偣銆傛椂闂村鏉傚害鏄疧(mn)
// 涓嬮潰鏄疢icrosoft鐨勫疄鐜?br />//緇忓吀綆楁硶
//姣擪MP綆楁硶綆鍗?娌℃湁KMP綆楁硶楂樻晥
char * __cdecl strstr (
const char * str1,
const char * str2
)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/whoismickey/archive/2009/02/08/3869367.aspx