我有一个不会更改的大型静态二进制文件 (10GB)。
我希望能够将小字符串(每个 15 字节或更小)作为输入,然后确定哪个字符串出现频率最低。
我知道,如果不实际搜索整个二进制文件,我将无法准确确定这一点,所以我知道这将是一个近似值。
构建树/哈希表是不可行的,因为它需要大约 256^15 字节,这是很多。
我有大约 100GB 的磁盘空间和 8GB 的 RAM 将专门用于这项任务,但我似乎无法找到任何方法来完成这项任务而不实际查看文件。
我有足够的时间来准备大二进制文件,之后我需要多次决定哪个字符串出现频率最低。
有什么想法吗?
谢谢! 丹尼尔。
(顺便说一句:如果重要的话,我正在使用 Python)
最佳答案
也许可以构建一个哈希表,其中包含尽可能多的 n 元组的计数?您可以修剪不再出现的树。我不会将其称为“近似值”,但可以称为“上限”,以确保检测到未出现的字符串。
因此,假设您可以构建所有 4 元组。
然后要计算“ABCDEF”的出现次数,您需要 count(ABCD)、count(BCDE)、count(CDEF) 中的最小值。如果其中任何一个为零,则保证该字符串不会出现。如果是一个,它最多出现一次(但可能根本不会出现)。
关于python - 字符串在另一个字符串中出现了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128593/