c++ - 如何提高具有 100 万个元素和 997 个桶的哈希表的性能?

标签 c++ data-structures hash hashmap hashtable

这是一道面试题。

假设表中有100万个元素和997桶无序列表。进一步假设哈希函数以相等的概率分布键(即每个桶有 1000 个元素)。

找到不在表中的元素的最坏情况时间是多少?找到表中的一个?您如何改进这一点?

我的解决方案: 查找不在表中和在表中的元素的最坏情况时间都是 O(1000)。 1000 是未排序列表的长度。

改进它: (0) 直截了当,增加桶数 > 100 万。 (1) 每个桶都有一个第二个哈希表,它使用不同的哈希函数为第二个表计算哈希值。它将是 O(1) (2) 每个桶中都有一棵二叉搜索树。它将是 O(lg n)。

是否可以在空间和时间之间做出权衡。将两者保持在合理范围内。

有什么更好的主意吗?谢谢 !

最佳答案

最简单和最明显的改进是将哈希表中的桶数增加到大约 120 万——至少假设您的哈希函数可以生成该范围内的数字(通常会这样)。

关于c++ - 如何提高具有 100 万个元素和 997 个桶的哈希表的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156269/

相关文章:

c++ - 如何在 MacOS 上检测 C++ 中的按键?

c++ - 在 C++ 函数中传递参数时, "double a[]"和 "double *a"有什么区别?

database - 巨大的数据存储问题

java - 使用递归在二维数组中查找 4 个连续的 1

java - HTTP URL token 标准

c++ - 与 friend 一起上课而不是前向声明,: which compiler is correct

c++ - OpenCV - 如何在 Opencv 2.3 中定义 CvvImage 类型的变量?

c - FIFO 队列头指针不正确

security - 更改圆 table 中的哈希函数值

android - 获取非电话 iDevices 和 Android 平板电脑的唯一 ID