java.util.TreeSet的tailSet操作的时间复杂度是多少?

时间:2012-05-22 16:59:05

标签: java algorithm treeset

我正在使用扫描线实现2D最近对算法,并且它表示您需要在某个y坐标之上找到六个点。我所做的是将点放在按y坐标排序的TreeSet中,并使用tailSet方法获取高于某个点的所有点,并迭代最多6次。

我想知道tailSet操作的复杂性是否为O(log n),如果是,则迭代遍历tailSet最多六次也是O(log n)?

参考:http://people.scs.carleton.ca/~michiel/lecturenotes/ALGGEOM/sweepclosestpair.pdf

2 个答案:

答案 0 :(得分:4)

AFAIK将tailSet设为O(log n),但迭代最后m个元素为O(m * log n)

答案 1 :(得分:3)

嗯......这对我来说很奇怪。我认为就大O而言,在java.util.TreeSet中创建tailSet的过程是O(1)。

  

小澄清:tailSet(),headSet()和subSet()返回非常小的对象,这些对象将所有艰苦的工作委托给底层集的方法。没有构建新的集合。因此O(1)和非常微不足道。

a link for discussion