数据结构(2)时间复杂度和空间复杂度

时间复杂度

–函数执行时的基本操作次数
求解过程

  • 1.先找数学表达式(嵌套循环为乘法),并代入O( )中
  • 2.加法中的常数用1取代
  • 3.只保留表达式中最高阶
  • 4.把最高阶系数变为1

注意:
在实际中我们通常情况考虑的是算法的最坏情况;

空间复杂度

–算法的储存空间需求
注意
一个程序在运行时除了需要寄存本身所用代码,常数,变量和输入数据的储存空间外,也需要一些对数据进行操作的工作单元和储存一些为实现计算机所需信息的辅助空间;这里强调的是辅助空间

-----------------------举例---------------------------

1.二分查找

代码:

int BinarySearch(int* array, int size, int data)
{
	int left = 0;
	int right = size;
	int mid = 0;
	while (left < right)
	{
		mid = left + ((right - left) >> 1);
		if (data == array[mid])
			return mid;
		else if (data < array[mid])
			right = mid;
		else
			left = mid + 1;
	}

	return -1;
}

时间复杂度:O(log2 N)
空间复杂度:O(1)

2.斐波那契数列

方案一:递归实现

long long Fib1(int n)
{
	return (n < 2) ? 1 : Fib1(n - 1) + Fib1(n - 2);
}

时间复杂度:O(n*n)
空间复杂度:O(n)
方案二:递归实现

long long Fib2(long long first, long long second, int n)
{
	if (n < 2)
		return 1;

	if (n == 2)
		return first + second;

	return Fib2(second, first + second, n - 1);
}

时间复杂度:O(n)
空间复杂度:O(n),若为尾递归则为O(1)
方案三:循环实现

long long Fib3(int n)
{
	long long first = 1;
	long long second = 1;
	long long ret = 1;
	int i = 2;
	for (; i <= n; ++i)
	{
		ret = first + second;
		first = second;
		second = ret;
	}
	return ret;
}

时间复杂度:O(n)
空间复杂度:O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值