时间,空间复杂度

理解时间,空间复杂度

在接触时间复杂度,空间复杂度的概念以来,只是大概认为是用来判断代码(算法)占用时间和空间多少。时间,空间复杂度越低,代码越好。本篇文章用来明确时间空间复杂度的概念。

书上时间复杂度的概念为:算法中最基本的操作执行次数与问题规模n之间的关系。
空间复杂度:算法执行过程中所需额外空间与问题规模n之间的关系

直接看书上的概念不好理解,我在理解后认为其中重点应该关注的是“关系”二字:
实际上时间复杂度并不具体表示代码真正执行的时间,而是表示代码执行时间与数据规模增长的变化趋势。

在计算时间复杂度的时候三个规则:取最高次项,去掉系数,去掉常数。
为什么会有这三个规则呢?
因为问题规模越大,即n越大,低阶,常数,系数对代码执行时间的增长趋势的影响微不足道,因此省略

空间复杂度:除了程序本身的指令,常数,变量等需要占内存外,数据操作也需空间,空间复杂度不是表示算法占了多少内存,而是表示算法占用的内存与问题规模的关系、

eg:动态内存看malloc与问题规模n是否有关 : 若无关O(1)
eg:递归看与问题规模是否有关: 若无关O(1)
注意:递归函数每直接或间接调用一次自己,都会新在栈分配空间,而且不到最后不出栈,问题规模n越大,占用的栈内存越大。可见递归算法写着比for循环简单,但空间复发度很高
eg:int a=10;int b=0;
a++; b++;
两个变量a,b需要空间,这两个空间与问题规模n无关(无论有多少个变量,a与b只需要int大小空间) ,2为常数,研究关系去系数,因此空间复杂度O(1)

eg:int arr[10]; 数组需要10个空间 ,空间复杂度 O(10)问题规模此时为10,若变100
arr[100]需要分配100个int大小空间,空间复杂度为100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值