这一部分有一些困惑的内容,目前只能用我的理解来看书,不知道对不对。
需要预测计算时间与输入规模的关系,把每一步的代价记为:c(n),并记录每一步重复的次数。算出总的运行时间。
以选择排序算法为例:
//选择排序
//运行时间 次数
var A =[1, 2, 4, 2, 6, 3, 4, 9, 1]; //c1 1
var m=0; //记录最小值 //c2 1
var k=0; //记录最小值的检索 //c3 1
for (var i=0; i<=A.length-1; i++){ //c4 n-1
m = A[i]; //c5 n-1
k = i; //c6 n-1
for(var j = i+1; j<=A.length; j++){ //c7 sum(n-1 to 1)
if(A[j] < m){ //c8 sum(n-1 to 1)
m = A[j]; //c9 sum(n-1 to 1)
k = j; //c10 sum(n-1 to 1)
}
}
A[k] = A[i]; //c11 n-1
A[i] = m; //c12 n-1
}
console.log(A); //total time = 2n^2+5n-2
//theta(n^2)
最后用的时间为:2n^2+5n-2。(个人理解)计算机的运行速度是很快的,在输入规模很小,即n很小的情况下。n的改变带来的时间改变几乎觉察不出来。在输入规模非常大的情况下,高阶项带来的影响远远大于低阶项,那么就可以省略低阶项和常数项,那么带来变化的最大的项就是二次项,记作theta(n*n).