将字符串与多种模式匹配的最快方法

时间:2016-11-15 22:47:11

标签: algorithm

我有一个字符串列表,这些字符串是带AND和OR运算符和通配符的模式。现在给定一个输入字符串,如果匹配任何模式则返回true,否则返回false。

说,我有'n'模式和长度'm'的查询 现在,显而易见的方法是为字符串中的每个模式运行循环和grep。这需要O(nm)时间。

现在,我的问题是,有可能做得更好吗?我在想某种表达式评估有限状态机可能吗?是否有这样的名称/参考实现?

由于

1 个答案:

答案 0 :(得分:0)

您正在寻找Boyer–Moore string search algorithm

如果您首先解析模式并从中构建Abstract Syntax Tree,然后还将查询字符串解析为另一个抽象语法树,然后使用节点搜索(对于root)和树比较算法(相当简单),以查看是否在查询字符串中找到了任何模式字符串。从理论上讲,查询字符串的解析可以在O(n)中完成,但实际上我怀疑它会带来更好的性能。这可能是一个有趣的练习。