algorithm - 帮助我优化索引字符串搜索

标签 algorithm string optimization search indexing

因此,作为一项练习,我正在构建一种算法,以尽可能快地在较大的字符串中搜索单词(任意字符集)。由于之前对现有搜索算法几乎一无所知,到目前为止,我的方法如下:

  1. 映射出较大字符串中字符对的出现(对 -> 位置列表)。
  2. 对于每一对,还存储在较大字符串中出现的次数。
  3. 获取搜索词中的所有字符对。
  4. 使用得到的字符串中出现次数最少的对,在每个位置检查匹配的搜索词的剩余字符。

这就是它的要点。我想我可以使用具有更长字符的 map ,但现在我只使用成对的。

我还能做些什么来让它更快吗?我的处理方式是否正确?

最佳答案

字符串搜索是一个深入研究的主题:

http://en.wikipedia.org/wiki/String_searching_algorithm

您正在考虑寻找例如2 个连续的字符并存储该组合的频率,即使您使用平衡数据结构,这也是一个非常昂贵的操作。我真的看不出将连续字符存储为预处理步骤对您有何帮助。

因此,显然有许多用于字符串搜索的算法。我发现有趣的是,有些算法甚至不需要扫描文本正文中的每个字符。示例:如果您搜索单词“abbbbbc”,并且发现字符“d”是文本正文的下一个字符,您可以立即向前跳转 5 个字符,甚至无需查看它们是什么,那么如果下一个字符是 'b' 或 'c' 你显然必须回头看看你是否在跳跃时犯了错误,但如果没有那么你跳过了 5 个字符而无需比较。然而,这很难实现,并引出了有限自动机理论。

关于algorithm - 帮助我优化索引字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108818/

相关文章:

c - 如何查找用户是否使用 C 在命令提示符中输入了 .cs 文件?

c# - 字节码大小对 JIT/内联/性能有多大影响?

optimization - 警告 : 'chart.js' . CommonJS 或 AMD 依赖项可能导致优化救助

c - 具有不同优化级别的 GNU 并行运行 Makefile

java - 什么是一次性算法,我的算法是什么?

algorithm - 使用 ELKI 进行离群值检测

algorithm - Big-O for while 用户输入循环

algorithm - 重复子串搜索

python - 循环处理字符串

string - 在字符串中的特定位置插入字符