我有一个不会更改的大型静态二进制文件(10GB)。字符串出现在另一个字符串中的次数
我希望能够输入小字符串(每个15字节或更低),然后确定哪个字符串是最不频繁的。
我明白,如果没有真正搜索整个二进制文件,我无法完全确定这一点,所以我知道这将是一个近似值。
构建一个树/哈希表是不可行的,因为它需要大约256^15字节,这是ALOT。
我有大约100GB的磁盘空间和8GB RAM将专门用于此任务,但我似乎无法找到任何方式来实现此任务,而不会实际上通过该文件。
我有尽可能多的时间,因为我想准备大二进制文件,然后我需要决定哪些是最不频繁的字符串很多次。
任何想法?
谢谢! 丹尼尔。
(顺便说一句:如果它很重要,我使用Python)
你确定你真的想要近似吗?取决于这是什么类型的文件,不完整的抽样可能是相当具有误导性的。 – Thilo 2013-04-21 06:41:16
也许可以构建一个包含尽可能多的前缀的散列表,因为您可以负担得起存储空间?您可以修剪不再出现的树木。我不会称之为“逼近”,但可能是“上限”,并保证检测不出现的字符串。 – Thilo 2013-04-21 06:45:26
我将不得不每次运行算法大约20,000次,以决定大约15个字符串(以选择理想的字符串)。 (大10gb文件将始终保持不变)。 关于哈希表和前缀 - 我想过。我将回答这个问题作为对下面提出的答案的评论 – Avenger 2013-04-21 07:00:37