时间复杂度和空间复杂度

  1. 如何衡量一个算法的好坏?
  2. 什么是时间复杂度?
  3. 时间复杂度为什么不使用时间来衡量而使用基本语句的运行次数来衡量?
  4. 时间复杂度的O渐进表示法
  5. 时间复杂度的:最优、平均、最差情况,为什么时间复杂度看的是最差情况?
  6. 如何求解:二分查找、递归求阶乘、递归斐波那契的时间复杂度?
  7. 什么是空间复杂度?
  8. 如何求空间复杂度? 普通函数&递归函数
  9. 分析递归斐波那契数列的:时间、空间复杂度,并对其进行优化,伪递归优化—>循环优化
  10. 总结常见时间复杂度

解答

1.时间复杂度(衡量的是一个算法的运行速度)和空间复杂度(衡量一个算法所需要额外空间)

2.算法操作中的基本操作的执行次数

3.一个算法执行所花费的时间,在理论上是不能算出来的,需要上机测试才可以计算,这样就很麻烦,但是一个算法所花费的时间和执行次数是成正比的,所以利用时间复杂度来衡量。

4.1)用常数1取代运行时间中的所有加法常数
2)在修改后的运行次数函数中,只保留最高项
3)如果最高享存在且不是1、则去除与这个项目相乘的常熟,得到的结果就是大O阶

5.最差情况运行时间是一种保证,那就是运行时间不会再差了

6(1)//用二分法判断某个值是否存在

#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
int BinarySearch(int*a, int size, int x)
{
	int left = 0;
	int right = size - 1;
	int mid;
	while (left <= right)
	{
		mid = (left + (right - left) / 2);
		if (a[mid] < x)
			left = mid + 1;
		else if (a[mid] > x)
			right = mid - 1;
		else
		{
			return mid;
		}
	}
	return -1;
```}基本操作执行最好一次,最坏是O(logN),所以时间复杂度是O(N);注意此时log或lg都是指底数为2。
(2//计算阶乘Factorial
```c
long long Factorial(size_t n)//size_t和int其实差不多一个意思
{
	return < 2 ? N : Factorial(N - 1)*N;```
}基本操作执行N次,所以时间复杂度O(N);空间复杂度O(N);3//计算斐波那契数列Fibonacci
```c

long long Fibonacci(size_t N
{
	return < 2 ? N : Fibonacci(N - 1) + Fibonacci(N - 2);```
})时间复杂度是O(2^N);空间复杂度O(N);


7.空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度

8.大O渐进表示法

9.(1)常数型、O(log2^n)对数型、O(n)线性型、 O(nlog2 ^n)二维型、O(n ^2)平方型,O(n ^3)立方型、O(2 ^n)指数型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记得多喝热水…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值