【问题标题】:Explanation about hashing and its use for data compression关于散列及其用于数据压缩的说明
【发布时间】:2010-10-01 12:08:58
【问题描述】:

我正面临一个使用散列的应用程序,但我仍然无法弄清楚它是如何工作的。这是我的问题,散列用于生成一些索引,并使用这些索引访问不同的表,并且在我添加使用索引获得的每个表的值之后,我得到了我的最终值。这样做是为了减少内存需求。哈希函数的输入是在一个随机常数和应用程序的一些参数之间进行 XOR。

这是一个典型的哈希应用程序吗?我不明白的是如何使用散列来减少内存需求?谁能澄清一下?

谢谢

【问题讨论】:

    标签: hash data-compression


    【解决方案1】:

    单独的哈希与内存没有任何关系。

    它通常用于哈希表。哈希表的工作原理是计算您要键入的内容的 散列,然后将其用作数据结构的索引。

    散列允许您将键(字符串等)简化为更紧凑的值,例如整数或位集。

    这可能是您所指的内存节省——将大键减少为简单整数。

    但请注意,哈希值不是唯一的!一个好的散列算法可以最大限度地减少冲突,但它们并不打算减少到唯一值——这样做是不可能的(例如,如果你的散列输出一个 32 位整数,你的散列将只有 2^32 个唯一值)。

    【讨论】:

    • 但是如果你不太在意并且“相当肯定”是一个很好的答案,那么这是可以接受的。
    • A perfect hash 对于有限的键集是唯一的,因此它可用于使用这些键实现哈希表。
    【解决方案2】:

    你说的是bloom filter吗?这使用哈希函数来获得一种空间有效的方法来测试集合的成员资格。如果是这样,请查看链接以获取说明。

    【讨论】:

    • 不,不是这样,这是用来减少内存需求的。但是非常有用的信息是布隆过滤器。谢谢。
    【解决方案3】:

    大多数好的散列实现都是内存效率低下的,否则会涉及更多的计算——而这正是散列的重点。

    哈希实现用于提高处理效率,因为它们将为您提供恒定的运行时间,用于插入、删除和检索等操作。

    您可以考虑散列的质量,即您的所有数据,无论是什么类型或大小,始终以一个固定长度的形式表示。

    【讨论】:

      【解决方案4】:

      如果进行哈希处理不是为了构建真正的哈希表,而只是在字符串/内存块表中创建索引,则可以解释这一点。如果您的数据中有 20 次相同的字符串(或内存序列),然后仅用其哈希/表索引替换该字符串的所有 20 个实例,则可以通过这种方式实现数据压缩。但是,如果该表中包含每个哈希值的实际冲突链,那么我刚才描述的不是正在发生的事情;在这种情况下,散列的原因很可能是为了加快执行速度(通过提供对存储值的快速访问),而不是压缩。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 2016-10-24
        • 1970-01-01
        相关资源
        最近更新 更多