什么是时间复杂度?
完成代码所需要的时间
一个算法花费的时间与其中语句的执行次数成正比,所以算法中的基本操作的执行次数,为算法的时间复杂度。
不需要精确的时间复杂度的计算,只需要大概就OK,把对结果影响不大的值给去掉。
使用大O的渐进表示法
O( 1 )不代表是1次而是常数次
时间复杂度不要去数循环
时间复杂度的计算:嵌套循环
![]() | 外循环走一次,内循环走m次 n个外循环,总共走了n*m次 |
时间复杂度的计算:冒泡排序
![]() | 该冒泡排序是倒叙 例子:1 2 3 4 5 6 7 8 9 长度为numSize=9 1 需要交换numSize -1=8次 2 需要交换numSize -2=7次 …… 8 需要交换numSize -8=1次 9 需要交换numSize -9=0次 外层循环是从0到numSize-1,遍历每个数 内层循环则是numSize-1-i, numSize-2-i…3,2,1,0次 外层每++一次,内层就0至numSize-1-i循环一次 依照等差求和公式,内层循环的总和为 (n+1)/ 2 套上外层循环 n*(n+1)/ 2 加了优化,最少只走外围 时间复杂度O(N^2) |
时间复杂度的计算:二分查找
![]() | 二分查找时间复杂度分析: 假设 共有M个元素 整个一个对折对折再对折的大操作 第一次: M/2 第二次: M/4 …… 第N次:M/2^N 最坏的情况是N次二分之后,每个区间的大小为1,找到想要的元素 即M/2^N=1 两边同时取log:logM=N 时间复杂度为O(logM) |
时间复杂度的计算:递归
![]() | 第一次从n到1 第二次从n-1到1 第三次从n-2到1 …… 第n-3次从4到1 第n-2次从3到1 第n-1次从2到1 n+n-1+n-2+……+3+2+1=n*(n+1)/2 时间复杂度就是O(N^2) |