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

數(shù)據(jù)結(jié)構(gòu)-串-KMP算法詳解(Next數(shù)組計算)(簡單易懂)

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


本文章就專講kmp,暴力匹配就不講了(我相信能搜索kmp的,暴力匹配算法應(yīng)該也都了解過了)
為什么網(wǎng)上那么多講kmp 我還發(fā)文章,很多文章我覺得講的不是太通俗易懂,大多數(shù)我看起來都覺得有些懵逼

KMP介紹

提示:以下信息來源百度

KMP算法是一種改進的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人們稱它為克努特—莫里斯—普拉特操作(簡稱KMP算法)。KMP算法的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達到快速匹配的目的。具體實現(xiàn)就是通過一個next()函數(shù)實現(xiàn),函數(shù)本身包含了模式串的局部匹配信息。KMP算法的時間復(fù)雜度O(m+n)

上面講了kmp需要求匹配字符串的next數(shù)組來快速匹配,那我們先來講解一下如何求next數(shù)組


一、求Next數(shù)組

求Next數(shù)組前我們需要了解字符串的前綴表后綴表

前后綴表

如字符串“ABCD”的前后綴表

串的next數(shù)組,算法

了解完字符串前后綴,接下來我們要開始求最長公共前后綴

求最長公共前后綴

我們以“aabaac”為例

串的next數(shù)組,算法

字符串中要沒有公共前后綴就為0

從以上方法就能求出字符串“aabaac”的最長公共前后綴數(shù)組
[0,1,0,1,2,0]

最長相等前后綴表轉(zhuǎn)Next數(shù)組

當然變成Next數(shù)組前還需要進行簡單的處理(其實也就把最長公共前后綴數(shù)組右移而已)
串的next數(shù)組,算法

在最長公共前后綴前面加上 -1 并去掉最后一位就是next數(shù)組了
Next數(shù)組的第一位永遠是-1,第二位永遠是0

注意:Next數(shù)組有很多種求法,依據(jù)匹配字符串的代碼來做選擇,我選擇的方法next數(shù)組第一位是-1,還有另一種方法開頭是0,但原理都是相同的所以不必糾結(jié)


二、使用Next數(shù)組來匹配字符串

為了能較好體現(xiàn)kmp算法:
主串:“aaacaacaaad
模式串:“aaad
模式串Next數(shù)組:[-1,0,1,2]

在主串和匹配串字符相同的情況下,指針 i 和 j 后移

或者遇到主串和匹配串字符不相同但next值為-1時指針 i 和 j 后移

步驟一
1i、1j、2i、2j代表指針位置及步驟,中間字符相等的地方我就不講了,就主要講重點的地方

指針4i4j的字符不相同,不匹配位置的next值為2(藍色的a),所以需要將匹配串右移到匹配串索引2的位置
串的next數(shù)組,算法
步驟二
匹配串后移后指針ij的字符依然還是不相同,不匹配位置的next值為1(藍色的a),所以需要將匹配串右移到匹配串索引1的位置
串的next數(shù)組,算法
步驟三
匹配串后移后指針ij的字符依然還是不相同,不匹配位置的next值為0(藍色的a),所以需要將匹配串右移到匹配串索引0的位置
串的next數(shù)組,算法
步驟四
匹配串后移后指針ij的字符依然還是不相同,但這時next值為-1,這就需要指針i和j向后移
串的next數(shù)組,算法
步驟五
指針i和j后移后,(中間字符相同的地方就不解說了),指針到3i和3j的字符不相同,next值為1,然后就和之前講的步驟一樣,需要將匹配串右移到匹配串索引1的位置
串的next數(shù)組,算法
步驟六
后面的步驟就不再多敘述,自己看圖分析
串的next數(shù)組,算法
步驟七
串的next數(shù)組,算法

步驟八
然后這就匹配完成了
串的next數(shù)組,算法


總結(jié)

代碼后續(xù)會補充
非常感謝您能看到這,本人第一次寫文章,所以我可能講的不是很好,如有問題望大家能多多提醒,感謝。下次講sunday算法
注:如看不懂,可以的話,麻煩您在評論區(qū)中發(fā)句看不懂,好讓我知道我寫的爛不爛文章來源地址http://www.zghlxwxcb.cn/news/detail-737478.html

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

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

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

相關(guān)文章

  • [數(shù)據(jù)結(jié)構(gòu)] 串與KMP算法詳解

    [數(shù)據(jù)結(jié)構(gòu)] 串與KMP算法詳解

    今天是農(nóng)歷大年初三,祝大家新年快樂! 盡管新舊交替只是一個瞬間,在大家互祝新年快樂的瞬間,在時鐘倒計時數(shù)到零的瞬間,在煙花在黑色幕布綻放的瞬間,在心底默默許下愿望的瞬間……跨入新的一年,并不意味了一切都會朝著更美好,也沒有什么會從天而降,我們賦

    2024年02月19日
    瀏覽(24)
  • KMP算法中的next數(shù)組求解

    KMP算法中的next數(shù)組求解

    ? ? ? ? KMP算法(Knuth-Morris-Pratt) 是一個字符串的匹配算法,其中有一部分算法需要求解next數(shù)組來求解 該位置前面字符串的最長相同的真前綴和真后綴長度。 ? ? ? ?? next數(shù)組的求解方法為:第一位的next值為0,第二位的next值為1,后面求解每一位的next值時,根據(jù)前一位進行

    2024年02月10日
    瀏覽(20)
  • KMP算法——(手把手算next數(shù)組)

    KMP算法——(手把手算next數(shù)組)

    該算法核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù),從而達到快速匹配的目的。 KMP算法與BF算法(暴力算法)區(qū)別在于, 主串 的i不會回退,并且 模式串 的j不會每次都回到0位置。 第一個問題:為什么主串的i不需要回退? 看如下兩個字符串: a b c d

    2023年04月18日
    瀏覽(23)
  • 【KMP】從原理上詳解next數(shù)組和nextval數(shù)組

    本文將從原理上詳細解釋KMP算法中的 next 數(shù)組以及 nextval 數(shù)組,盡量讓大家明白它們到底在記錄什么,為什么要這樣算。以及 現(xiàn)在普遍的KMP算法實現(xiàn)當中的next數(shù)組與前兩者有何不同 。篇幅較長,但盡量講清楚。 雖然數(shù)據(jù)結(jié)構(gòu)中對next數(shù)組有定義,但并不易于理解,因此我個

    2024年02月06日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】KMP算法

    【數(shù)據(jù)結(jié)構(gòu)與算法】KMP算法

    ?在C語言的strstr的實現(xiàn)過程中,所涉及的算法較為簡單,或者說只是一個簡單的思路而已,在字符串過長時,所涉及的算法復(fù)雜度過大,那有沒有比較簡單的算法呢?這里就涉及到了KMP——由三位大佬提出的,下面我們一起來了解吧! ?KMP算法是一種改進的字符串匹配算法

    2024年03月26日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)--KMP算法

    模板: 例題:acwing--kmp字符串(831. KMP字符串 - AcWing題庫) 給定一個字符串?S,以及一個模式串?P,所有字符串中只包含大小寫英文字母以及阿拉伯數(shù)字。 模式串?P 在字符串?S 中多次作為子串出現(xiàn)。 求出模式串?P 在字符串?S 中所有出現(xiàn)的位置的起始下標。 輸入格式 第一

    2024年02月11日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu):KMP算法

    數(shù)據(jù)結(jié)構(gòu):KMP算法

    ? ? ?KMP算法是由Knuth、Morris和Pratt三位學者發(fā)明的,所以取了三位學者名字的首字母,叫作KMP算法。 ? ? ?KMP主要用于字符串匹配的問題,主要思想是 當出現(xiàn)字符串不匹配時,我們可以知道一部分之前已經(jīng)匹配過的的文本內(nèi)容,利用這些信息從而避免從頭再開始匹配。 ? ?

    2024年02月04日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】樸素模式匹配 & KMP算法

    【數(shù)據(jù)結(jié)構(gòu)】樸素模式匹配 & KMP算法

    ?? 自在飛花輕似夢,無邊絲雨細如愁 ?? ? ?? 正式開始學習數(shù)據(jù)結(jié)構(gòu)啦~此專欄作為學習過程中的記錄 ?? 子串的定位操作通常稱為串的模式匹配,它求的是模式串在主串中的位置,而樸素模式匹配就是一種不斷移動主串指針,每一次都和模式串依次進行比較的暴力求解方法

    2024年02月16日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)--字符串的KMP算法

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

    樸素模式匹配算法: 一旦發(fā)現(xiàn)當前這個子串中某個字符不匹配,就只能轉(zhuǎn)而匹配下一個子串(從頭開始) 但我們可以知道: 不匹配的字符之前,一定是和模式串一致的 color{red}不匹配的字符之前,一定是和模式串一致的 不匹配的字符之前,一定是和模式串一致的 我們可以利用

    2024年02月12日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)—串的詳細解釋(含KMP算法)

    數(shù)據(jù)結(jié)構(gòu)—串的詳細解釋(含KMP算法)

    1.1串的定義 串:串是由零個或多個字符組成的有限序列,又叫字符串(其的存儲結(jié)構(gòu)包含順序表存儲、單鏈表存儲的形式。) 一般記為s=\\\"a1a2a3....an\\\"(n=0),其中,s是串的名稱,用雙引號(也可以使用單引號)括起來的字符序列是串的值,注意引號不是串的內(nèi)容。ai(i=i=n)可以是字母、

    2023年04月09日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包