python - 字符串在另一个字符串中出现了多少次

标签 python algorithm full-text-search

我有一个不会更改的大型静态二进制文件 (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/

相关文章:

c++ - Boost 没有静态链接到 boost::python 共享对象

python - 在 mongodb 上进行服务器端 Hook 的建议方法是什么?

algorithm - Cube on Cube 碰撞检测算法?

algorithm - 预约调度算法(N人有N个忙闲槽,约束-满足)

php - mysql搜索短语使用不区分大小写的匹配

python - 删除 Pandas Dataframe 中的列表

python - 使用 matplotlib 绘制特征行为

algorithm - 使用后缀数组的最小字典序旋转

sql - PostgreSQL 中的全文搜索与模糊搜索相结合

database - SQLite 中的全文搜索