【问题标题】:Bloom filter inverse? possible?布隆过滤器逆?可能的?
【发布时间】:2017-03-17 11:21:41
【问题描述】:

来自一个面试问题:

“确定一个单词是否在存储列表中。该列表不适合内存。不允许磁盘访问,用于查找,仅限内存访问。不允许误报,误报正常。”

布隆过滤器正好相反:允许误报,不允许误报。

我的想法:我们不能使用散列函数,因为我们可能会遇到违反“无误报”要求的冲突。即使使用计数布隆过滤器,碰撞仍然会导致误报。 IE。两个字符串产生相同的哈希,所以当第一个被“插入”时,我们查找第二个,它会在那里显示它,尽管它不是。

我认为答案有点复杂,因为我们不能有误报。听起来对吗?

【问题讨论】:

  • 开放链式哈希呢?我认为我们应该能够使用它。
  • 对于提出的问题,只需将列表的一部分存储在排序数组中也符合要求:)
  • 要跳过@twotwotwo的答案,也不存储任何满足要求的东西,总是回答no。
  • 我认为a bit array 的答案很有趣:虽然我知道数组可能是什么,但我知道如何索引它或者它的值是多少该指数的意思。 (对于不大于内存的列表,我可能会第二次开放链式散列(对探测有限制)。如果有足够的公共前缀,即使列表不适合,也可以使用 trie。)

标签: algorithm bloom-filter


【解决方案1】:

我认为 LRU 缓存可以。因为当我们询问一个词是否在列表中时,我们要么想要“肯定是”或“可能不是”,或者说否则,不允许误报,但漏报可以;然后可以说“可能不在列表中”,即使它在那里(可能不在),如果这个词恰好在 LRU 缓存中,那么它总是会回答“肯定是”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多