我很难理解什么是O(1)空间复杂性。我理解这意味着算法所需的空间不会随着输入或我们使用算法的数据大小而增长。但究竟是什么意思?
如果我们在链表上使用算法说1-> 2-> 3-> 4,要遍历列表以达到“3”,我们声明一个临时指针。并遍历列表直到我们达到3.这是否意味着我们仍有O(1)额外空间?或者它意味着完全不同的东西。如果这根本没有意义,我很抱歉。我有点困惑。
答案 0 :(得分:23)
要回答您的问题,如果您有一个指针并遍历列表,则会将其计为 O(1)空间复杂度。如果你有10或100甚至1000指针,则空间复杂度为O(1)。但是,如果你想拥有N' N'指针,即使是' N'小到1,空间复杂度为O(N)。
希望您理解,O(1)表示常量(10,100和1000是常数)空间,并且不会根据输入大小(例如N)而变化。
答案 1 :(得分:0)
它只是程序使用的内存量。计算机内存的数量,该内存是算法根据输入大小完成其执行所需的主要内存。
算法的 Space Complexity(s(P))
是相对于输入大小,算法完成其执行所需的总空间。它包括恒定空间和辅助空间。
S(P)=恒定空间+辅助空间
恒定空间是该算法固定的空间,通常等于输入和局部变量使用的空间。辅助空间是算法使用的额外/临时空间。
答案 2 :(得分:-1)
假设我创建了一些固定大小的数据结构,无论我对数据结构做什么,它总是具有相同的固定大小。因此,对该数据结构执行的操作是O(1)。
一个例子,假设我有一个固定大小为100的数组。我做的任何操作,无论是从数组中读取还是更新元素,该操作在数组上都是O(1)。数组的大小(以及它使用的内存量)没有变化。
另一个例子,假设我有一个LinkedList,我向其添加元素。每次我向LinkedList添加一个元素,这是对列表的O(N)操作,因为我增加了将所有元素保存在一起所需的内存量。
希望这有帮助!