🖊作者 : Djx_hmbb
📘专栏 : C语言
今日分享 : 所有的努力都在慢慢变得清晰
文章目录
一、理解时间、空间复杂度:为什么要计算时间、空间复杂度?
答:可以判断你的代码是否更高效,更简便。比如,如果你和小王同时设计出一款程序,公司肯定选择更优,更高效的,这时就会用到时间复杂度和空间复杂度了。
时间复杂度: [运行该算法的运行时间]
空间复杂度: [是一个数字表达式->运行过程中临时占用存储空间的大小=变量的个数,即由申请的额外空间来确定]
二、计算时间、空间复杂度的方法(别名:大O趋近法,即O(n)):
- 1.用常数1代替所有的加法常数;
- 2.在修改后的运行次数函数中,只保留最高阶项;
- 3.如果最高阶项存在且系数不为1,则去掉常数;
- 4.一般算时间复杂度,都是看最慢情况;
- 5.二分查找/折纸:O(logN)。
注意: 这里的logN是指:log2N,而非log10N。因为计算机无法写出这种格式,所以简写成logN,有些书上还会写成lgN。
三、举例理解:
1.用常数1代替所有的加法常数。
eg:
main()
{
int num = 100;
for(int i = 0 ; i<num ; i++)
{printf("%d ",num);
}
return 0;
}
这里的时间复杂度为:O(1)
2.在修改后的运行次数函数中,只保留最高阶项
注意:这里的修改是指,自己化简过后的式子中,只保留最高阶项
eg1:
这里的时间复杂度为:O(n^2)
eg2:自己化简过后的式子中,只保留最高阶项
这里的时间复杂度为:O(n^2)
3.如果最高阶项存在且系数不为1,则去掉该系数
这里的时间复杂度为:O(n^2)
4.一般算时间复杂度,都是看最慢情况;
这里的时间复杂度为:O(n)
5.二分查找/折纸:O(logN)
注: 这里的log没有下标,在前面有讲解过哦~
这里的时间复杂度为:O(log2N)
四、总结:
- O(logN)很少用到
- 时间复杂度用到的更多
- 空间复杂度的计算中:普通的函数调用不用看参数,但是递归要看!!!
感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!