【发布时间】:2017-03-29 23:59:01
【问题描述】:
我有一个字符串列表,这些字符串是带有 AND 和 OR 运算符以及通配符的模式。现在给定一个输入字符串,如果它匹配任何模式,则返回 true,否则返回 false。
说,我有“n”个模式和一个长度为“m”的查询 现在,显而易见的方法是为字符串中的每个模式运行一个循环和 grep。这需要 O(nm) 时间。
现在,我的问题是,是否有可能做得更好?我在想某种表达式评估有限状态机可能吗?是否有类似的名称/参考实现?
谢谢
【问题讨论】:
-
请注意,现代 CPU 在线性数据结构上的循环速度非常快(尤其是当循环适合片上内存并且可以预测分支时),并且跟随指针和片外内存的速度要慢得多使用权。无论您尝试什么,都应该将其与愚蠢的蛮力算法进行基准测试。
-
您当然可以创建一个有限状态机来处理来自所有模式的合并搜索。有关将 RegEx 转变为 FSM 的讨论,请参阅 stackoverflow.com/questions/525004/…。
标签: algorithm