串匹配之蠻力算法

基于鄧俊輝老師的c++數(shù)據(jù)結(jié)構(gòu)

問(wèn)題描述
給定文本串T,長(zhǎng)度n 如:1001101101
模式串P,長(zhǎng)度m,如: 1011
此時(shí)默認(rèn)的字符集是{'1','0'}
求成功匹配的字符首位置

算法描述
將P和T從頭對(duì)齊,依次比對(duì)。一旦失敗,將P右移一位,繼續(xù)從頭比對(duì)。

蠻力算法

而代碼實(shí)現(xiàn)上則是由兩個(gè)指針i,j分別指向T,P

代碼實(shí)現(xiàn)

//p:pattern模式串  T:text文本串
int match1(char* P,char* T)
{
    size_t n = strlen(T),i=0;//獲得文本串的長(zhǎng)度,設(shè)定指向文本串的指針i
    size_t m = strlen(P),j=0;//獲得模式串的長(zhǎng)度,設(shè)定指向模式串的指針j

    while(j<m && i<n)
    {
        if(T[i]==P[j])//成功匹配字符則同時(shí)向右挪一位
        {
            i++;
            j++;
        }
        else{
            i-=(j-1);//相當(dāng)于i先減去j再加1,也就是在原來(lái)的位置上右移一位
            j=0;//j重新歸零
        }
    }
    return i-j;//返回成功匹配的起始位置
}

復(fù)雜度分析
從最壞情況分析,比如:
T:0000000000000000000000000000001
P : 0001
那么需要比較n-m+1輪,每輪m次 比對(duì)
當(dāng)n>>m時(shí),漸進(jìn)時(shí)間復(fù)雜度是O(n*m)
但事實(shí)并不悲觀。
實(shí)際上,當(dāng)前字符集的個(gè)數(shù)僅僅為2,極其容易出現(xiàn)局部匹配。
假如字符集的數(shù)目很可觀,那么將很難出現(xiàn)局部匹配,此時(shí)m->1
時(shí)間復(fù)雜度趨近于O(n)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 歸去來(lái)兮。 1.1 說(shuō)明 本篇為《挑戰(zhàn)程序設(shè)計(jì)競(jìng)賽(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy閱讀 14,904評(píng)論 0 160
  • 9.3.3 快速排序 ??快速排序?qū)⒃瓟?shù)組劃分為兩個(gè)子數(shù)組,第一個(gè)子數(shù)組中元素小于等于某個(gè)邊界值,第二個(gè)子數(shù)組中的...
    RichardJieChen閱讀 1,959評(píng)論 0 3
  • 在2015年,我第一次接觸到了投資,而在不久之后就遇到了15年的股災(zāi),市場(chǎng)上成千上萬(wàn)的人接受了慘重的洗禮,不幸的是...
    楊刀刀daoker閱讀 350評(píng)論 1 0
  • f43c5a04421b閱讀 156評(píng)論 0 0
  • 文/那年沐子 是純美和圣潔的體現(xiàn), 卻要勾出 內(nèi)心深處的邪惡靈魂。 有才華 也有怯懦逃避, 拼命的掩飾呼之欲出 的...
    那年沐子閱讀 207評(píng)論 0 0

友情鏈接更多精彩內(nèi)容