我理解坏符号表。在良好的后缀表中,不应该将距离计算为从最右边出现的模式到模式文本末尾的距离?在这种情况下,下表不应该将所有距离(d2)都设为1(除了最后一个条目是5),因为它的左边可以使用相同的模式吗?
在类似的术语上,从不理解下表。有什么帮助吗?
参考:
问题 - 第6页,问题7。
答案 - 第11页
计算机算法的设计和分析 - Anany Levitin(https://umutzafer.files.wordpress.com/2012/01/solu7.pdf)
文字 - The design and analysis of computer algorithms- Anany Levitin(第263页)
答案 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。