用html制作的蛋糕店网站北京做百度推广的公司
数据结构----效率问题
一.衡量效率
1.衡量效率的两个维度
1.时间维度:时间复杂度:Time Complexity
时间复杂度是代码总的运行次数(粗糙)
2.空间维度:空间复杂度:Space Complexity
空间复杂度是额外申请的空间
3.注意:
1.复杂度表示方法为 O()
-
如果时间和空间不能同时达到一个理想状态,时间优先,用空间换时间 。一些特殊的应用场合会用空间换时间
-
一般算循环的时间复杂度,看循环体执行几次就可以
也可以看代码总执行次数是看总共执行了多少条语句
2.复杂度要求
1.多项级的运算结果,只保留最大项(最高次幂)
2.常系数省舍去
3.如果程序在有限棵树的资源消耗内即可完成(与n无关),那么复杂度为O(1)
3.看下面代码判断时间复杂度
//时间复杂度为 O(n)
for(int i=0;i<n;i++){cout<<i<<endl;
}//时间复杂度为 O(log2的n次方)
for(int i=1;i<=n;i*=2){cout<<i<<endl;
}//时间复杂度为 O(n的平方)
for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cout<<i<<" "<<j<<endl;}
}//时间复杂度为 O(n的立方)
for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){for(int k=1;k<=j;k++){cout<<i<<" "<<j<<endl;}}
}
6.关于复杂度计算的一些经验性结论
1.单纯的顺序和选择结构,时间复杂度为O(1)
2.一般的一层循环时间复杂度为O(n)
3.两个并列的循环,时间复杂度max(O(m),O(n))
4.一般的两层循环嵌套,时间复杂度是O(n的平方)
5.一般会选择递归、分治、动态规划等方法提升时间效率(空间换时间)