如果算法时间复杂度为θ(n ^ 2),那么对于一个输入,它是否可能在O(n)中运行? 通过theta的定义,似乎没有输入将在O(n)中运行。但有些人说这是可能的。
我真的想不到一个在theta(n ^ 2)中运行的算法会有一个可以在O(n)中运行的输入。
如果是真的,你可以向我解释并给我一个例子吗?
非常感谢!
答案 0 :(得分:2)
我认为你的术语正在绊倒你。
算法不能是“Θ(n 2 )。” Theta表示法描述了函数的增长率。你可以说算法的运行时是Θ(n 2 ),在这种情况下,算法不能在任何输入上及时运行O(n),或者你可以说算法的最坏情况运行时是Θ(n 2 ),在这种情况下,对于某些输入,算法可能会在时间O(n)内运行(例如,插入排序)。
希望这有帮助!
答案 1 :(得分:1)
如果算法时间复杂度是theta(n ^ 2),那么对于一个输入它是否可能在O(n)中运行?
没有。这就是原因。假设算法的运行时间为f(n)
。自f(n) = Θ(n)
开始,我们就会有一些常量c0>0
和n0>0
,c0*n^2 <= f(n)
代表n >= n0
。让我们假设f(n) = O(n)
。这意味着对于某些常量c1>0, n1>0
,我们每f(n) <= c1*n
都会n>=n1
。然后我们会n >= max(n1, n2)
c0*n^2 <= f(n) <= c1*n => c0*n <= c1
n > c1/c0
不适用O
。矛盾。
非正式地,您始终可以将<=
视为Θ
,将=
视为Ω
(并将>=
视为{{1}})。因此,您可以将问题重新表述为:
如果某物等于n ^ 2则小于n?
答案 2 :(得分:0)
我的理解是,虽然Big-Oh只断言上限,但Big-Theta断言上限和下界。根据定义,如果某些内容在theta(n^2)
中执行,则没有性能为theta(n)
的输入。
注意:这些都是指渐近复杂度。算法可以在较小的输入上执行不同的操作,即,由于隐藏的常数因素,在theta(n^2)
中运行的算法可能优于(在较小的输入上)在theta(n)
中运行的某些内容。