哈希表:什么是将空桶标记为空的最佳方法?

时间:2014-06-28 01:49:05

标签: hashtable

陷入烦人的问题 - 我需要一些方法来判断我正在尝试填充的存储桶是否为空(存储桶存储为键值对的值类型结构数组)。

如果我要保留一个用于将事物标记为空的关键值,那么这只会意味着一些不幸发现该哈希值的数据永远无法访问。 另一方面,在KVP结构中包含一个布尔值会将结构的大小从16增加到24(这样的浪费和我对内存的紧张)。是否有人为此找到了一个好的解决方案?

1 个答案:

答案 0 :(得分:0)

这是一个与哈希表一样固有的问题,就像碰撞一样。一个相关的问题是再次在冲突的上下文中处理从哈希表中删除。没有任何解决方案不涉及性能上的某些折衷,因此看到具有特定密钥的哈希表实现是非常常见的。

到目前为止,最直接的解决方案是将特殊情况下的关键值用于表示空。也就是说,如果用户试图存储键值0,你只需将它放在一个特殊的数组中就可以保存。

仅使用指针的真正稀疏哈希表通常不会出现此问题,因为您始终可以找到调用者无法传入的指针值(例如指向您拥有的对象的指针)。显然,使用链表或数组元素的哈希表也没有这个问题,但是,对那些人来说存在巨大的性能损失。

您可以通过使用多个元素找到一些聪明的方法来在表格内部对其进行编码。这样做的唯一方法是,如果它以某种方式与删除的元素处理或其他东西统一,那么它将比检查一些单独的列表更自由或更快。