因此,作为一项练习,我正在构建一种算法,以尽可能快地在较大的字符串中搜索单词(任意字符集)。由于之前对现有搜索算法几乎一无所知,到目前为止,我的方法如下:
- 映射出较大字符串中字符对的出现(对 -> 位置列表)。
- 对于每一对,还存储在较大字符串中出现的次数。
- 获取搜索词中的所有字符对。
- 使用得到的字符串中出现次数最少的对,在每个位置检查匹配的搜索词的剩余字符。
这就是它的要点。我想我可以使用具有更长字符的 map ,但现在我只使用成对的。
我还能做些什么来让它更快吗?我的处理方式是否正确?
最佳答案
字符串搜索是一个深入研究的主题:
您正在考虑寻找例如2 个连续的字符并存储该组合的频率,即使您使用平衡数据结构,这也是一个非常昂贵的操作。我真的看不出将连续字符存储为预处理步骤对您有何帮助。
因此,显然有许多用于字符串搜索的算法。我发现有趣的是,有些算法甚至不需要扫描文本正文中的每个字符。示例:如果您搜索单词“abbbbbc”,并且发现字符“d”是文本正文的下一个字符,您可以立即向前跳转 5 个字符,甚至无需查看它们是什么,那么如果下一个字符是 'b' 或 'c' 你显然必须回头看看你是否在跳跃时犯了错误,但如果没有那么你跳过了 5 个字符而无需比较。然而,这很难实现,并引出了有限自动机理论。
关于algorithm - 帮助我优化索引字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108818/