日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解字符串的朴素模式匹配算法

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解字符串的朴素模式匹配算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

復習串的樸素模式匹配算法

模式匹配 :

子串定位運算,在主串中找出子串出現的位置。

在串匹配中,將主串 S 稱為目標(串),子串 T 稱為模式(串)。如果在主串 S 中能夠找到子串 T, 則稱匹配成功,返回 第一個 和 子串 T 中 第一個字符 相等 的 字符 在主串?S 中的 序號,否則,稱匹配失敗,返回 0。?

算法思想:

從主串 S 的第 pos 個字符起和模式 T 的第一個字符比較之,若相同,則兩者順次的去比較后續的每一個字符,否則從主串 S?的下一個字符起再重新和模式 T 的字符比較之。 (為什么說它樸素,就是因為笨,因子串和主串的每躺比較,當發現匹配不對,則主串的指針要回溯到上次開始比較的字符處的下一個字符處,去重新比一遍!費勁)。

?

詳細圖解;

給定兩個字符串,S 和 T,長度已知。

? ? -》 ? ??

初始 ab 相同,可以順次比較,當3處,不匹配。則j 回溯到T1處,i 回到S 的下一個字符 S2處,從新開始和 T1比較。

? ? -》  ?

b 和 a又不匹配,j 回到1處(位置不變),i 回到下一個字符,也就是3處,繼續比,匹配,順次比較之。直到下面;

? ?    

模式串的 j再次回溯到1,i 到4,繼續比較,不匹配,T 的 j 繼續回溯1,S的 i 繼續到下一個字符,繼續比較,直到 i=6,匹配

     

繼續順次比較,直到 T 比完,也就是在 j=5,i=10之后,j、i 繼續++的時候,要判斷出比完了,如圖。這是整個過程。算法重要的是思想,理解思想,是第一步,腦子里有清晰的思路和完美的情景再現,那么代碼實現都是水到渠成的事情。

?

用代碼編寫如下:

1 int getLength(char *str) 2 { 3 int i = 0; 4 5 while ('\0' != str[i]) { 6 i++; 7 } 8 9 return i; 10 } 11 12 int strCompare(char *strMain, char *strSub, int index) 13 { 14 int iMain = index; 15 int jSub = 0; 16 int lenMain = getLength(strMain); 17 int lenSub = getLength(strSub); 18 19 while ((iMain >= 0 && iMain <= lenMain - 1) && ((jSub >= 0 && jSub <= lenSub - 1))){ 20 if (strMain[iMain] == strSub[jSub]) { 21 iMain++; 22 jSub++; 23 }else{ 24 iMain = iMain - jSub + 1;//回到主串的下一個位置起,開始比較,每次重新開始順次比較, ij 走的長度是一樣的,如果從0開始,那么相減之后,故+1到下一位,如果是從1開始存,那么+2到下一位。 25 jSub = 0; 26 } 27 } 28 //如果匹配 ok,肯定子串先比完。 29 if (jSub > lenSub - 1) { 30 return iMain - lenSub;//得到的就是匹配 ok 后,主串里第一個和模式串第一個字符匹配的字符的位置 31 }else{ 32 return 0;//匹配失敗 33 } 34 } 35 36 int main(int argc, const char * argv[]) { 37 char *str1 = "sawtsafvda"; 38 char *str2 = "safv"; 39 40 int i = strCompare(str1, str2, 0); 41 42 printf("%d\n", i); 43 44 return 0; 45 }

4

Program ended with exit code: 0

?

分析時間復雜度

最壞的時候,最后匹配成功,比如,0000000000001 和 00001 ,比較每次都在00001的1開始不匹配,指針回溯到開頭,主串也回溯 i-j+1,若模式子串的長度是m,目標串的長度是n,這時最壞的情況是每遍比較都在最后出現不等,即每遍最多比較m次,最多比較n-m+1遍,總的比較次數最多為m(n-m+1),因此樸素的模式匹配算法為?o(m*n),雖然,樸素的模式匹配,時間復雜度比較大,但是實際中,一般情況(除非模式串和主串之間存在很多的部分匹配的時候,因為此時每遍需要比較的次數很多,相乘不能近似),真正的執行時間是近似于o(n+m )的,故當今仍然有他的用處!

?

辛苦的勞動,轉載請注明出處,謝謝…… http://www.cnblogs.com/kubixuesheng/p/4322410.html

總結

以上是生活随笔為你收集整理的图解字符串的朴素模式匹配算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二区在线播放 | 亚洲区国产区 | 国产伦理一区二区 | 六月色 | 妹子干综合 | 欧美欧美欧美欧美 | 欧美日韩国产在线播放 | 亚洲 高清 成人 动漫 | 国产精品成人网 | av男人天堂网 | 欧美αv | 在线免费看黄色片 | 911香蕉视频 | 欧美xxxxxx片免费播放软件 | 日日摸夜夜添狠狠添久久精品成人 | 亚洲影院在线播放 | 国产成人午夜视频 | 一级黄色片在线播放 | 日本h在线观看 | 综合图区亚洲 | 亚洲熟女乱色一区二区三区久久久 | 久久亚洲免费 | 五月婷婷久久久 | 手机在线不卡av | 精品欧美一区二区久久久 | 国产色视频在线 | 88av.com | 欧美亚洲另类小说 | 香蕉在线影院 | 另类一区二区三区 | 国产ts人妖系列高潮 | 欧美一区二区三区黄片 | 一级v片| 欧美成人一区二区三区四区 | 亚洲成人激情av | 97免费看| 国产在线观看中文字幕 | 欧美成人三级伦在线观看 | 国产亚洲欧美日韩精品 | 精品妇女一区二区三区 | 亚洲欧美日韩一区在线观看 | 国内精品一区二区三区 | 亚洲视频入口 | 欧美在线视频一区二区三区 | 91av视频播放 | 九九在线免费视频 | 久久亚洲国产成人精品性色 | 中文字幕不卡在线 | 亚洲爱爱片 | 私人av| 日产精品久久久久 | 久久亚洲网站 | 亚洲国产小视频 | 被扒开腿一边憋尿一边惩罚 | 少妇精品一区二区 | 成人a区| 少妇高潮淫片免费观看 | 欧美日韩一区二区三区在线电影 | 韩国三级黄色 | 拔萝卜91| 国产精品视频久久久久 | 婷婷去俺也去 | 成人免费在线视频网站 | 香蕉视频在线观看www | 欧美成人精品欧美一级 | 99久久精品一区二区 | 女生扒开尿口给男生捅 | 一区二区三区爱爱 | 人人妻人人藻人人爽欧美一区 | 欧美一区不卡 | 黄色网址链接 | 欧美性受xxxx白人性爽 | 西西毛片 | 黄色大片a级| 美女一级黄色片 | 都市激情亚洲色图 | 伊人精品综合 | 99在线观看精品视频 | 亚洲成人一 | 人妻91麻豆一区二区三区 | 一级bbbbbbbbb毛片| 尤物久久 | 性生交大片免费看3p | 国产在线精品一区 | 岛国大片在线免费观看 | 久久精品区 | 国产色网址 | 麻豆传谋在线观看免费mv | av一区二区三区免费观看 | 精品在线一区二区 | 亚洲风情第一页 | 天天草夜夜操 | 超碰五月天| 久久久久亚洲av片无码下载蜜桃 | 免费人成又黄又爽又色 | 波多野av在线 | 国产成人av免费 | 欧美日韩国产免费 | 成人毛片观看 |