同一算法的不同上界和下界

时间:2013-03-17 14:33:56

标签: algorithm analysis asymptotic-complexity

所以我刚开始学习算法的渐近边界
问题: 如果对于算法我们找到不同的下限和上限,我们可以说一个函数的theta? (比如说omega(n)和O(n ^ 2))。或者更确切地说,我们可以说这种算法的紧密性?
我读过的这本书说Theta是针对函数的上下界。 在这种情况下呢?

2 个答案:

答案 0 :(得分:0)

在这种情况下,我认为你不能说什么。

Θ(f(n))的定义是:

  

当且仅当Θ(f(n))Ω(f(n))时,函数为O(f(n))

对于某些表现出这些行为的病理功能,例如nn^2之间的振荡,它将无法定义。

示例:

f(x) = n if n is odd
       n^2 if n is even

您的界限Ω(n)O(n^2)会严格限制,但Θ(f(n))未定义任何功能。

另请参阅:What is the difference between Θ(n) and O(n)?

答案 1 :(得分:0)

只是为了一点实用性,对于任何Θ(f(n))而言不在f(n)中的一种算法将是插入排序。它在Ω(n)中运行,因为对于已经排序的列表,在每个步骤中只需要一次插入操作,但在一般情况下它在O(n^2)中运行。构造振荡或不连续的函数通常更多地用于教学目的,但根据我的经验,这些函数很少(如果有的话)出现在实际算法中。

关于紧张性,我在这种情况下只听说过为算法提出的上限和下限。再次关于插入排序的示例,给定的边界是紧的,在某种意义上,实际上可以按时间线性地完成问题的实例(下限)和其他不会执行的问题实例时间小于二次大小。对于插入排序有效但不紧的边界将是Ω(1),因为您无法在常量时间内对任意大小的列表进行排序,O(n^3)因为您始终可以对{{1}的列表进行排序严格n时间内的元素,这个数字要少一个数量级,所以你当然可以在O(n^2)中完成。有什么限制是让我们粗略地了解我们可以期望的算法性能,以便我们了解我们的解决方案的效率;紧张的界限是最理想的,因为他们都给了我们粗略的想法,这个想法是最优的,因为有极端情况(有时也是一般情况),我们实际上需要边界允许的所有复杂性。

平均案例复杂性不受限制;它“仅”描述了算法在“大多数情况下”的有效性;例如quick sort,其最佳案例复杂度为O(n^3),最差案例复杂度为Ω(n),平均案例复杂度为O(n^2)。这告诉我们,对于几乎所有情况,快速排序与排序一般快(即平均案例复杂度)一样快,而有问题的实例解决得比这更快(最佳案例复杂性 - >下限)以及需要快速解决问题的问题的实例(最坏情况复杂性 - >上限)。