【问题标题】:hash table - how often is the hash calculated for a given key?哈希表 - 多久计算一次给定键的哈希?
【发布时间】:2013-08-30 17:47:17
【问题描述】:
我在一次采访中被问到这个问题。我的直接答案是每次读写。面试官接着问,“你确定哈希没有缓存在表中的某个地方吗?”
这让我自己又猜到了。最后,我坚持原来的答案,但出于好奇,我想我会在这里提出问题。
另请注意,本次面试是针对 JavaScript 职位的,但问题不一定针对 JavaScript。
那么,一般来说,一个键的哈希是计算一次还是每次读/写? JavaScript 特有的呢?
【问题讨论】:
标签:
javascript
data-structures
【解决方案1】:
当然这取决于实现,即使您询问 JS 也有几种实现(V8、SpiderMonkey、MSFT 等)。
它还应该取决于应用程序。如果您的应用程序更频繁地使用放入哈希表的最后一项,那么以某种方式缓存哈希应该是有意义的。在某些情况下,这会更好。
我猜面试官只是想看看你如何处理事后猜测......
【解决方案2】:
这取决于哈希表和键类型,以及我们谈论的是用于读/写的键还是表中已经存在的键。前者的哈希值可以而且有时会缓存在对象中(例如:Python 中的字符串)。后者的哈希值可以而且有时会缓存在表中——而不是键、值对,您存储哈希、键、值三元组。
在这两种情况下,决定取决于键的类型:它们是否大且散列成本高?额外的空间和内存流量值得吗?例如,对于大于几十个字符的字符串,这可能是一个明显的胜利,而对于 2D 点可能无用或有害。另请注意,哈希值可用于避免比较,这可能有用,但似乎并不重要。