【问题标题】:Constructing a Good Suffix Table - Understanding an example构建一个好的后缀表——理解一个例子
【发布时间】:2014-12-11 17:13:27
【问题描述】:

我真的想了解一个关于如何为给定模式构建好的后缀表的示例。问题是,我无法绕过它。我看过很多例子,但不知道这些数字来自哪里。

所以这里是: 下面的示例演示了如何在给定模式 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

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

【问题讨论】:

    标签: suffix-array boyer-moore


    【解决方案1】:

    第 1 行,没有匹配的字符,读取的字符不是一个 N。好后缀长度为零。由于模式中有很多字母也不是 N,因此我们这里的信息很少 - 移动 1 是最不有趣的结果。

    第 2 行 我们匹配了 N,它前面有 A 以外的东西。现在看看从末尾开始的模式,我们在哪里 N 前面有 A 以外的东西?还有另外两个 N,但都以 A 开头。这意味着 good 后缀中没有任何部分对我们有用 - 移动整个模式长度 8。

    第 3 行:我们匹配了 AN,它前面不是 M。在模式中间有一个 AN 前面是 P,所以它成为 shift 候选。将 AN 向右移动以与我们的比赛对齐是 3 的移动。

    第 4 行及以上:匹配的后缀不匹配模式中的任何其他内容,但尾随后缀 AN 匹配模式的开头,因此这里的移位都是 6。

    【讨论】:

      【解决方案2】:

      Good Suffix-Table 可能对你有帮助。

      为什么你没有尝试使用最后出现的方法,它比好的后缀表容易得多。我使用最后出现的方法进行搜索

      【讨论】:

        【解决方案3】:

        虽然,这是一个老问题,并且有一个答案被接受,但我只想添加 JHU 的 pdf,它很好地解释了良好的后缀规则。 http://www.cs.jhu.edu/~langmea/resources/lecture_notes/boyer_moore.pdf

        这个 pdf 让我的生活变得轻松多了。所以希望它能帮助那些也在努力理解这个算法的人。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-27
          • 1970-01-01
          • 2012-03-11
          • 1970-01-01
          • 1970-01-01
          • 2023-03-21
          • 2011-06-17
          相关资源
          最近更新 更多