其实一开始接触数据结构与算法的时候,没有太注重时间复杂度这块的计算,觉得计算这个没有什么用处,而后来慢慢深入了之后,才发现想要实现一个代码要比用最高效的方法实现一个代码简单的多。学习数据结构与算法的意义就是在于让你的代码更加简洁。
计算
要计算 算法的时间复杂度 ,先要掌握什么是算法的频度
算法频度就是基本操作执行次数的总和 (f(n) n是执行问题的规模 )
再对整个算法的频次进行以下操作:
1 .去掉常数项
2 .只保留最高阶项
这就是时间复杂度 T(n) ,有时用O(f(n))表示
易错
有几个易错点是在计算时间复杂度容易忽略过去的
1.错误的认为if else 两个语句,实际上是一个
例如
i=1;j=0;
while(i+j<=n)
{
if (i>j) j++;
else i++; //整个循环体执行n次,而不是if执行n次,else执行n次
}
2.do while 和 while两个语句执行次数相同
3.一个while的判断句和while里面的操作执行频次是一样的;因此在利用大O数量级进行计算时,可以只主要考虑while里面的循环频次
随便举几个例子练习练习
1.嵌套循环 2层循环
k=0;
for (i=1;i<n;i++) //n次
{
for (j = i ; j <n ; j++) //n+(n-1)+(n-2)+...+1
k++; //同上
}
时间复杂度 O(n²+2n)=O(n²) 平方阶