程序优化完后,运行一结束。诶诶,快停,记录时间!!看看快了没!
而这个时间,为实际时间,也可以说是绝对时间,但是这个时间能被很多因素影响
而这个因素就有很多了,硬件,软件,系统等…
所以进引入了相对时间的计时方法,也就是时间复杂度,来判断我们的程序是否得到了优化
规定,一段程序的时间由时间复杂度来表示。
而时间复杂度又分为三种,最优情况,最劣情况,平均情况。而这个情况是由问题来决定的
比如:我们将某个正在军训的班级拉出来一排,一排五个人,让他们从左到右依次报数(从1开始)
用这个数来代表他们本来的名字,作为代号
而我们需要找一个叫做张三的人
不过我们不能大声问谁是张三,只能根据代号挨个去问
如果张三的代号为1,那么我们只需要寻找一次就可以
如果为3那么我们需要寻找3次
如果为5或者张三不在这一排,我们就必须查找5次才能得到结果
而这个第一种情况就是最优情况,为O(1),第三种情况为最劣情况,也就是O(n)
通常使用最劣情况来表示一个程序的最终情况,也就是O()
一个简单的赋值语句,判断语句的时间复杂度为O(1),而不管你这个语句有多长,只要他是切实能写出来的次数,都是O(1)
循环语句根据循环的次数的变化而分为O(1),O(N),上面说过O(1)那么O(n)就是循环的次数随着题目或者问题的改变而改变的,就属于O(n)
而判断整个程序时间复杂度的方法为,以时间复杂度最高的为主:也就是说,就算你赋值了1000000个变量,而循环结果是随时间变化的,那么你的程序的时间复杂度为:O(n)
因为随着循环次数的增加,也就是n->无穷大,你的变量数目,也会相对于n来说越来越小。
所以可以忽略不计,为O(1)*O(n)==O(n)
常见的时间复杂度:O(1),O(logn),O(n),O(nlogn),O(n*2),O(2**n)O(n!)
按照从小到大的顺序排列
2. 空间复杂度O()
空间复杂度也具有相同的概念,只是有些地方变得不太一样了
如果说时间还能掐秒计算时间,那么占用空间就没那么好计算了,难不成,你去看看代码多少航,行多的占用内存就大吗?这也不是,有的代码很少,但是需要占用的内存多,有的代码看着很多,但是占用内存很小
空间复杂度是想对占用空间,比如说,你的程序创建100个变量接收了100个数字,字符串,在空间复杂度里面属于O(1),而你创建一个数组,哈希表,栈等就是O(n)
三、刷题小结
自从开始刷力扣,也有些许日子了,从一开始的每日一题,到每日两题,再到学习学到无聊的时候就去刷题,也算是经历了一番蜕变。
从一开始的什么都不懂,做题全靠暴力破解,但现在掌握了几个方法。
也了解了一些关于数据结构与算法的小知识
学习新知识固然重要,但是也需要总结之前的知识,毕竟温故而知新嘛