【问题标题】:Time Complexity of Bubble Sort冒泡排序的时间复杂度
【发布时间】:2019-12-22 19:31:09
【问题描述】:

最佳情况下冒泡排序的时间复杂度被解释为 O(n) 而不是 Theta(n)?这不是错的,因为最好的情况可以定义为: 最佳情况 = 最快完成时间,选择最佳输入。(例如,排序算法的最佳情况是已经排序的数据。)。 编辑:-我已经看到关于堆栈溢出和其他资源的其他问题,这些问题基于最佳情况下冒泡排序的时间复杂度。他们都将其解释为 O(n),我有疑问为什么最佳情况时间复杂度写为O(n) 而不是 Theta(n)?

【问题讨论】:

  • 在最好的情况下,您仍然需要扫描整个输入以确定它是否排序。
  • 不清楚您是说您认为 Theta(n) 是正确的,而不是 O(n),或者其他什么。顺便说一句,当数组已经排序时,并不是每个排序算法都有最好的情况。例如,如果您始终选择第一个元素作为枢轴,则排序数组是快速排序的最坏情况。
  • @kaya3 我的意思是应该写 Theta(n) 而不是 O(n) 进行冒泡排序。
  • @jonrsharpe 您能否详细说明一下,因为扫描整个输入并不能保证 O(n)。
  • Theta(n) 是 O(n) 的子集,所以如果一个函数在 Theta(n) 中,那么它也在 O(n) 中。

标签: algorithm sorting data-structures bubble-sort


【解决方案1】:

您可以在很多情况下使用 O(f)θ(f)。您可以免费将其用于最佳情况、最坏情况、平均情况或您可以定义的任何其他情况。

O(f) 表示所描述情况的渐近上界。因此,例如,您甚至可以说冒泡排序是 O(n10) ——尽管这不是非常有用的信息,并且人们希望使用最多的边界代替函数,即O(n2)——你也可以说在最好的情况下冒泡排序是O(n)

θ(f) 为所描述的情况设置一个渐近的上 和下 界。所以在上下界不相同的情况下不能一直使用。例如,不能说冒泡排序是 θ(n2),也不能说是 θ(n):它只是没有没有这么紧的界限。如果你会采用 Merge Sort,那么就会有一个严格的界限:它的时间复杂度为 θ(nlogn)

但是,当您仅将冒泡排序限制为最佳情况时,您可以使用 Theta:冒泡排序的最佳情况是 θ(n)

请注意,就“最差”和“最好”这两个词的性质而言,您可以始终使用 Theta 表示法来描述相应的复杂性(至少在已知的情况下)。另一方面,您不需要使用它。您也可以使用 O 表示法。

在实践中,人们可能经常假设将O(f) 用于算法的最坏或最佳情况,旨在给出可能的最低 界限。在那种情况下,它确实也是θ(f)

θ(f) 也是 O(f),但不一定反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2012-11-23
    • 2015-05-17
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多