我一直在阅读有关hash tables,词典等的一些内容。我所看过的所有文学和视频都暗示哈希表具有空间/时间权衡属性。
我很难理解为什么哈希表占用的空间比例如一个数组或具有相同总元素数(值)的列表?它与实际存储散列键有关吗?
据我了解并且基本而言,哈希表采用密钥标识符(比如一些字符串),将其传递给一些哈希函数,该函数向数组或其他数据结构吐出索引。除了在数组或表中存储对象(值)的明显内存使用情况之外,为什么哈希表占用更多空间?我觉得我错过了一些明显的东西......
答案 0 :(得分:1)
就像你说的那样,所有这些都与查找时间和空间之间的权衡有关。底层数据结构具有的空间(桶)数量越大,散列函数可能存储每个项目的位置数越多,因此发生冲突的可能性(因此比常量时间性能更差)降低了。但是,拥有更多铲斗显然意味着需要更多空间。项目数与桶数之比称为加载因子,在此问题中有更详细的解释:What is the significance of load factor in HashMap?
在minimal perfect hash function的情况下,您可以实现在n个桶中存储n个项目的O(1)性能(负载因子为1)。