在我的代码中,Java TreeSet迭代是主要的时间因素。在查看系统时,我认为它是O(n)复杂性。任何人都可以验证这个吗?
我在想通过提供从子节点到父节点的向后链接,我可以提高性能。
答案 0 :(得分:4)
TreeSet
迭代当然是O(n),正如可以从任何合理的树行走算法中得到的那样。
我在想通过提供链接 从子节点向后转移到父节点 节点我可以提高性能。
TreeMap
(TreeSet
所基于的)已经有这样的父引用。这是所有归结为的方法:
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;
}
}
答案 1 :(得分:1)
您是否考虑过更改TreeSet的副本?如果在TreeSet迭代中花费了支配时间(而不是修改它),那么将TreeSet复制到数组或ArrayList(仅在更改时)并且仅迭代此数组/ ArrayList几乎可以消除TreeSet迭代的成本。