输入:
注意 - 只有第一个输入发生变化,第二个输入被视为常量,可用于预处理。
期望输出:
识别文本中第2项表达式的所有匹配项。如果存在匹配歧义,请尽可能采用贪婪匹配。
运行时应该相对较快,但没有严格的性能要求。蛮力企图可能就足够了。
对此有什么好的算法?后缀树在这里有用吗?如何查看所有表达式并将它们放在哈希表中?另请注意,我对实用解决方案感兴趣,因此易于实施比超高效算法更有用...
答案 0 :(得分:2)
查看Aho–Corasick算法。
答案 1 :(得分:1)
假设无限存储的一般“算法”,为了优化这一点,可以根据字符在数据上建立一个树,允许您递归地搜索模式。在您构建的树索引中,您将向下遍历,直到达到“唯一”点,“leaf”将给出该唯一出现位置的位置。
在上面的段落中,例如“index”一词出现一次。如果树一次构建一个字符,那么我们遵循的树路径将以“i”字符开头,然后是“in”。如果它区分大小写,则只有3次出现(假设,优化和索引)。当我们下次搜索'd'时,我们会得到我们独特的结果。当然,我们可以首先用空格开始搜索,然后是i,然后是n,我们将遵循不同的路径。
您还可以使树不区分大小写,并且可以在每个分支点使用“nybble”而不是字节。