Boyer-Moore字符串匹配 - 良好的后缀转换

时间:2016-04-05 12:52:24

标签: algorithm string-matching boyer-moore

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

enter image description here

在类似的术语上,从不理解下表。有什么帮助吗?

enter image description here

参考:

问题 - 第6页,问题7。

答案 - 第11页

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

文字 - The design and analysis of computer algorithms- Anany Levitin(第263页)

2 个答案:

答案 0 :(得分:1)

良好的后缀规则正在寻找已匹配的后缀的实例,其中前一个字符不同。例如,如果您的第一个表格中包含“良好后缀”00,那么此次转移会查找00 之前没有0 的实例。

为什么呢?因为我们知道“好后缀”之前的0不匹配;否则我们不会试图转移。

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

答案 1 :(得分:0)

有时候,书中并没有像在这种算法中那样明确提及事物,而是寻找匹配部分具有不同的前一个字符,这也意味着没有前一个字符的情况完全是模式01010的情况,当k = 1时,索引0处的0(不带1(实际上不带任何东西))与0匹配且先于1的0之间的距离为4,因此D2 = 4。

当k = 1匹配部分的后缀0被发现是从索引0开始的前缀并且它们之间的距离是4时,因此D2 = 4,当k = 3时,我们匹配的部分以1开头,但是我们看到另一个010从索引开始0之前不加任何计数,并且它们之间的距离为2,因此D2 = 2。最后,当在索引0处找到匹配部分的k = 4后缀010时,它与后缀010的距离为2,因此D2再次为2。