【问题标题】:Fast text editor find快速文本编辑器查找
【发布时间】:2010-10-06 14:33:59
【问题描述】:

有谁知道文本编辑器/程序员编辑器如何能够对非常大的文本文件进行如此快速的搜索。

它们是在加载时、在查找开始时还是在其他一些巧妙的技术上进行索引?

我迫切需要更快地实现我所拥有的东西,这是从文本的顶部到底部的极其缓慢的步行。

非常感谢任何想法。

这是针对 C# 实现的,但我对它的技术感兴趣的不仅仅是实际代码。

【问题讨论】:

  • 你的情况是什么?几场演出?
  • 另外,您是否需要搜索多语言文本? C# 具有内置的 unicode 支持,但如果您想使用搜索算法,这可能会影响您的性能。

标签: algorithm string search


【解决方案1】:

我知道的一种尚未提及的方法是 Knuth-Morris-Pratt-Search (KMP),但它对语言文本不太好(这是由于算法的前缀属性),但对于DNA匹配之类的东西非常好。

还有一个是hash-Search(不知道有没有正式的名字)。首先,计算模式的哈希值,然后制作一个滑动窗口(具有模式的大小)并将其移动到文本上并查看哈希是否匹配。这里的想法是选择散列,您不必计算整个窗口的散列,但您只需使用下一个字符更新散列(并且旧字符从散列计算中退出)。当您要搜索多个字符串时,此算法的性能非常好(因为您只需预先计算字符串的哈希值)。

【讨论】:

    【解决方案2】:

    grep

    虽然本身不​​是文本编辑器,但经常被很多文本编辑器调用。我很好奇你是否尝试过 grep 的源代码?即使在搜索大文件时,它对我来说似乎总是非常快。

    【讨论】:

    【解决方案3】:

    如果大多数人只使用基本的、幼稚的搜索技术(扫描第一个字符上的匹配项,然后测试命中是否成功),我不会感到惊讶。

    【讨论】:

      【解决方案4】:

      Boyer-Moore 搜索算法开始。它需要一些预处理(速度很快)并且搜索效果很好——尤其是在搜索长子字符串时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多