针对于数据结构,算法便是操作数据结构的方法,为了更好的评判算法运行时间长短,需要有合适的方法即算法时间复杂度这一概念来进行估算.
分析方法
- 关注随着”n”变化的且运行次数最多的执行语句,此语句的时间复杂度则是该算法的时间复杂度.
int cal(int n) {
int sum = 0;
int i = 1;
for (; i <= n; ++i) {
//关注这一语句的时间复杂度即可
sum = sum + i;
}
return sum;
}
- 加法法则:如果两个未知量m&n,没有嵌套的情况,那么选择m和n之间较大的那个数的时间复杂度.
- 乘法法则:如果两个未知量m&n,形成了嵌套的语句,那么时间复杂度便是O(m)*O(n).
- 没有因为n而导致执行次数变化的语句,则其时间复杂度便是O(1).
所有对数相关的时间复杂度都是log为底
i=1;
while (i <= n) {
//时间复杂度为log(n), 因为2^0, 2^1, 2^2, ......, 2^j = n得到 2^j = n,得到j的值为log2(n),即循环执行了j次.
i = i * 2;
}
同时出现m和n以及其他的未知数,但是不知他们之间的大小则时间复杂度为O(m+n)
极端情况:最好时间复杂度&最坏时间复杂度
平均时间复杂度的计算方法
平均时间复杂度即考虑所有会出现的情况,其计算公式如下:
空间复杂度
空间复杂度与时间复杂度相似.
- 时间复杂度关注语句执行次数.
- 空间复杂度关注变量存储空间,如申请内存地址的次数.