我很难理解 O(1) 的空间复杂度是什么意思。我知道它表示算法所需的空间不随输入或使用算法的数据大小而增长。但这究竟意味着什么呢?
如果我们在一个链表上使用算法,比如 1->2->3->4,为了遍历到 "3",我们会声明一个临时指针,并遍历链表直到找到 "3"。这是否意味着我们仍然有 O(1) 的额外空间?还是说它意味着完全不同的事情?如果我说得一团糟,请原谅。我有点困惑。
我很难理解 O(1) 的空间复杂度是什么意思。我知道它表示算法所需的空间不随输入或使用算法的数据大小而增长。但这究竟意味着什么呢?
如果我们在一个链表上使用算法,比如 1->2->3->4,为了遍历到 "3",我们会声明一个临时指针,并遍历链表直到找到 "3"。这是否意味着我们仍然有 O(1) 的额外空间?还是说它意味着完全不同的事情?如果我说得一团糟,请原谅。我有点困惑。
这仅仅是程序使用的内存量。也就是算法完成其执行所需的主内存与输入大小相关的数量。
空间复杂度(s(P))
是指算法在完成其执行时占用的总空间,与输入大小有关。它包括常数空间和辅助空间。
s(P) = 常数空间 + 辅助空间
常数空间是算法固定的部分,通常等于输入和局部变量使用的空间。辅助空间是算法使用的额外/临时空间。
假设我创建了一个具有固定大小的数据结构,无论对该数据结构进行什么操作,它的大小始终保持不变。因此,在该数据结构上执行的操作是O(1)。
举个例子,假设我有一个固定大小为100的数组。无论我进行什么操作,无论是从数组中读取还是更新元素,该操作在数组上都是O(1)的。数组的大小(因此使用的内存量)不会改变。
另一个例子,假设我有一个LinkedList,我向其中添加元素。每次向LinkedList添加元素时,这是对列表的O(N)操作,因为我正在增加用于保存所有元素的内存量。
希望这能帮到你!
n
,并且对于偶数n
使用 10 kB,对于奇数n
使用 20 kB。 这个函数需要O(1)
空间,但它肯定不需要恒定数量的空间。这与常量空间不同,后者表示恒定的上限,而不是恒定的数量。 - ubadub