【问题标题】:Why is the total space complexity of bubble sort O(1) according to Wikipedia?根据维基百科,为什么冒泡排序的总空间复杂度为 O(1)?
【发布时间】:2021-06-18 06:33:05
【问题描述】:

基于This article on GeeksforGeeksStackExchangeQuroa上的问题,算法的空间复杂度是解决一个问题所需的空间,包括输入占用的空间,辅助空间是任意除了输入本身来解决问题,算法还需要额外的存储空间。

现在我知道冒泡排序的辅助空间是 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


【解决方案1】:

为什么维基百科说冒泡排序的总空间复杂度也是 O(1)?

好收获!在此期间进行了更正。它现在说总空间复杂度是 O(n)。引自右侧摘要面板:

最坏情况空间复杂度 O(?) 总,O(1) 辅助

所以:

  • 输入的空间复杂度为 O(?)
  • 另外,算法需要O(1) = 辅助空间
  • 使用的总空间由输入空间和辅助空间组成,所以 O(?)+O(1) = O(?)

【讨论】:

【解决方案2】:

space complexity 定义了算法占用的额外内存量。如果您需要分配大小为N 的数组,则意味着您的算法需要O(N) 额外空间或更具体的辅助空间。

但在冒泡排序的情况下,我们只能使用单个变量(用于交换目的)来使事情发生。

所以总体空间复杂度是O(N),其中包括您的输入,总体辅助空间复杂度是O(1)

overall space complexity 的维基百科中,它定义了辅助空间。

【讨论】:

  • 基于上面的链接,空间复杂度和辅助空间之间存在区别,空间复杂度是算法使用的总存储空间,包括输入,维基百科明确表示空间复杂度和辅助空间冒泡排序的辅助空间为 O(1)。如果你说的是真的,那为什么维基百科说插入排序的总空间复杂度是 O(n) 而辅助空间是 O(1)? en.wikipedia.org/wiki/Insertion_sort
  • 是的,您和链接说得对!是我的错!如果您也考虑输入,那么是的,空间复杂度为 O(N) ,但如果您不考虑输入(辅助空间复杂度),则为 O(1)。我将编辑我的答案。
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 2012-09-12
  • 2017-11-12
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2012-07-13
相关资源
最近更新 更多