簡體   English   中英

Knuth-Morris-Pratt算法中的模式前綴函數計算

[英]Pattern prefix-function computation in Knuth-Morris-Pratt Algorithm

給定模式的前綴功能中是否可能有類似這樣的內容,

0 0 1 2 3 0 1 2 3 4 5 3 4 5 6 7 0 1 2

在上述前綴函數中,4 5之后只有6還是0? 如果像上一個那樣在4 5之后有例如3(小於5且大於0)的可能性,那么模式應該如何。

我可以想到的模式僅與此相似,

a b a b a b a b c a 
0 0 1 2 3 4 5 6 0 1

謝謝。

這是一個示例模式,其中6之后的鏈接4失敗:

a b c a b c d a b c a b c a
0 0 0 1 2 3 0 1 2 3 4 5 6 4

您的特定示例是不可能的。 從所需的前綴表開始構造字符串時,您將獲得

0 0 1 2 3 0 1 2 3 4 5 3 4 5 6 7 0 1 2
a b a b a c a b a b a
  1. 第一個符號任意,說一個
  2. 第二個符號必須與第一個符號不同,否則前綴長度將為1
  3. 第三必須與第一相同
  4. 第四必須與第二相同
  5. 第五必須與第三相同
  6. 不能是到目前為止使用的兩個符號中的任何一個,a的前綴長度為1,b為4
  7. 第七必須是第一
  8. 必須是第二
  9. 必須是第三
  10. 必須是第四
  11. 必須是第五
  12. a會給前綴長度1,b會給4,c會給6,其他都給0

表中與長度p的前綴相對應的條目給出了該前綴的最寬邊界b的寬度,即w 下一個條目只能是w+1 (如果b是可擴展的),0(如果沒有前綴匹配)或比b的某些邊框的寬度大一個。

因此,如果table[p]包含length-p前綴的最寬邊框的寬度( table[0] = -1 ),則table[p+1]1+table[p]1+table[table[p]] ,..., 1+table[table[...[table[p]]]] = 1 + table[0] = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM