Time complexity 排序算法时间复杂度 void MySort(表T[0..n-1]:整数数组) { 对于m=0到n-2,do//将运行n+1 { j=m;//将运行n次 对于k=m+1到n-1,do/将运行n^2+n { 如果T[k]
我必须找到这个算法的时间复杂度,并找到它所属的类别。 所以我计算它将运行2n^2+6n+1,它的类别是O(n^2)Time complexity 排序算法时间复杂度 void MySort(表T[0..n-1]:整数数组) { 对于m=0到n-2,do//将运行n+1 { j=m;//将运行n次 对于k=m+1到n-1,do/将运行n^2+n { 如果T[k],time-complexity,Time Complexity,我必须找到这个算法的时间复杂度,并找到它所属的类别。 所以我计算它将运行2n^2+6n+1,它的类别是O(n^2) 我想知道我是否正确,另一个问题是,根据维基百科上的定义,Ω也是n^2和Θ也是n^2 Big-Omicron O-函数在上面渐近有界(最多为常数因子) 你对O(n^2)的分析是正确的(尽管你对掉期的分析是错误的) 大ωΩ-函数在渐近下有界 您对Ω(n^2)的分析是正确的(尽管您对掉期的分析是错误的) 大θ-在g的上下均渐近有界 因为大Omnicron和大Omega是一样的,所以大θ和
我想知道我是否正确,另一个问题是,根据维基百科上的定义,Ω也是n^2和Θ也是n^2 Big-Omicron O-函数在上面渐近有界(最多为常数因子)
你对O(n^2)的分析是正确的(尽管你对掉期的分析是错误的) 大ωΩ-函数在渐近下有界
您对Ω(n^2)的分析是正确的(尽管您对掉期的分析是错误的) 大θ-在g的上下均渐近有界
因为大Omnicron和大Omega是一样的,所以大θ和这两个是一样的:Θ(n^2)
关于各部分的详细分析:
外部循环确实运行
n-1
,每个迭代都有一个内部循环和交换。因此,也存在n-1
swap
内部循环体为每m运行n-m次,这就是数学变得复杂的地方。T[k]
执行((n-1)-1)(n-2)/2=(n^2)/2+2-2次(我想)
j=k
更难,因为现在涉及概率。我认为这是lg(m)
之和,其中m
是数字1到n-1
。经过大量的数学运算,我认为这是lg(n!)/0.60206,不,我不知道常数从哪里来,也不知道它是什么意思
你应该知道,你的代码是a,维基百科页面上的选择排序支持我的想法。你可以简单地按照以下方式进行操作:
我差点说这是一种泡沫,但是。。。不是。事实上,这不算什么。请注意,
swap
只运行n-2次(不是声称的3n次),这样的比较排序的理论最小值是O(n*log(n))关于swap,我看到了错误,但它确实排序。我在编译器上尝试过。不管它做什么,问题是找到这个算法的复杂性,那么,它的复杂性是什么?最坏情况下它会运行多少次?它不能按您编写的方式运行的原因是,在这两个for中,您给出了一个<参数比较,而它应该得到纠正,这确实是排序!以某种方式你也能分析T(n)吗?我以为它是2n^2+6n+1,但我猜它是错的,那么T(n)或算法在最坏情况下运行多少次的分析(取决于n的值)是如何调用的呢?不确定,但似乎外部循环是n-2,而内部循环是n-3,因此或多或少是O(n^2)(1)我从来没有听说过T(n),也没有在维基百科页面上看到过。看起来你只是简单地乘以(n-2)和(n-3),但是如果你想做我认为你想做的事情,真正的数学要复杂得多。这就是为什么我们通常不会比大θ更深。(哦,等等,我在wiki页面上找到了)wikipedia页面只使用T(n)
作为算法完成的理论步骤数,定义得很差。然而,计算实际的T(n)(如我所说)是困难的。我不想麻烦了。如果你真的想,你首先必须定义“什么是步骤”?通常的定义是“交换次数”或“写入次数”或“比较次数”,或(很少)“秒数”,根据我的计算,j=k将运行(n-2)^2既定的for将运行(n-2)^2+n交换将运行3*(n-2)j=m将运行(n-2),外部for将运行(n-2)+1如果我们把它放在一起,则是(n-2)^2+(n-2)^2+n+3*(n-2)+(n-2)+(n-2)+1=…=2n^2+6n+2,实际上是O(n^2),我对每个命令的假设正确吗?
void MySort(table T[0..n-1]: array of integers)
{
for m = 0 to n-2 do //will run n+1
{
j = m; // will run n times
for k = m+1 to n-1 do /will run n^2 +n
{
if T[k] < T[j] then j = k; //will run n^2 times
}
swap(T[m], T[j]); //will run 3*n times
}
}