哈希表-给定密钥的哈希计算频率

hash table - how often is the hash calculated for a given key?

本文关键字:哈希 计算 频率 密钥 哈希表      更新时间:2023-09-26

我在一次采访中被问到这个问题。我的即时答案是阅读和写作。面试官接着问道:"你确定哈希没有缓存在表中的某个地方吗?"

这让我对自己产生了怀疑。最后,我坚持了原来的答案,但出于好奇,我想我会把问题放在这里。

还要注意,这次面试是针对JavaScript职位的,但这个问题并不一定是JavaScript特有的。

那么,一般来说,密钥的哈希是计算一次还是每次读/写?JavaScript特有的功能是什么?

当然,这取决于实现,即使你问JS,也有几个实现(V8、SpiderMonkey、MSFT等)

它还应该取决于应用程序。如果您的应用程序更频繁地使用放入哈希表的最后一项,那么以某种方式缓存哈希应该是有意义的。在某些情况下,这会更可取。

我想面试官只是想看看你是如何应对事后猜测的。。。

这取决于哈希表和密钥类型,以及我们谈论的是用于读/写的密钥还是表中已经存在的密钥。前者的哈希值可以而且有时会缓存在对象中(例如:Python中的字符串)。后者的哈希值可以而且有时会缓存在表中——而不是存储哈希、键、值三元组的键、值对。

在这两种情况下,决策都取决于密钥的类型:它们大且哈希昂贵吗?它值得额外的空间和内存流量吗?例如,对于大于几十个字符的字符串来说,这可能是一个明显的胜利,对于2D点来说可能是无用或有害的。还要注意,散列值可以用来避免比较,可能很有用,但似乎没有那么重要。