【数据结构】算法的时间复杂度与空间复杂度

计算机考研408-数据结构笔记本之——第一章 绪论

1.2 算法和算法评价

1.2.2 算法效率的度量

算法效率的度量是通过时间复杂度和空间复杂度来描述的。

1.时间复杂度

时间复杂度T(n)是事前预估算法时间开销T(n)问题规模 n 的关系(T 表示 “time”),通常将算法中基本运算的执行次数的数量级作为该算法的时间复杂度,记为:T(n) = O(f(n)) 

2.计算时间复杂度

以【算法表白——爱你n遍】举例。

算法1中,语句频度: ① ——1次 ② ——3001次 ③④ ——3000次 ⑤ ——1次 (注:一个语句的频度是指该语句在算法中被重复执行的次数),易得:问题规模 n = 3000,时间开销T(n) = 1 + 3001 + 3000 + 1 = 3n + 3

这样就简单计算出了算法1的T(n).

当遇到复杂的算法时,这样的粗暴计算难免会很麻烦,是否可以忽略表达式某些部分?

答:可以。如同上面提到的,只考虑阶数,用大O记法 O(f(n)) 来表示T(n) ,下图是一个简单的演示:

简单总结就是,只取最高阶项,并视最高阶项系数为1.  并遵循下列两个规则:

那么,如何知道哪一项是算式中的最高阶呢?请记住下表(可以用求极限的方法来判断,平常使用记住即可):(口诀:从小到大,常对幂指阶

但是,如果有好几千行代码,难道依然要像算法1一样一行一行看,计算每一行的语句频度么?

答:当然不。只需考虑最深层循环的循环次数与 n 的关系即可。

如下图:

结论1:顺序执行的代码只会影响常数项,可以忽略

结论2:只需挑循环中的一个 基本操作分析它的执行次数与 n 的关系即可

结论3:如果有多层嵌套循环,只需关注最深层循环循环了几次

一眼不能看出最深层循环频度时,可像下图一样,设置一个x求时间复杂度

当时间复杂度如算法4一样受概率或其他因数影响大小时,我们将最坏情况时间复杂度视为该算法时间复杂度。

补充:三种时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值