我正面临一个使用散列的应用程序,但我仍然无法弄清楚它是如何工作的。这是我的问题,哈希用于生成一些索引,并使用这些索引我访问不同的表,并在我添加每个表的值后,我得到使用索引和我得到我的最终值。这样做是为了减少内存需求。散列函数的输入是在随机常数和应用程序中的一些参数之间进行异或。
这是典型的哈希应用吗?我不明白的是如何使用散列可以减少内存需求?任何人都可以澄清这个吗?。
谢谢
答案 0 :(得分:1)
单独哈希与记忆没有任何关系。
它经常用于哈希表。 Hashtables通过计算你所关注的 hash 来工作,然后将其用作数据结构的索引。
Hashing允许您将键(字符串等)缩减为更紧凑的值,如整数或位组。
这可能是你所指的内存节省 - 将一个大键减少为一个简单的整数。
但请注意,哈希不是唯一的!一个好的哈希算法可以最大限度地减少冲突,但它们并不是为了减少一个唯一值 - 这样做是不可能的(例如,如果你的哈希输出一个32位整数,你的哈希只有2 ^ 32个唯一值)。
答案 1 :(得分:0)
你说的是bloom filter吗?这使用散列函数来获得一种空间有效的方法来测试集合的成员资格。如果是,请参阅链接以获得解释。
答案 2 :(得分:0)
大多数好的哈希实现都是内存效率低下的,否则会涉及更多的计算 - 而这恰好会忽略哈希点。
哈希实现用于处理效率,因为它们可以为插入,删除和检索等操作提供持续的运行时间。
您可以考虑散列的质量,使您的所有数据(无论何种类型或大小)始终以单一固定长度的形式表示。
答案 3 :(得分:0)
如果正在进行的散列不是构建真正的散列表,而是仅在字符串/内存块表中创建索引,则可以解释这一点。如果您的数据中有20次相同的字符串(或内存序列),然后您用该哈希/表索引替换了该字符串的所有20个实例,则可以通过这种方式实现数据压缩。但是,如果该表中包含每个哈希值的实际冲突链,那么我刚才描述的并不是正在发生的事情;在这种情况下,散列的原因很可能是加速执行(通过提供对存储值的快速访问),而不是压缩。