【发布时间】:2021-06-18 06:33:05
【问题描述】:
基于This article on GeeksforGeeks和StackExchange和Quroa上的问题,算法的空间复杂度是解决一个问题所需的空间,包括输入占用的空间,辅助空间是任意除了输入本身来解决问题,算法还需要额外的存储空间。
现在我知道冒泡排序的辅助空间是 O(1),因为它只需要一个变量来跟踪我们正在进行的交换次数,以查看列表何时排序(如果我是,请纠正我错了),但是为什么Wikipedia 说冒泡排序的总空间复杂度也是O(1)?
考虑到输入本身,它不应该是 O(n) 吗?
【问题讨论】:
-
这是因为,我们总是考虑使用的额外空间,而不是输入本身使用的空间。这些类型的算法通常称为就地算法。
-
@MaruthiAdithya 根据上面的链接,空间复杂度和辅助空间之间存在区别,空间复杂度是使用的总存储空间一种包括输入的算法,维基百科明确表示冒泡排序的空间复杂度和辅助空间都是 O(1)。如果你说的是真的,那为什么维基百科说插入排序的总空间复杂度是 O(n) 而辅助空间是 O(1)? en.wikipedia.org/wiki/Insertion_sort
-
所以,我认为这是因为如果您使用递归插入排序,它会占用 O(n) 堆栈空间。但是辅助空间仍然是O(1)。这不是迭代插入排序的问题。
-
请提供来自维基百科的引用。我在该 wiki 页面的右侧摘要面板中看到:“最坏情况空间复杂度:O(n) 总计,O(1) 辅助”。我没有看到问题。输入=O(n)空间,辅助=O(1),所以总=输入+辅助=O(n)。
-
那么好! +1
标签: algorithm sorting big-o bubble-sort space-complexity