简述时间和空间复杂度

时间复杂度

就是说这个算法要进行多少次计算,遍历。
空间复杂度就是说这个算法需要用到多少空间内存等。

关于时间复杂度,常见的有O(1),O(n),O(n^2)等;
如果说这个算法的次数是可以确定的,是常数次,比如100次,10000次,那么时间复杂度就是O(1)。
比如:

int main()
{
	int n = 1000;
	while(n--)
	{
	printf("hello\n");
	}
	return 0;
}

可以知道只计算1000次,所以时间复杂度为O(1);
如果是不确定的比如for循环

for(size_t i = 0;i<n;i++)
{
	printf("hello\n");
}

像这样一层是n次,时间复杂度O(n)。
如果再嵌套一次。

for(size_t i = 0;i<n;i++)
{j
	for(size_t j = 0;j<n;j++)
	{
		printf("jhello\n");
	}
}

就是n*n。时间复杂度O(n^2);
类似三层嵌套就是O(n^3);
类似的,有这样情况:

for(size_t i = 0;i<n;i++)
{
	printf("hello\n");
}
for(size_t i = 0;i<n;i++)
{
	printf("hello\n");
}

复杂度是n+n = 2n;一般都忽略系数,一律记作O(n);
同样的,如复杂度是n*n +n+n+100;记作O(n^2);
类推其他情况都一样,都看复杂度最高的那一项;

比较特殊的有O(logN),O(2^N);
二分法的时间复杂度为O(logN)

int BinarySearch(int* a, int n, int x)
 { 
	assert(a);
	 
	int begin = 0; 
	int end = n-1;
	while (begin < end)
	 {
	     int mid = begin + ((end-begin)>>1);
	     if (a[mid] < x)
	         begin = mid+1;
	     else if (a[mid] > x)
	         end = mid;
	     else
	         return mid;
	 }
 
return -1;
 }
 

计算费波纳茨算法为O(2^N)

long long Fibonacci(size_t N)
 { return N < 2 ? N : Fibonacci(N-1)+Fibonacci(N-2); } 

空间复杂度

是对一个算法在运行过程中临时占用存储空间大小的量度。
因为硬件技术的提高,现在绝大多数情况都拥有足够的空间,所以不常用;
一般直接调用排序算法空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了。

下面是我整理的一些排序复杂度表:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值