【问题标题】:Anyone understand the quality of hash?有人了解哈希的质量吗?
【发布时间】:2011-07-27 21:30:38
【问题描述】:

散列的“质量”定义为访问每个元素一次所需的比较总数,相对于随机散列所需的预期数量。该值可以超过 100%。

比较的总数等于每个桶中条目数的平方和。对于 " 键的随机散列到 " 桶中,预期值为:

n + n ( n - 1 ) / 2 * k

哈希的质量究竟是什么?

【问题讨论】:

  • 这个公式是从哪里来的?应该表示需要多少次比较才能找到所有带有“k”桶的“n”键?如果是这样,则加起来是 460,这似乎比最坏情况下的简单数组差 450 次迭代,比使用数组的平均情况差 455 次迭代。我认为那里有问题。
  • 来自perldoc Devel::Peek
  • 啊,有道理。在文档中写为n + n ( n - 1 ) / 2k,更像n + n * ( n - 1 ) / ( 2 * k ),产生更合理的结果。
  • @DavidO ,我不明白这个公式..
  • 您可能会发现perl.com/pub/2002/10/01/hashes.html 很有用。只要桶的分布相当均匀,哈希查找和插入就会在平均恒定时间内发生。 Mastering Algorithms with Perl (O'Reilly) 还讨论了哈希以及 Big-O 理论的介绍(一种尝试量化最坏情况复杂性的符号,以及处理最佳情况和平均情况的兄弟)。

标签: perl hash


【解决方案1】:

这是衡量哈希“均匀分布”程度的指标。理想情况下,散列函数会将所有内容放入自己的存储桶中,但这不会发生,因为您不能拥有那么多存储桶(即使这样也会存在散列冲突,因此不同的值仍然会出现在同一个存储桶中)。

当桶中包含许多元素时,哈希的性能(理想情况下只是向上一个桶并查看其中的单个元素)会降低:如果发生这种情况,您必须线性地遍历所有元素。

100% 的质量是您对填充随机数据的哈希的期望。在这种情况下,所有桶都应该是同样满的。如果超过 100%,则您的数据散列不均匀,查找需要更多时间。

【讨论】:

  • 并非所有的哈希实现都有冲突“最终出现在”同一个桶中——哈希值的冲突可以在没有链接的情况下解决(通常是某种形式的探测和保证的可用性)桶)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2011-07-20
  • 2011-01-11
  • 2023-03-18
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
相关资源
最近更新 更多