Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 渐近分析问题_Algorithm_Asymptotic Complexity_Big Theta_Big O - Fatal编程技术网

Algorithm 渐近分析问题

Algorithm 渐近分析问题,algorithm,asymptotic-complexity,big-theta,big-o,Algorithm,Asymptotic Complexity,Big Theta,Big O,我在Geeksforgeks.org上发现了几个我似乎不明白的问题(#1和#3)。我希望有人能为我澄清答案: 澄清是否正确/有效或错误 1.快速排序的时间复杂度为Θ(n^2) 我的回答是对的,但它是错的,为什么?如果快速排序的时间复杂度为O(n^2),并且我们知道Θ(g(n))={f(n),其中c1*g(n)快速排序的最坏情况是O(n^2)。但是您希望它在O(n log n)中运行time。因此,算法的运行时间因情况而异,不能使用θ符号给出算法的一般运行时间 当然,任何算法运行时间的下限都是常数

我在Geeksforgeks.org上发现了几个我似乎不明白的问题(#1和#3)。我希望有人能为我澄清答案:

澄清是否正确/有效或错误

1.快速排序的时间复杂度为Θ(n^2)


我的回答是对的,但它是错的,为什么?如果快速排序的时间复杂度为O(n^2),并且我们知道Θ(g(n))={f(n),其中c1*g(n)快速排序的最坏情况是
O(n^2)
。但是您希望它在
O(n log n)中运行
time。因此,算法的运行时间因情况而异,不能使用θ符号给出算法的一般运行时间


当然,任何算法运行时间的下限都是常数时间(
Ω(1)
)。虽然它不必达到这个下限,但算法应该运行,并且应该至少有一个操作。

快速排序的时间复杂度是(n^2)----这意味着对于n的每个值,算法产生输出所花费的时间等于一个函数,即f(n)=n^2。但我们知道这对于快速排序是不正确的,因为我们知道对于某些输入,快速排序的运行时间可能等于一个函数,即g(n)=nlogn。因此我们需要指定它是最坏、最好还是平均情况。正确的说法是“快速排序的最坏情况时间复杂度为Θ(n^2)”

“快速排序的时间复杂度为O(n^2)”——这意味着对于每个输入值n,算法的运行时间最多为一个函数,该函数为f(n)=n^2。这意味着存在一些输入,对于这些输入,算法的运行时间可能小于f(n)=n^2。我们知道快速排序的最佳情况时间复杂度为g(n)=nlogn和g(n) 同样,说“快速排序的时间复杂度为Ω(nlogn)”也是正确的,因为这意味着算法的运行时间至少是nlogn,而n^2>nlogn


“所有计算机算法的时间复杂度都可以写成Ω(1)”---这里1表示常数时间函数。上面的语句暗示:要执行任何计算机算法,我们需要一个最小常数时间。这对所有计算机算法都是正确的。

这些并不是真正的编程问题。你最好问练习题,没有任何意义。关于c没有任何意义复杂,不知道在什么分析下-因此它们是模糊的。快速排序是θ(n^2)最坏的情况(因此也是O(n^2)和ω(n^2)),以及θ(nlogn)平均情况(因此也是O(nlogn)和ω(nlogn))。@user2644819是的,因为它们都是函数集。我试图在@user2644819
O(nlogn)中解释这个问题
O(n^2)
的一个子集。大O只给出“上界”,因此如果某个对象的上界为
c*nlogn
,那么它的上界也将为
c*n^2
(对于某些常数c)。回想一下,根据定义,大O意味着:如果存在常数c,那么f(n)在O(nlogn)中,对于所有的n,f(n)让我们来看看大O、θ和ω与最佳/最差/平均情况无关。请参阅。大θ/O/ω可以应用于任何分析-这只是一组函数。我同意该符号只是从数学上显示函数的边界。但在讨论运行时分析时,
Ω
用作运行时间的下限,h最好的情况。而
O
用于上限,因此是最坏的情况。现在,当下限==上限时,我们可以使用θ。所以是的,我犯了一个错误并修复了它。