时间复杂度和空间复杂度

时间复杂度

计算机中,算法的时间复杂度是一个函数,它定性的描述了程序的运行时间,常用大O的渐进表示法。
在实际中,我们通常情况考虑的是算法的最坏情况。
递归算法的时间复杂度的计算:递归总次数*每次递归中执行的基本操作次数。

空间复杂度

空间复杂度是对一个算法在它运行过程中临时占用的储存空间的大小的度量,所以它所主要考虑的是辅助空间的大小,而不是所有空间的大小,要注意的是递归算法的空间的复杂度是递归深度*每次递归的辅助空间的大小,如果每次递归的辅助空间内的大小是常数,则空间复杂度位O(N).

二分查找:

int find_binary(const int *ptr, const int x, const len)
{
int let = 0;
int right = len-1;
int mid = (left + right)/2;
while(left<=right)
{
if(x<ptr[mid])
{
right = mid -1;
}
else if(x>ptr[mid])
{
left = mid +1;
}
else
{
return  mid;
}
}
return -1;
}

通常最坏的的情况打算,用二分法找的时候,第一次在n/2的范围内找,第二次在n/4的范围内找,所以第x次就是n/2x,所以这个函数函数的时间复杂度就是O(log2n),所用的空间复杂度是O(1):
递归实现的斐波那契数:

long long fib(long long n)
{
assert(n>0);
return (n<2) ? (n) : (fib(n-1) + fib(n-2));
}

有递归实现的斐波那契数列可得:

在这里插入图片描述

虽然它不是一个满二叉树,但计算时间复杂度是按照最坏的情况来算的。
递归函数的时间复杂度 = 递归总次数每次递归中执行基本操作的次数。
这个二叉树的节点个数为2
n-1,深度为n。
所以它的时间复杂度为O(2n)
递归的空间复杂度是:递归的深度
每次递归的辅助空间的个数
所以空间复杂度为:O(N)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值