我有大约1.5 of的文件,我需要在这个文件中找到30亿字节的序列。一个序列可以是4个或5个字节。找到第一个位置,或确保这样的序列在文件编号中。怎样才能做到最快?
计算机上的RAM限制-4 4GB
发布于 2012-03-22 12:51:07
使用grep。它对于在大文件中查找内容进行了高度优化。
如果这不是一个选择,请阅读它使用的Boyer-Moore algorithm并自己实现它。不过,要重现grep同样的速度,需要进行大量的调整。
发布于 2012-03-22 13:04:51
使用预处理。
我认为你应该创建一个Index,遍历文件,记录每个唯一的4字节序列的第一个实例。将4字节序列和第一个出现位置存储在不同的文件中,按字节序列排序。
在索引文件上使用简单的二进制搜索将有效地找到您的序列。
您可以更聪明地使用散列将搜索减少到O(1)。
发布于 2014-01-31 22:34:11
看看Searchlight搜索引擎。
该程序允许在单个文件中存储最多10个ASCII字节的多个序列。然后将它指向一个文件、目录、文件名文件、目录名文件、文件名数组列表或目录名数组列表,然后它就消失了!!
此外,它还报告找到的每个序列的文件字节位置/偏移量。
https://stackoverflow.com/questions/9816435
复制相似问题