

现在更关注的重点是时间复杂度

时间复杂度具体怎么计算?

所以时间复杂度是一个估算,看表达式中影响最大的哪一项。
大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:计算空间复杂度


调用的时候建立栈帧,返回得时候销毁栈帧
看最坏最多得情况需要用多少空间就是空间复杂度
时间复杂度和空间复杂度得意义:可以通过这个复杂度思想交流算法优不优
