算法的最坏情况时间复杂度与其上限之间的关系/差异是什么?

时间:2015-04-28 08:36:09

标签: algorithm time-complexity clrs

算法的最坏情况时间复杂度与其上限之间的关系/差异是什么?

2 个答案:

答案 0 :(得分:3)

术语“上限”不是很清楚,因为它可能指的是两个可能的东西:

  1. 算法的上限 - 算法永远不会“慢”运行的界限。这基本上是它最差的表现,所以如果这就是你的意思 - 答案很简单。

  2. big-O表示法,它在特定分析下提供算法复杂性的上限。 big-O表示法是一组函数 ,可以应用于算法的任何分析,包括最坏情况,平均情况,甚至是最佳情况。

  3. 我们以Quick Sort为例。

    据说,快速排序的最差情况表现为O(n^2),平均案例表现为O(nlogn)。一种算法如何具有两种复杂性?简单来说,表示平均情况分析的函数和代表最坏情况的函数是完全不同的函数 - 我们可以对它们各自应用大O表示法,对它没有限制。

    此外,我们甚至可以将它应用于最佳情况。考虑一个小的优化来快速排序,它首先检查数组是否已经排序,如果是 - 它会立即停止。这实际上是O(n)操作,并且有一些输入会提供这种行为 - 所以我们现在可以说算法的最佳案例复杂性是O(n)

答案 1 :(得分:0)

最坏情况和大O(上限)之间的区别是     最坏的情况是您的代码实际发生的情况,     上限是一个高估的假设,我们为了     计算大的O并不一定要发生

插入排序示例:

最坏情况:

数字都是反向排列的,因此您需要排列和移动每一个数字     数字

伪代码

for j=2 to n
  do key = a[i]
  i=j-1
  while i>0 & a[i]>key
    do a[i+1] = a[i]
    i=i-1
  end while
  a[i+1]=key
end for

上限:

我们假设内部循环的顺序每次都是i = n-1,但实际上,     它每次都是可变的,每次不能为n-1,但是我们假设     /高估了它来计算大O