c++ - 计算使用链接的散列映射的散列函数的散布

标签 c++ math performance

我正在用 C++ 编写通用 HashMap ,它使用链接来处理冲突。

假设我有一个包含 11 个桶的 HashMap ,并且我插入了 8 个项目。哈希函数将按如下方式分配它:

bucket[0] = empty
bucket[1] = 2 elements
bucket[2] = empty
bucket[3] = 1 element
bucket[4] = 1 element
bucket[5] = 3 elements
bucket[6] = empty
bucket[7] = 1 element
bucket[8] = empty
bucket[9] = empty
bucket[10] = empty

计算桶上的分布为 5/8 = 0.625。 但是,如何在考虑桶深度的情况下计算点差?

我想知道这个是因为: 假设我添加了 20 个元素,每个桶有 1 个元素,最后一个桶有 11 个元素。

如果我用简单的方法计算点差就是 1,但这显然是不正确的! (当然,表格会调整大小以避免这种情况,但我希望能够显示传播)我想使用此信息来调整哈希函数。

提前致谢!

最佳答案

如果你只是用它来调整哈希函数本身,你可以计算出一个真正的 measure of statistical dispersion ,例如基尼系数。另一方面,如果您试图使它成为 HashMap 本身的一个特性,我建议您不要这样做——计算一个复杂的基准作为“是否需要调整大小”逻辑的一部分有其自身的性能成本;一些天真的东西可能更好。

关于c++ - 计算使用链接的散列映射的散列函数的散布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950360/

相关文章:

c++ - 如何动态增加数组大小?

c++ - 在 C++ 中查找字符串中的子字符串

c++ - 用 C++ 解决数独难题

javascript - 如何存储 Monoidal List 功能链的数据?

c# - 遍历图片像素的最有效方法是什么

php - 优化 mysql 设置/表以提高负载下的性能

c++ - CUDA 函数仅适用于某些元素

N次绕任意非自交闭合多边形移动点的算法

c++ - C++ 中的多态加法

python - 处理大文件的最佳 Python Zip 模块是什么?