我正在尝试使用ukkonen的后缀树来比较文档。
此时我对两件事感到担忧:
首先,我尝试为一个文档生成后缀树,然后使用该后缀树查找该文档中的所有常见子字符串。
接下来是识别两个文档之间的所有常见子字符串。
我能够根据http://marknelson.us/1996/08/01/suffix-trees/为文档生成ukkonen后缀树。并搜索给定的子字符串。 但是我仍然无法找到识别给定文档中所有常见子串的方法。 你能告诉我一种方法吗。我正在使用visual c ++。
我们可以使用ukkonen的算法来比较两个文档并识别它们之间的所有常见子串吗?如果是这样,请逐步解释。
中对Ukkonen的后缀树有一个很好的解释答案 0 :(得分:0)
如果您有两个文档,可以使用Ukkonen算法为这两个文档构建generalized suffix tree,然后进行后处理步骤以清除不可能的配置。
一旦有了通用后缀树,就可以在树上运行DFS,以识别树中具有与每个文档的后缀相对应的叶的每个内部节点。这些节点中的每一个都对应于两个文档共有的子字符串,因为每个节点对应于两个字符串后缀的前缀。
从那里,你可以做那些最合理的子串。如果您想要最长的公共子字符串,只需搜索在第一步中标记的字符串深度最高的节点。如果要查找所有这些子字符串,可以迭代所有这些节点并打印出沿途累积的每个子字符串。