算法的最坏情况时间复杂度与其上限之间的关系/差异是什么?
答案 0 :(得分:3)
术语“上限”不是很清楚,因为它可能指的是两个可能的东西:
算法的上限 - 算法永远不会“慢”运行的界限。这基本上是它最差的表现,所以如果这就是你的意思 - 答案很简单。
big-O表示法,它在特定分析下提供算法复杂性的上限。 big-O表示法是一组函数 ,可以应用于算法的任何分析,包括最坏情况,平均情况,甚至是最佳情况。
我们以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