算法导论学习记录(二) 分析算法

这一部分有一些困惑的内容,目前只能用我的理解来看书,不知道对不对。

需要预测计算时间与输入规模的关系,把每一步的代价记为: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).

猜你喜欢

转载自blog.csdn.net/weixin_41463344/article/details/83870214