调整地图大小的成本是多少?

时间:2018-08-07 11:00:08

标签: data-structures hashmap

如果考虑动态数组,尽管调整了大小,但推入元素的成本平均是恒定的: https://en.wikipedia.org/wiki/Amortized_analysis#Dynamic_Array

我们可以用以下假设对调整大小的哈希图说同样的话吗

  • 哈希函数需要固定的时间(例如返回内存地址)
  • 哈希值以随机顺序出现
  • 哈希图是通过简单的单独链接(由N个链表组成的数组)实现的

我想知道,使用固定大小的哈希表能否平均带来显着的性能优势

2 个答案:

答案 0 :(得分:1)

是的,每次插入时重新分配和重建哈希图的摊销成本是恒定的,只要您在重新分配时始终将其增长某种程度即可。

原因与ArrayList几乎相同-随着HashMap的增长,每个元素将被(重新)插入的映射数是恒定的。

答案 1 :(得分:0)

这实际上取决于您的数据以及您的哈希函数是否均等分布值。当散列函数为许多值返回相同的键时,就会出现问题,然后您会得到一个非常长的ts<-df$KEur cd <- nonlinearTseries::corrDim(ts, min.embedding.dim=6,max.embedding.dim=9, corr.order=2,time.lag=10, min.radius=0.05,max.radius=5, n.points.radius=10, theiler.window=4, do.plot=TRUE) use.col = c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") se=sampleEntropy(cd,do.plot=TRUE,col=use.col, type="l",xlim=c(0.1,1), add.legend=T) se.est <- estimate(se, regression.range = c(0.1,1), col=use.col, type="b") print(se.est) cat(" Estimated = ",mean(se.est),"\n") ,并且查找时间开始从LinkedList越来越多地变为O(1)。有一条一般规则,就是说O(n)应该大约是load factor。这意味着您应该在0.75达到HashMap的容量后开始调整大小,以使性能保持在75%左右。有关更多信息,请查看here