TreeRangeMap时空复杂

时间:2013-11-29 07:58:07

标签: java guava time-complexity space-complexity

我期待看起来非常适合我对项目的需求的番石榴TreeRangeMap。 java文档说它基于(java标准?)TreeMap,它具有get(put和next)的O(log(n))时间。

但TreeRangeMap应该是某种范围树实现,根据此SO question,查询的时间复杂度为O(k + log(n)),O(n)空间,k为范围大小?。有人可以证实这一点吗?

我对TreeRangeMap.subRangeMap()操作的时间复杂性也很感兴趣。它是否具有相同的O(k + log(n))?

感谢。

2 个答案:

答案 0 :(得分:8)

这是一种观点,而不是真正的突变或任何东西。 subRangeMap在O(1)时间内返回,并且它返回的RangeMap每个查询操作都有O(log n)加法成本 - 也就是说,它的所有操作仍然需要{{1}只有更高的常数因子。

来源:我是“实施它的人。”

答案 1 :(得分:1)

我们通常使用Range树来查找给定间隔[x1, x2] and x1 < x2中的点。但是,如果范围树是平衡二叉树(如使用红黑树实现的TreeMap的情况),则x1(或后继)和{{1}的搜索路径(或前任)的费用为x2。当我们找到它们时,如果此范围内有O(log n)个点数,我们将不得不使用树遍历报告它,该遍历将具有线性成本k。总共O(k)

  

我对时间的复杂性也非常感兴趣   TreeRangeMap.subRangeMap()操作。它是否具有相同的O(k +   LOG(n))的

O(k + log(n))返回此范围地图中与范围相交的部分的视图,从而产生另一个<K,V> subRangeMap(Range<K> subRange)。那为什么不呢?