【发布时间】:2016-04-14 20:48:58
【问题描述】:
我阅读了 previous question 关于 TreeSet 时间复杂度的文章,答案是它需要 O(n) 时间。但是,我不明白为什么迭代是 O(n) 而不是 O(n*nlogn)。
下一个电话需要O(logn) time
所以如果我像这样遍历 TreeSet:
while (iterator.hasNext()){ //Runs N times
System.out.println(iterator.next() + " "); //each next is O(logn)
}
我希望它是 O(n*logn) 而不是 O(n),因为 while 循环有 N 次迭代,并且每个 iterator.next() 调用都需要 O(logn) 时间。
【问题讨论】:
-
为什么
iterator.next()是 O(log n)。它只需要转到下一个节点,这是 O(1),不是吗? -
@JoseLuis 不准确,基于查看源代码。
-
@louis-wasserman 你说得对,我很抱歉。我认为 iterator() 可以返回一个带有排序节点的列表,然后去下一个节点很容易。
标签: java algorithm data-structures tree treeset