next陣列 nextval陣列的推導及C語言實現

2021-10-18 10:51:23 字數 1790 閱讀 5010

kmp演算法是一種字串的模式匹配演算法,用於獲取子串t在主串s中的位置。它對bf(brute force)演算法進行了改進。kmp演算法根據已知的部分匹配結果確定子串t需向右移動的距離,處理了bf演算法在匹配過程中主串指標i回溯的問題。而next陣列就是對子串向右移動位置的具體描述。

nextval陣列是對next陣列的改進,處理了next陣列的不必要比較。乙個例子如下圖所示:

定義如下圖所示:

推導如下:

補充圖:

步驟如下:

補充圖:

函式名:get_next

功能描述:

求next陣列,輸入為陣列型字串,輸出為next陣列

*/status get_next

(sstring t,

int next)

else

}return ok;

}步驟如下:

可以看出,nextval陣列的求解是在next陣列求解的基礎上,新增乙個步驟。從而有兩個求nextval陣列的順序:

每求出乙個next[j],就執行一次新增的步驟,求出當前nextval[j](適用於計算機求解)

先將整個next陣列求出,再對每乙個next[j]執行上述新增步驟,從而求出整個nextval陣列(考試用)

/*

函式名:get_nextval

功能描述:

求nextval陣列,輸入為陣列型字串,輸出為nextval陣列

*/status get_nextval

(sstring t,

int nextval)

else

}return ok;

}

例子如下圖所示:

接下來計算nextval陣列值:

前述c語言實現依賴於文獻[1]構建的**體系,康建偉[2]提供了這個體系的乙個實現。這裡執行程式得到如下輸出:

此外,有乙個有意思考試題目:

這裡想問:如何快速求解?

[1] 嚴蔚敏, 吳偉民. 資料結構(c語言版)[m]. 北京: 清華大學出版社, 2007.

[2] 康建偉. 《資料結構-c語言版》(嚴蔚敏,吳偉民版)課本原始碼+習題集解析使用說明[eb/ol]. 2021-02-01.

next和nextval的求法

有的時候再學kmp演算法的時候我們第一步就被next和nextval嚇壞了,今天我來講一下我求next和nextval的方法和技巧,如有錯誤也希望大家及時指正。01 2345 6789 10字串ab aacd aaaa bnext 10 0110 0111 1nextval 10 1110 1111...

next陣列介紹

next陣列介紹 分類 高階資料結構 2012 09 02 10 10 676人閱讀收藏 舉報 c 首先看看next陣列值的求解方法例如 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2 next陣列的求解方法是 第一位的next值為0,第二位的next值為1,後面...

next陣列介紹

首先看看next陣列值的求解方法例如 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2 next陣列的求解方法是 第一位的next值為0,第二位的next值為1,後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等...