文件搜索功能的有效方法

时间:2012-02-17 04:22:07

标签: c# .net algorithm data-structures

我有一份非常庞大的文字文件。我正在实现“搜索”功能,以查找文件中给定字符串的出现次数并显示其位置。它不仅仅是全字搜索,它还可以包含一个单词/ sentance / paragraph的一部分。我正在研究这个过程的高效数据结构。如果是全字搜索我可以使用try / hash表。我将无法使用后缀数组/后缀树,因为文件大小非常大。排序也不是那么有效。其他简单的选项只是使用框架的字符串搜索/正则表达式功能,这需要线性时间。这种操作有没有更好的已知方法?最初它只是字符串搜索,后来计划用元字符进行搜索。

2 个答案:

答案 0 :(得分:1)

Trie和后缀树/数组是一个不错的选择但是如果你不喜欢它们我有另一个解决方案:创建一个哈希表:

  • 为所有长度为1,2,3,...的字符串创建一个哈希表。其中N是您想要的任何数字复杂度O(N * size_of_text)
  • 如果您想找到一个字符串,您有两个选项:

    如果字符串的大小低于N,则只需将其搜索到哈希表~O(1)进行搜索,然后使用o(size_of_string)进行创建hash_key
    如果大小大于N,你只需创建大小为N的块,然后执行以下操作:搜索块并记住所有位置。比你对下一个块做同样的事情并检查是否有连续的数字(例如:我们第一次有i,j和第二次有k,i + N,比i,i + N是一个很好的组合)保存连续对的最后一个数字(i,i + N,你只保留i + N)并继续,直到你的堆栈中没有数字或你完成了这个单词 希望有所帮助。

答案 1 :(得分:0)

Lucene.NET是一个搜索引擎库,使用索引进行文本扫描: http://incubator.apache.org/lucene.net/