【问题标题】:Checking a given hash is in a very, very long list检查给定的哈希在一个非常非常长的列表中
【发布时间】:2021-11-15 00:33:04
【问题描述】:

我有一个哈希列表。长长的名单。很长的清单。我需要检查给定的哈希是否在该列表中。

最简单的方法是将哈希存储在内存中(在映射或简单数组中)并检查它。但它需要大量的 RAM/SSD/HDD 内存。超过一个服务器可以处理的。

我想知道在合理的内存使用中是否有一个技巧可以做到这一点。可能有我不熟悉的算法或者特殊的合集?

【问题讨论】:

  • 散列的散列,也许?但我认为我们需要更详细地说明您希望做什么。
  • 你如何“有一个列表”不适合磁盘?
  • 您熟悉哪些算法?列表大小?格式?编码? ...?你已经尝试过什么? How to Ask 这个 Q 可能在这里跑题了。也许试试 superuser.com。

标签: algorithm hash


【解决方案1】:

三个想法-

  • 根据这些哈希的结构,您也许可以从 Rainbow Table 的概念中借用一些想法来隐式存储其中的一些。
  • 如果您有足够的哈希值,您可以使用 trie 压缩共享前缀的存储空间,但考虑到它们的长度和(可能)一致性,您不会看到很大的节省。
  • 您可以将散列拆分为多个较小的散列,然后使用这些散列来实现Bloom Filter,但这是一个概率测试,因此您仍然需要将它们存储在其他地方(或能够计算/派生),如果存在感知的“命中”,但是这可能使您能够过滤掉足够多的“未命中”,从而使性能较低(速度方面)的数据结构变得可行。

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2017-02-20
    • 2014-06-28
    • 2018-05-27
    • 2021-01-16
    • 2012-10-28
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多