我真的想了解如何为给定模式构建良好后缀表的示例。问题是,我无法绕过它。我看了很多例子,但不知道数字的来源。
所以这里: 以下示例演示了如何在 ANPANMAN 模式下构建 Good Suffix Table :
Index | Mismatch | Shift | goodCharShift
-----------------------------------------------
0 | N| 1 | goodCharShift[0]==1
1 | AN| 8 | goodCharShift[1]==8
2 | MAN| 3 | goodCharShift[2]==3
3 | NMAN| 6 | goodCharShift[3]==6
4 | ANMAN| 6 | goodCharShift[4]==6
5 | PANMAN| 6 | goodCharShift[5]==6
0 | NPANMAN| 6 | goodCharShift[6]==6
0 | ANPANMAN| 6 | goodCharShift[7]==6
对此事的任何帮助都非常感谢。我根本不知道如何得到这些数字。谢谢!
答案 0 :(得分:8)
第1行,没有匹配的字符,读取的字符不为N.良好后缀长度为零。由于模式中有很多字母也是而不是N ,我们这里的信息很少 - 换1是最不感兴趣的结果。
第2行我们匹配了N,它之前是A以外的其他东西。现在看一下从结尾开始的模式,我们在哪里有N除了A以外的其他东西?还有另外两个N,但两者都以A开头。这意味着良好后缀的任何部分都不会对我们有用 - 按完整模式长度8移动。
第3行:我们匹配AN,并且前面没有M.在模式的中间有一个以P开头的AN,因此它成为移位候选者。将AN向右移动以与我们的比赛对齐是3的转变。
第4行和第4行up :匹配的后缀与模式中的其他内容不匹配,但尾随后缀AN与模式的开头匹配,因此此处的移位均为6。
答案 1 :(得分:1)
它可能会帮助您Good Suffix-Table。
为什么你没有尝试使用最后一次出现的方法,与良好的后缀表相比,它很容易。我使用最后一次出现的方法进行搜索
答案 2 :(得分:0)
尽管这是一个古老的问题,并且有一个答案被接受,但是我只想添加JHU的pdf,它很好地解释了后缀规则。 http://www.cs.jhu.edu/~langmea/resources/lecture_notes/boyer_moore.pdf
此pdf文件使我的生活更加轻松。因此,希望它也能帮助正在努力理解该算法的人们。