现在更关注的重点是时间复杂度
时间复杂度具体怎么计算?
所以时间复杂度是一个估算,看表达式中影响最大的哪一项。
大O渐进表示法:
例2:算下面的函数的时间复杂度
结果为O(N)因为随着N无限大2对结果的影响不大
例3:算下面的函数的时间复杂度
例4算下面的函数的时间复杂度
只要是 确定的常数次都是O(1) 理由:因为随着N的增大,效率是不变的
反过来,别人说这个算发复杂度事O(1)说明这个算法不一定执行1次,执行常数次
例5算下面的函数的时间复杂度
在一个字符串中查找字符,可能很快找到,可能很慢找到,也可能找不到
这种需要分情况讨论
一般以最坏的情况为准
例6算下面的函数的时间复杂度
冒泡排序
冒泡排序的思想:将下标相邻的两个数做比较,如果前一个数大于后一个数,则交换
下面这个图很好的说明了这个思想
准确的次数如图中
但其中影响最大的是N的平方
所以冒泡排序的时间复杂度是N的平方
注意
例7算下面的函数的时间复杂度
二分查找(需要分情况)
二分查找图示:
二分查找的详细图解:(20条消息) 【二分查找】详细图解_Charon_cc的博客-CSDN博客_二分查找
所以时间复杂度为X=log2N
类似于折纸的思想假设最后找到了为1,没寻找一次,类似于折了一次纸,我们反过来计算的时候需要×2,所以假设找了X次,然后有下图的过程
简写形式
但
例7算下面的函数的时间复杂度
时间复杂度为:
如果在函数上加一个for循环
】
则时间复杂度变为O(N^2)
常见的时间复杂度
常见的时间复杂度对比:
O(1)时间复杂度的算法是最牛逼的
O(lgN)也牛逼
例如
常见的空间复杂度的计算
概念
例1:计算空间复杂度
解:
提问:
解:
例2:计算空间复杂度
找表达式中对结果影响最大的那一项
例3:计算空间复杂度
调用的时候建立栈帧,返回得时候销毁栈帧
看最坏最多得情况需要用多少空间就是空间复杂度
时间复杂度和空间复杂度得意义:可以通过这个复杂度思想交流算法优不优