构建一个好的后缀表 - 理解一个例子

时间:2014-12-11 17:13:27

标签: suffix-array boyer-moore

我真的想了解如何为给定模式构建良好后缀表的示例。问题是,我无法绕过它。我看了很多例子,但不知道数字的来源。

所以这里: 以下示例演示了如何在 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

对此事的任何帮助都非常感谢。我根本不知道如何得到这些数字。谢谢!

3 个答案:

答案 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文件使我的生活更加轻松。因此,希望它也能帮助正在努力理解该算法的人们。