【发布时间】:2014-06-26 21:59:55
【问题描述】:
我有很多字符串(可能大约 50k-1M,所有字符串都不太长,可能 1-20 个字符)。现在我得到任何正则表达式,我需要返回所有匹配字符串的列表/迭代器。这必须尽可能快。
有什么好的索引结构可以做到这一点?
目前,我正在字符串的字符上构建一棵树。我将 RegExp 转换为确定性自动机。然后我计算该自动机与树的交集。这看起来是一种快速的方法,但我想知道其他可能性。
一个额外的挑战是支持 Unicode/UTF8,但我现在不想把这个问题集中在那个位上。
【问题讨论】:
-
您尝试/可以使用什么操作系统和语言?
-
@rob:我主要是在这里询问算法/数据结构,所以这无关紧要。但是,我是用 C++ 编写的。
-
这取决于需要多久查找一次字符串列表以及需要多久添加一次。在以前的工作中,他们有一个类似的项目,字符串很少更改并且经常阅读。在这种情况下,使用并遍历字符图以到达适当的端点。它在旧系统上带来了相当大的加速(我不记得具体的图形结构,我只记得他们使用的是
c++boost 库。祝你好运。 -
@MikeH-R:它们是迭代添加的,应该可以在合理的时间内将新的添加到列表中,但是,查询速度要快得多。所以我想和你的情况类似。
标签: regex search match automaton