繁体   English   中英

TreeSet迭代的时间复杂度是多少?

[英]What is the time complexity of TreeSet iteration?

在我的代码中,Java TreeSet迭代是主要的时间因素。 在查看系统时,我认为它是O(n)复杂性。 任何人都可以验证吗?

我想通过提供从子节点到父节点的向后链接,我可以提高性能。

TreeSet迭代当然是O(n),可以从任何合理的树行走算法中得到。

我想通过提供从子节点到父节点的向后链接,我可以提高性能。

TreeMapTreeSet所基于的)已经有这样的父引用。 这是所有归结为的方法:

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;
    }
}

您是否考虑过更改TreeSet的副本? 如果在TreeSet迭代中花费了支配时间(而不是修改它),那么将TreeSet复制到数组或ArrayList(仅在更改时)并且仅迭代此数组/ ArrayList几乎可以消除TreeSet迭代的成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM