Algorithm 任何线性算法的大ω是n还是也可以是1?

Algorithm 任何线性算法的大ω是n还是也可以是1?,algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,如果我们有一个线性算法(例如,查找给定数字数组中是否存在一个数字),这是否意味着Omega(n)=n?步骤数为n。我能做的最紧的限制是c*n其中c=1 但据我所知,Omega还描述了最佳情况场景,在本例中为1,因为搜索的元素可以位于数组的第一个位置,并且只占一步。所以,根据这个逻辑,Omega(n)=1 哪种变体是正确的,为什么?谢谢。如果您有一个线性时间算法,这意味着时间复杂度有一个线性上限,即O(n)。这并不意味着它也有一个线性下限。在您的示例中,找出一个元素是否存在,下限是Ω(1)。这里是

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

但据我所知,Omega还描述了最佳情况场景,在本例中为1,因为搜索的元素可以位于数组的第一个位置,并且只占一步。所以,根据这个逻辑,
Omega(n)=1


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

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


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

对于使用渐近符号描述的内容存在很大的混淆

算法的运行时间通常是元素数量的函数,也是输入的特定值的函数。因此
T(x)
其中
x
n
元素的输入,而不仅仅是
n
的函数

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

现在,
tworrst(n)
Tbest(n)
Texpected(n)
可以有上界,用
O(f(n))
表示,下界用
Ω(f(n))
表示。当这些边界重合时,使用符号
Θ(f(n))

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


附录:

算法学的核心是发现高效算法,即有效运行时间与可独立于任何算法实现的最佳行为的顺序相同


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

有最佳案例、最坏案例和平均案例的概念。还请注意,在n个元素上运行的算法的最坏情况可能低于n(在您的示例中,如果列表已排序,则为logn)。大O表示法(也称为算法复杂性)不能描述最佳情况。因此,对于线性算法,复杂度为O(n)。大O表示上界。线性算法也在
O(n^5)
中。这是一个上限,但不是最好的。大ω表示下限。将两者结合起来,就得到了θ,真正的复杂性类。它们都与最好或最坏的情况无关。所有这些都始终与要分析的场景的最坏情况相关联(因为定义中的for All)。如果要分析特定案例,需要显式限制输入域。