2.1算法的时间复杂度与空间复杂度

本篇博客介绍算法的时间复杂度与空间复杂度

一、算法效率

算法好坏从时间空间两个维度衡量

二、时间复杂度

1.概念

时间复杂度是算法中基本操作的执行次数,定量描述了算法的运行时间

2.注意

(1)时间复杂度是偏保守的估计量,可理解为最低的预期
(2)时间复杂度是一个数量级,表征大概执行次数,采用大O渐进表示法

  • 如果是常数次计算,时间复杂度为O(1)
  • 在运行次数函数中,只保留次数最高的那一项
  • 要省略最高阶项前面的常数
    常见的时间复杂度
    (3)时间复杂度实际上是一个函数f(x),注意与平时编程时调用的函数进行区分,是算法精确的执行次数

3.例子

(1)冒泡排序的时间复杂度

void BubbleSort(int* a, int n) 
{ 
	assert(a); 
	for (size_t end = n; end > 0; --end) 
	{ 
		int exchange = 0; 
		for (size_t i = 1; i < end; ++i) 
		{ 
			if (a[i-1] > a[i]) 
			{ 
				Swap(&a[i-1], &a[i]); 
				exchange = 1; 
			} 
		} 
		if (exchange == 0) 
			break; 
	} 
} 

冒泡排序的时间复杂度

(2)二分查找的时间复杂度

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-1; 
		else 
		return mid; 
	} 
	return -1; 
}

二分查找的时间复杂度
注意:只有以2为底的对数才可以简写成logN

(3)递归函数的时间复杂度

long long Fac(size_t N) 
{ 
	if(0 == N) 
	return 1; 
	return Fac(N-1)*N; 
} 

递归函数的时间复杂度

三、空间复杂度

1.概念

空间复杂度是算法运行过程中临时占用存储空间大小的量度,算的是变量的个数,研究额外申请的空间

2.例子

long long Fac(size_t N) 
{ 
	if(N == 0) 
	return 1; 
	return Fac(N-1)*N; 
}

解析:从Fac(N)到Fac(0)共调用Fac()函数N+1次,数量级是N,因此空间复杂度为O(N)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值