计算链表交集的空间复杂度是多少?

时间:2014-12-22 21:34:44

标签: java algorithm space-complexity

我正在计算两个链接列表的交集,其中一个链接列表,如果大小&n;' n'第二个是大小' m。下面的代码将较小的链表的项目存储在一个集合中。因此空间复杂度为O(m),其中m

但是,2个链表可能相等,m = n。复杂性O(n)也是如此?

public IntersectionAndUnionLinkedList<T> intersection(IntersectionAndUnionLinkedList<T> list) {
        final Set<T> items = new HashSet<>();

        Node<T> firstSmall = null;
        Node<T> firstBig   = null;

        if (size <= list.size) {
            firstSmall = first;
            firstBig = list.first;
        } else {
            firstSmall = list.first;
            firstBig = first; 
        }


        Node<T> n = null;
        for (n = firstSmall; n != null; n = n.next) {
                items.add(n.item);
        }

        IntersectionAndUnionLinkedList<T> intersectionlist = new IntersectionAndUnionLinkedList<>();
        for (n = firstBig; n != null; n = n.next) {
            if (items.contains(n.item)) {
                intersectionlist.add(n.item);
            }
        }

        return intersectionlist;
    }

1 个答案:

答案 0 :(得分:2)

以防 m = n O(m)= O(n),但可以安全地说明内存复杂度 O( m)因为它是唯一真正的因素。

另一方面,HashSet<T>在极端情况下可以降低内存效率:毕竟它使用桶,可以以糟糕的方式填充桶。这取决于HashMap<T>的确切实现。虽然人们仍然期望线性存储器的复杂性,所以 O(m)