如果我们有线性算法(例如,查找给定数字数组中是否存在数字),这是否意味着Omega(n) = n
?步骤数将为n
。而我能做的最严格的限制是c*n
,其中c = 1
。
但是据我所知,Omega还描述了最佳情况,在这种情况下为 1 ,因为搜索到的元素可以位于数组的第一个位置,并且仅占一个步。因此,按照这种逻辑,Omega(n) = 1
。
哪种变体是正确的,为什么?谢谢。
答案 0 :(得分:3)
关于使用渐近符号表示的内容有很大的困惑。
算法的运行时间通常是元素数量的函数,但也取决于输入的特定值。因此,T(x)
其中x
是n
元素的输入,并不是单独的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
步数的下限,但它并不是严格的下限。