【问题标题】:Space Complexity for linked list链表的空间复杂度
【发布时间】:2023-02-07 06:28:49
【问题描述】:

我的问题是,如果我们在 java 或 python 中为一个对象创建多个引用变量,空间复杂度会增加还是相同?

例如,我有一个输入大小为 n 的链表,它是 head 如果我创建另一个引用变量副本并将其指向头部

public LinkedList duplicate(LinkedList head)
{    
LinkedList duplicate=head;
return duplicate;
}

在这种情况下,额外的空间复杂度是 O(1) 还是 O(n)?

【问题讨论】:

    标签: space-complexity


    【解决方案1】:

    空间复杂度保持线性或 O(n)

    【讨论】:

      【解决方案2】:

      是的,它是 O(n)。在堆空间中创建新对象,对这些对象的引用存储在堆栈内存中。

      【讨论】:

      • 为什么不是 O(1),因为所有引用变量的堆大小都相同?我们只是将一个新变量指向它。这是否意味着如果我创建 2 个其他参考变量,它将是 O(2n)。
      • O(1) 对我来说似乎更有意义,因为我们没有创建新的 LinkedList 缓冲区
      【解决方案3】:

      我相信它应该是O(1)空间复杂度。我们通常不会在空间复杂度中考虑输入参数的大小,因为您实际上无法改进或消除它们。我们只关心我们是否在我们的算法中创建一个额外的缓冲区。考虑与阵列相同。

      1. 没有额外的缓冲区。空间复杂度:O(1)
        public int[] noBufferMethod(int[] data) {
            int[] justReference = data; // Points to input so no extra space
            return justReference;
        }
        
        1. 有额外的缓冲区。空间复杂度:O(n)
        public int[] withBufferMethod(int[] data) {
            int[] buffer = new int[data.length]; // Creates additional buffer
            return buffer;
        }
        

        这同样适用于 LinkedList(或任何集合)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        • 2012-08-14
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2013-09-12
        相关资源
        最近更新 更多