国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)–字符串的KMP算法

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法

樸素模式匹配算法:
一旦發(fā)現(xiàn)當(dāng)前這個子串中某個字符不匹配,就只能轉(zhuǎn)而匹配下一個子串(從頭開始)

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法

但我們可以知道:
不匹配的字符之前,一定是和模式串一致的 \color{red}不匹配的字符之前,一定是和模式串一致的 不匹配的字符之前,一定是和模式串一致的

我們可以利用這個信息進(jìn)行優(yōu)化查找,我們知道一定無法匹配的就無需再進(jìn)行匹配操作了

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法

我們可以發(fā)現(xiàn):

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法

對于模式串T = ‘a(chǎn)baabc’
當(dāng) 第 6 個 \color{red}第6個 6元素匹配失敗時,可令主串指針 i 不變 \color{red}i不變 i不變,模式串指針 j = 3 \color{red}j=3 j=3
當(dāng) 第 5 個 \color{red}第5個 5元素匹配失敗時,可令主串指針 i 不變 \color{red}i不變 i不變,模式串指針 j = 2 \color{red}j=2 j=2
當(dāng) 第 4 個 \color{red}第4個 4元素匹配失敗時,可令主串指針 i 不變 \color{red}i不變 i不變,模式串指針 j = 2 \color{red}j=2 j=2
當(dāng) 第 3 個 \color{red}第3個 3元素匹配失敗時,可令主串指針 i 不變 \color{red}i不變 i不變,模式串指針 j = 1 \color{red}j=1 j=1
當(dāng) 第 2 個 \color{red}第2個 2元素匹配失敗時,可令主串指針 i 不變 \color{red}i不變 i不變,模式串指針 j = 1 \color{red}j=1 j=1
當(dāng) 第 1 個 \color{red}第1個 1元素匹配失敗時,匹配下一個相鄰子串,令 j = 0 , i + + , j + + \color{red}j=0, i++, j++ j=0,i++,j++

再來一個Eg:

數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法
對于模式串T = 'abaabc' 當(dāng)$\color{red}第6個$元素匹配失敗時,可令主串指針$\color{red}i不變$,模式串指針$\color{red}j=3$ 當(dāng)$\color{red}第5個$元素匹配失敗時,可令主串指針$\color{red}i不變$,模式串指針$\color{red}j=2$ 當(dāng)$\color{red}第4個$元素匹配失敗時,可令主串指針$\color{red}i不變$,模式串指針$\color{red}j=2$ 當(dāng)$\color{red}第3個$元素匹配失敗時,可令主串指針$\color{red}i不變$,模式串指針$\color{red}j=1$ 當(dāng)$\color{red}第2個$元素匹配失敗時,可令主串指針$\color{red}i不變$,模式串指針$\color{red}j=1$ 當(dāng)$\color{red}第1個$元素匹配失敗時,匹配下一個相鄰子串,令$\color{red}j=0, i++, j++$

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

typedef struct
{
    char ch[15];
    int length;
}SString;

int Index_KMP(SString S, SString T, int next[])
{
    int i = 1, j = 1;
    while (i <= S.length && j <= T.length)
    {
        if (j == 0 || S.ch[i] == T.ch[j])
            i++, j++; //繼續(xù)比較后繼字符
        else
            j = next[j]; //模式串向右移動
    }
    if (j > T.length)
        return i - T.length;
    else
        return 0;
}
數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法
數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法,408數(shù)據(jù)結(jié)構(gòu),算法,數(shù)據(jù)結(jié)構(gòu),c語言,c++,KMP,字符串匹配算法

n e x t 數(shù)組只和短短的模式串有關(guān),和長長的主串無關(guān) \color{red}next數(shù)組只和短短的模式串有關(guān),和長長的主串無關(guān) next數(shù)組只和短短的模式串有關(guān),和長長的主串無關(guān)

時間復(fù)雜度

KMP算法, 最壞時間復(fù)雜度 O ( m + n ) \color{red}最壞時間復(fù)雜度O(m+n) 最壞時間復(fù)雜度O(m+n)
其中,求next 數(shù)組時間復(fù)雜度O(m)
模式匹配過程最壞時間復(fù)雜度O(n)文章來源地址http://www.zghlxwxcb.cn/news/detail-524375.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法之字符串: Leetcode 557. 反轉(zhuǎn)字符串中的單詞 III (Typescript版)

    翻轉(zhuǎn)字符串中的單詞 III https://leetcode.cn/problems/reverse-words-in-a-string-iii/ 描述 給定一個字符串 s ,你需要反轉(zhuǎn)字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。 示例 1: 示例 2: 提示: 1 = s.length = 5 * 1 0 4 10^4 1 0 4 s 包含可打印的 ASCII 字符。 s 不包含任何開頭或

    2024年02月01日
    瀏覽(24)
  • 【JavaScript數(shù)據(jù)結(jié)構(gòu)與算法】字符串類(計算二進(jìn)制子串)

    【JavaScript數(shù)據(jù)結(jié)構(gòu)與算法】字符串類(計算二進(jìn)制子串)

    個人簡介 ?? 個人主頁: 前端雜貨鋪 ???♂? 學(xué)習(xí)方向: 主攻前端方向,也會涉及到服務(wù)端(Node.js) ?? 個人狀態(tài): 在校大學(xué)生一枚,已拿多個前端 offer(秋招) ?? 未來打算: 為中國的工業(yè)軟件事業(yè)效力 n 年 ?? 推薦學(xué)習(xí):??前端面試寶典 ??Vue2 ??Vue3 ??Vue2/3項(xiàng)目

    2024年02月05日
    瀏覽(102)
  • 數(shù)據(jù)結(jié)構(gòu)課設(shè):基于字符串模式匹配算法的病毒感染檢測問題

    數(shù)據(jù)結(jié)構(gòu)課設(shè):基于字符串模式匹配算法的病毒感染檢測問題

    1.掌握字符串的順序存儲表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的實(shí)現(xiàn)。 問題描述 醫(yī)學(xué)研究者最近發(fā)現(xiàn)了某些新病毒,通過對這些病毒的分析,得知它們的DNA序列都是環(huán)狀的。現(xiàn)在研究者已收集了大量的病毒DNA和人的DNA數(shù)據(jù),想快速檢測出這些人是否感染了

    2023年04月27日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之字符串: Leetcode 20. 有效的括號 (Typescript版)

    有效的括號 https://leetcode.cn/problems/valid-parentheses/ 描述 給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每個右括號都有一個對應(yīng)的相

    2024年02月01日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之字符串: Leetcode 696. 計數(shù)二進(jìn)制子串 (Typescript版)

    計數(shù)二進(jìn)制子串 https://leetcode.cn/problems/count-binary-substrings/ 描述 給定一個字符串 s,統(tǒng)計并返回具有相同數(shù)量 0 和 1 的非空(連續(xù))子字符串的數(shù)量,并且這些子字符串中的所有 0 和所有 1 都是成組連續(xù)的。 重復(fù)出現(xiàn)(不同位置)的子串也要統(tǒng)計它們出現(xiàn)的次數(shù)。 示例 1: 示

    2024年02月01日
    瀏覽(96)
  • C#,字符串匹配(模式搜索)KMP算法的源代碼與數(shù)據(jù)可視化

    C#,字符串匹配(模式搜索)KMP算法的源代碼與數(shù)據(jù)可視化

    ? D.E.Knuth ? J.H.Morris KMP 算法(Knuth-Morris-Pratt 算法)是其中一個著名的、傳統(tǒng)的字符串匹配算法,效率比較高。 KMP算法由 D.E.Knuth , J.H.Morris 和 V.R.Pratt 在 Brute-Force 算法的基礎(chǔ)上提出的模式匹配的改進(jìn)算法。因此人們稱它為“克努特—莫里斯—普拉特算法”,簡稱KMP算法。K

    2024年01月25日
    瀏覽(37)
  • 字符串匹配-KMP算法

    字符串匹配-KMP算法

    KMP算法,字符串匹配算法,給定一個主串S,和一個字串T,返回字串T與之S匹配的數(shù)組下標(biāo)。 在學(xué)KMP算法之前,對于兩個字符串,主串S,和字串T,我們根據(jù)暴力匹配,定義兩個指針,i指向主串S的起始,j指向字串T的起始,依次比較,如果 主串i位置的值等于子串j位置的值,

    2024年02月14日
    瀏覽(28)
  • 字符串匹配算法:KMP

    字符串匹配算法:KMP

    Knuth–Morris–Pratt(KMP)是由三位數(shù)學(xué)家克努斯、莫里斯、普拉特同時發(fā)現(xiàn),所有人們用三個人的名字來稱呼這種算法,KMP是一種改進(jìn)的字符串匹配算法,它的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達(dá)到快速匹配的目的。它的時間復(fù)雜度是 O(m+n) 字

    2024年02月06日
    瀏覽(25)
  • 【kmp算法】字符串匹配

    kmp算法解決的是字符串匹配的問題,具體來說假定我們要在主串s[ ] 中匹配模式串p[ ],找到匹配到的位置loc; 最自然的想法是暴力寫法 (BF)枚舉主串字符s[ i ] ,和模式串p[ j ]。一個一個匹配,如果匹配失敗,i指針回退回起點(diǎn),往前進(jìn)一位,再次進(jìn)行比較,知道匹配成功。

    2024年02月04日
    瀏覽(31)
  • 字符串匹配算法(BF&&KMP)

    字符串匹配算法(BF&&KMP)

    個人主頁:平行線也會相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實(shí)現(xiàn))】 在學(xué)習(xí)這個算法之前,我們先來看看什么時字符串匹配算法,簡單來說 有一個主串和一個子串,查找子串在主串的位置,然后返回這個位置

    2023年04月17日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包