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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串处理 —— 单模式匹配 —— 朴素的字符串匹配算法(BF 算法)

發(fā)布時間:2025/3/17 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串处理 —— 单模式匹配 —— 朴素的字符串匹配算法(BF 算法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【算法流程】

樸素的字符串匹配算法即暴力匹配算法(BF,Brute Force),其本質(zhì)是暴力枚舉,主要特點有:

  • 沒有預(yù)處理階段;
  • 滑動窗口總是后移 1 位;
  • 對模式中的字符的比較順序不限定,可以從前到后,也可以從后到前;
  • 匹配階段需要 O((n - m + 1)m) 的時間復(fù)雜度;
  • 需要 2n 次的字符比較;
  • 很顯然,樸素的字符串匹配算法是最原始的算法,它通過循環(huán)來檢查在范圍 n-m+1 中是否存在滿足條件?P[1..m] = T [s + 1..s + m] 的有效位移 s。

    在上圖中,對于文本 T=acaabc 和模式 P=aab,將模式 P 沿著 T 從左到右滑動,逐個比較字符以判斷模式 P 在文本 T 中是否存在,可以看出,該算法沒有對模式 P 進行預(yù)處理,所以預(yù)處理的時間為 0,而匹配的時間復(fù)雜度在最壞情況下為 O((n-m+1)m),如果 m=n/2,則時間復(fù)雜度為 O(n^2)。

    【實現(xiàn)】

    char t[N];//文本 char p[N];//模式 int naiveStringMatcher() {int tLen=strlen(t);//文本串的長度int pLen=strlen(p);//模式串的長度int i=0;//主串的位置int j=0;//模式串的位置while(i<tLen&&j<pLen){if(t[i]==p[i]){//當(dāng)兩字符相同時,比較下一個i++;j++;}else{//當(dāng)兩字符串不同時i=i-j+1;//i從上一個開始匹配點向后一位j=0;//j歸零}}if(j==pLen)//最終當(dāng)模式串的位置與模式串的長度相同時,說明匹配成功return i-j;//返回匹配位置else//匹配失敗return -1;//返回-1 }

    ?

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。