【发布时间】:2014-02-15 21:47:56
【问题描述】:
我有一个 256 位值的数组。该数组很大(数百万条记录),但很少修改它并且适合内存。对于给定的 256 位数字,我想查找是否存在至少 N 位相等的记录。例如,10000 和 01111 有 0 位相等,1000 和 1001 有 3 位相等。总是 N > 128,或者更确切地说是 N > 140。我不需要找到特定的数字,我只需要查找列表中是否存在这样的数字。
是否有某种数据结构或某种索引可以以某种方式加快搜索速度?
【问题讨论】:
-
有趣的问题。 nearest neighbor search 算法可以做到这一点,尽管这会做比必要的工作更多的工作。如果这些位接近随机,答案几乎总是“是”。我觉得应该有一种方法可以非常非常快地做到这一点。
-
我也有同样的感觉 :-(
-
这个问题大约是 32 位,但答案可能至少部分仍然适用:stackoverflow.com/q/6389841/555045
-
数据会是什么样子?随机案例很简单,但您不太可能拥有随机数据。我们应该期待很多“是”的答案还是“不是”的答案?我们是否应该在边界上期待很多查询?
-
...好吧,我认为如果我揭示我的问题背后的问题是公平的。我正在处理我发现的 NILSIMCA 哈希算法的垃圾邮件过滤。 en.wikipedia.org/wiki/Nilsimsa_Hash 我想我会有很多 NILSIMCA 哈希值,它们将是垃圾邮件样本。当收到一封电子邮件时,我需要将所有邮件都穿墙,搜索该电子邮件是否为垃圾邮件。
标签: algorithm search data-structures