【问题标题】:Determining if a position is free in a Closed Hashing确定一个位置是否在封闭哈希中是空闲的
【发布时间】:2010-09-30 16:56:48
【问题描述】:

您将如何确定某个职位是否已被占用?分配内存时,其中的所有内容都是垃圾(在 C++ 中,这是我正在使用的 atm)。我正在考虑使用一个辅助的布尔数组来了解该位置是否被占用,但这需要相当多的额外内存。

我也可以为每个位置设置一个值,但是我将无法使用该值。在这两种情况下,我也会失去一些初始化值的性能(例如,布尔值为 false,其他值为 0 表示该位置是空闲的)。

还有其他解决方案吗?

【问题讨论】:

    标签: c++ hash


    【解决方案1】:

    通常,您使用特殊的占位符元素来指示空值。在最简单的情况下,这可能是一个空指针,但这当然意味着您引入了间接;你不能直接存储你的值。在所有其他情况下,您必须考虑实际存储的类型。例如,如果您存储 32 位整数,则必须保留至少一个预定义值(例如 0)作为标记元素,从而减少可能存储在哈希表中的值范围。

    带有标志的附加数组是一个很好的解决方案。考虑到通过存储位标志而不是全字节变量(甚至是布尔值,在大多数架构上每个都需要 4 个字节),这个数组可以减少至少 8 倍。

    【讨论】:

    • 如果您存储了 32 位整数,您可以只使用一个值(例如,最大或最小整数)作为指示删除的标记值——您不需要将整个位分配给这个任务。
    • 是的,您当然是对的,感谢您的纠正。要点仍然存在:您只允许所有可能值的子集。
    【解决方案2】:

    您可以为此使用boost::optional,而不是原始值。这就是创建它的原因,为项目添加未初始化的值。它的性能损失类似于最初初始化值,但每个项目只需要少量的额外内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多