Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
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 - Fatal编程技术网

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 排序算法时间复杂度 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是一样的,所以大θ和

我必须找到这个算法的时间复杂度,并找到它所属的类别。 所以我计算它将运行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-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
   }
}