2

我理解坏符号表。在好的后缀表中,距离不应该计算为从最右边的模式出现到模式文本末尾的距离吗?在这种情况下,下表不应该将所有距离 (d2) 都设为 1(最后一个条目为 5 除外),因为在它的最左侧可以使用相同的模式?

在此处输入图像描述

在类似的条件下,也从未理解下表。有什么帮助吗?

在此处输入图像描述

参考:

问题 - 第 6 页,问题 7。


答案 - 第 11 页


计算机算法的设计与分析- Anany Levitin ( https://umutzafer.files.wordpress.com/2012/01/solu7.pdf )

文本 -计算机算法的设计和分析 - Anany Levitin(第 263 页)

4

2 回答 2

1

好的后缀规则是寻找前一个字符不同的已匹配后缀的实例。例如,00在您的第一个表中的“好后缀”的情况下,移位会寻找一个00 前面没有 a0的实例。

为什么?因为我们知道0前面的“好后缀”不匹配;否则我们不会试图改变。

在第二个表中,找不到这样的实例。因此,相反,我们寻找与“好后缀”后缀匹配的模式的合理前缀。

于 2016-04-05T14:42:56.323 回答
0

有时,书中并没有像您希望在此类算法中那样明确提及事物,问题是,查找具有不同前导字符的匹配部分的出现也意味着完全没有前导字符的匹配部分在模式 01010 中是这种情况,当 k=1 时,索引 0 处的 0 之前没有 1(实际上没有任何东西)和匹配并以 1 开头的 0 之间的距离为 4,因此 D2=4。

当 k=1 匹配部分的后缀 0 被发现作为从索引 0 开始的前缀并且它们之间的距离是 4 所以 D2=4,当 k=3 我们匹配的部分前面是 1 但是我们看到另一个从索引 0 开始的 010 没有前面任何重要的东西,它们之间的距离是2,所以D2 = 2。最后,当匹配部分的 k=4 后缀 010 在索引 0 处找到时,该索引与我们的后缀 010 的距离为 2,因此 D2 再次为 2。

于 2019-12-14T11:11:19.867 回答