Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 动态调整数据结构_Hash - Fatal编程技术网

Hash 动态调整数据结构

Hash 动态调整数据结构,hash,Hash,为什么我们只根据负载因子动态调整哈希表的大小? 如果我们选择在均匀分布散列策略中检测到冲突时以几何方式增加表大小,是否有任何可能的影响 负载因子大致上是假设哈希函数良好时发生冲突的概率,因此这两个概念相差不远 使用负载因子是因为它易于计算,并且不存在统计噪声,而实际碰撞是如此 另一个原因是遍历表中所有元素的成本。空存储桶仍然需要检查,因此加载系数括号也是枚举所有存储元素的最差性能括号 当使用碰撞模式调整表大小时,碰撞模式中的自然噪声是一个问题。我们决不想完全按照你提出的政策行事。即使负载因子为2

为什么我们只根据负载因子动态调整哈希表的大小?
如果我们选择在均匀分布散列策略中检测到冲突时以几何方式增加表大小,是否有任何可能的影响

负载因子大致上是假设哈希函数良好时发生冲突的概率,因此这两个概念相差不远

使用负载因子是因为它易于计算,并且不存在统计噪声,而实际碰撞是如此

另一个原因是遍历表中所有元素的成本。空存储桶仍然需要检查,因此加载系数括号也是枚举所有存储元素的最差性能括号

当使用碰撞模式调整表大小时,碰撞模式中的自然噪声是一个问题。我们决不想完全按照你提出的政策行事。即使负载因子为25%,我们也会在每次插入时以1/4的概率对表进行几何增长(例如,通过因子G>1),然后再以1/(4G)的概率对表进行几何增长。我们如何决定何时收缩表?当然不是每次都没有碰撞

因此,事实上,我们必须在“窗口”中计算碰撞与插入的数量,并在比率超过高阈值和低阈值时进行调整。窗口必须相当大,以很好的概率滤除噪声。它需要存储和计算开销来维护。这可能不值得,至少对于大多数时间使用的小表来说是这样


不过,在诸如数据库这样的设置中,表很大,并且有很多操作,实际的统计数据用于优化性能。我不确定散列表大小是否包含在实际软件的优化中,但这是可能的。我能想象的最可能的原因是不愿意接受哈希函数失败的微小风险。

我们不需要计算冲突。我们假设我们有统一的散列函数,在第一次冲突时,我们将表大小增加一倍。我认为这种策略的效率丝毫不亚于基于负载系数的策略。这样,它将不再具有统计噪声。