【发布时间】:2016-05-09 15:34:45
【问题描述】:
我有这个代码
public AvlTree(int[] data) {
for (int val : data) {
add(val);
}
}
public AVLTree(AVLTree avlTree) {
for (int val : avlTree) {
add(val);
}
}
AVLTree 实现 Iterable 的地方。第一个构造函数在 O(n log n) 中运行,add 需要 O(log n) ,我想问:第二个构造函数是否相同,或者制作迭代器比迭代它需要更多时间? 迭代器:
@Override
public boolean hasNext() {
return node != null;
}
@Override
public Integer next() {
if (!hasNext()) throw new NoSuchElementException();
Node cur = node;
node = successor(node);
return cur.getKey();
}
successor 也在 logn 中运行
【问题讨论】:
-
这取决于
AVLTree中iterator()方法的实现。如果没有它的源代码,我们无法告诉您更多信息。通常,迭代器的创建成本很低,而且 O(1)。 -
创建迭代器的时间将取决于您的实现,但通常不会超过找到 first 元素,它是根 (-> O(1 )) 或最小/最大元素 (-> O(log n)),具体取决于您的遍历方案。遍历所有元素仍然是 O(n),因此两者之间没有渐近差异(迭代器将具有恒定的开销)。
标签: java data-structures time-complexity