任何线性算法的Big Omega是n还是也可以是1?

时间:2018-07-06 12:47:11

标签: algorithm time-complexity big-o

如果我们有线性算法(例如,查找给定数字数组中是否存在数字),这是否意味着Omega(n) = n?步骤数将为n。而我能做的最严格的限制是c*n,其中c = 1

但是据我所知,Omega还描述了最佳情况,在这种情况下为 1 ,因为搜索到的元素可以位于数组的第一个位置,并且仅占一个步。因此,按照这种逻辑,Omega(n) = 1

哪种变体是正确的,为什么?谢谢。

2 个答案:

答案 0 :(得分:3)

关于使用渐近符号表示的内容有很大的困惑。

算法的运行时间通常是元素数量的函数,但也取决于输入的特定值。因此,T(x)其中xn元素的输入,并不是单独的n的函数。

现在可以研究最坏的情况和最好的情况:要确定这些情况,请选择与最慢或最快的执行时间相对应的输入配置,而这些仅是n的功能。另外一个选项是预期(或平均)运行时间,它对应于输入的给定统计分布。这也是n的功能。

现在,Tworst(n)Tbest(n)Texpected(n)可以具有由O(f(n))表示的上限和由Ω(f(n))表示的下限。当这些界限重合时,将使用符号Θ(f(n))

在线性搜索的情况下,最佳情况是Θ(1),最坏情况和预期情况是Θ(n)。因此,任意输入的运行时间为Ω(1)  和O(n)


附录:

算法学的成功之处在于发现了高效的算法,即有效运行时间与可以独立于任何算法实现的最佳行为的顺序相同。

例如,很明显,任何搜索算法的最坏情况是Ω(n),因为无论搜索顺序如何,您都可能必须执行n比较(例如,如果键不存在)。由于线性搜索是最坏情况的O(n),因此效率最差。这也是最佳情况下的效率,但这并不是那么有趣。

答案 1 :(得分:2)

如果您有线性时间算法,这意味着时间复杂度具有线性上限边界,即O(n)。这并不意味着它也具有线性下限。在您的示例中,找出某个元素是否退出,下界为Ω(1)Ω(n)就是这里错误。

在数组上进行线性搜索以找到最小元素在所有情况下均需要n个步骤。因此,这是下限Ω(n)。但是Ω(1)也是正确的,因为恒定数量的步数也是n步数的下限,但它并不是严格的下限。