为这些方法寻找空间复杂性

时间:2015-10-03 03:23:36

标签: performance

我熟悉以下两种方法的运行时间,即O(N)。但是,我不熟悉空间复杂性。由于这些方法只包含赋值语句,比较语句和循环,我假设空间复杂度只是O(1),但是要确保。谢谢。

//first method 
public static <E> Node<E> buildList(E[] items) {
    Node<E> head = null; 
    if (items!=null && items.length>0) {
        head = new Node<E> (items[0], null);
        Node<E> tail = head;
        for (int i=1; i<items.length; i++) {
            tail.next = new Node<E>(items[i], null);
            tail = tail.next;
        }
    }
    return head;
}

//second method
public static <E> int getLength(Node<E> head) {
    int length = 0; 
    Node<E> node = head;
    while (node!=null) {
        length++;
        node = node.next; 
    }
    return length;
}

1 个答案:

答案 0 :(得分:1)

this post所述,空间复杂度与算法使用的内存量有关,具体取决于输入的大小。

例如,O(1)空间复杂度的算法使用固定数量的内存,与输入大小无关。这是你的第二个算法的情况,基本上只使用一些额外的变量。

O(n)空间复杂度的算法使用与其输入大小成比例的内存量。这是您的第一个算法的情况,该算法为输入的每个元素执行一次分配(一个new)。