第一章——时间复杂度理解

第一章——算法的时间复杂度

1.知道什么是时间复杂度

如何看算法的好坏,我们需要评价运行过程中所占用的计算资源

计算资源包括时间空间,我们现在主要考虑占用时间资源

时间资源简单说就是计算机处理的时间

计算机处理包括两大类(计算储存

这里我们先把程序设计语言中的语句分类一下

定义语句:(例如C语言中的 int a)不占用时间复杂度

控制流语句:顺序,条件分支,循环迭代,只是起到一个组织语句的作用,并不进行处理

赋值语句:求一个表达式的值,然后赋值给一个变量。是一个对算法进行很好度量的指标

所以求算法的时间复杂度就是看计算机关于计算和存储的语句(赋值语句)有多少条

赋值语句多算法时间就长

2.具体怎么求时间复杂度T(n)

我们看一段简单代码

def sum_of_n(n):
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

第二行对total进行了赋值,只执行一次

第三行for循环为控制流语句,这里计算时间复杂度只计算控制流语句下面的语句,不计算语句本身(没有计算和赋值过程我们都不计算),也就是n*(for语句中语句的条数)

这里的时间复杂度用T(n)函数表示也就是T(n)=1+n

使用这个sun_of_n(n)函数时需要一个n,这里的n我们成为问题的规模

问题的规模:是指影响到这个程序运行时间的指标

我们求算法的时间复杂度函数也就是求运行时间与问题的规模(n)之间的函数关系

有时候决定算法时间复杂度的不仅是问题规模(n)具体数据也会影响算法运行时间

算法也有最好,最差,平均情况,平均状况体现了算法的主流性能

3.大O表示法(数量级函数)

基本操作数量函数T(n)的精确值并不是很重要,重要的是T(n)当中起决定性因素的主导部分

通俗来说就是对时间影响远远大于其他的那部分(这为数级)

例如:上面例子中的n与1相比较,当n越来越大,1显得无足轻重,我们就可以把这个1去掉,只保留n作为主导部分

用大O表示法表示上面的时间复杂度为O(n)

T(n)=5n**2+10n+100

当n越来越大的时候,10n和100常数对时间影响越来越小,n方的系数5对n方的增长速度来讲也没有影响,最终数量级函数为O(n**2),理解为n方 量级的时间复杂度

这里是几个数量级函数

1 常数
log(n) 对数
n 线性
n*log(n) 对数线性
n**2 平方
n**3 立方
2**n 指数
posted @ 2024-11-29 19:41  不相负  阅读(49)  评论(0)    收藏  举报