在我的代码中,Java TreeSet 迭代是占主导的时间因素。看系统,我认为它具有O(n)复杂度。有人能验证一下吗?
我认为通过从子节点向父节点提供链接,可以改善性能。
我认为通过从子节点向父节点提供链接,可以改善性能。
TreeSet
的迭代当然是O(n)的,因为对于任何明智的树遍历算法而言都可以预期。
我在考虑通过提供从子节点到父节点的链接来提高性能。
TreeSet
是基于 TreeMap
实现的,而 TreeMap
已经具有这样的父引用。这是它所有归结到的方法:
private Entry<K,V> successor(Entry<K,V> t) {
if (t == null)
return null;
else if (t.right != null) {
Entry<K,V> p = t.right;
while (p.left != null)
p = p.left;
return p;
} else {
Entry<K,V> p = t.parent;
Entry<K,V> ch = t;
while (p != null && ch == p.right) {
ch = p;
p = p.parent;
}
return p;
}
}
n
个叶子节点,您确实有 O(n log n)
个节点,但也有 O(n log n)
个值。在实际情况下,我预计 O(n)
操作将主导 O(n log n)
操作。 - Tom Hawtin - tacklineImmutableSortedSet
,它是基于数组实现的。 - Kevin Bourrillion