算法性能分析

算法性能分析

时间复杂度

程序运行时间:通常会估算算法的操作单元数量来代表程序消耗的时间
在决定使用哪些算法的时候,不是时间复杂越低的越好(因为简化后的时间复杂度忽略了常数项等等),要考虑数据规模,如果数据规模很小甚至可以用O(n^2)的算法比O(n)的更合适(在有常数项的时候)。我们说的时间复杂度都是省略常数项系数的,是因为一般情况下都是默认数据规模足够的大。
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶

递归算法时间复杂度

递归算法的时间复杂度本质上是要看: 递归的次数 * 每次递归中的操作次数

(1)递推求

在这里插入图片描述
在这里插入图片描述

(2)Master定理求时间复杂度

在这里插入图片描述
要求a >= 1, b > 1为整数,f(n)是正函数
在这里插入图片描述
规则1举例:
在这里插入图片描述
规则2举例:
在这里插入图片描述
在这里插入图片描述

(3)递归树求解

在这里插入图片描述
例2:
在这里插入图片描述

空间复杂度分析

空间复杂度是考虑程序运行时占用内存的大小,而不是可执行文件的大小。
递归算法的空间复杂度 = 每次递归的空间复杂度 * 递归深度

代码的内存消耗

(1)内存管理方式

不同的编程语言各自的内存管理方式。

  • C/C++这种内存堆空间的申请和释放完全靠自己管理
  • Java 依赖JVM来做内存管理,不了解jvm内存管理的机制,很可能会因一些错误的代码写法而导致内存泄漏或内存溢出
  • Python内存管理是由私有堆空间管理的,所有的python对象和数据结构都存储在私有堆空间中。程序员没有访问堆的权限,只有解释器才能操作。

(2)内存对齐

只要可以跨平台的编程语言都需要做内存对齐。C/C++、Java、Python
为什么会有内存对齐?【面试可能会问】
平台原因:不是所有的硬件平台都能访问任意内存地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。为了同一个程序可以在多平台运行,需要内存对齐。
硬件原因:经过内存对齐后,CPU访问内存的速度大大提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值