【发布时间】: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 理论的介绍(一种尝试量化最坏情况复杂性的符号,以及处理最佳情况和平均情况的兄弟)。