我有1.5GB的文件 我需要在这个文件中找到30亿个字节序列。一个序列可以是4或5个字节。 找到第一个位置,或者确保文件中的这样一个序列没有。 怎么做得最快?
计算机的RAM限制 - 4GB
答案 0 :(得分:1)
使用grep
。它经过高度优化,可以在大文件中查找内容
如果这不是一个选项,请阅读它使用的Boyer-Moore algorithm并自行实现。要重现相同的速度grep
,需要进行大量的调整。
答案 1 :(得分:0)
使用预处理。
我认为你应该创建一个Index
,运行文件,记录每个唯一的4字节序列的第一个实例。将4字节序列和第一个出现位置存储在不同的文件中,按字节序列排序。
在索引文件上使用简单的二进制搜索可以有效地找到序列。
你可以更聪明,并使用散列将搜索减少到O(1)。
答案 2 :(得分:0)
查看Searchlight搜索引擎。
该程序允许将多达10个ASCII字节的多个序列存储在单个文件中。然后,您将其指向文件,目录,文件名文件,目录名文件,文件名的arraylist或目录名称的arraylist,然后就可以了!
此外,它报告找到的每个序列的文件字节位置/偏移量。