数据结构——复杂度(时间,空间)

注:以下用冒泡排序排序数组的统一都是排成升序

冒泡排序代码:

cpp 复制代码
void Bubble_Sort(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		int flag = 0;
		for (int j = 0; j < n - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				Swap(&arr[j], &arr[j + 1]);
				flag = 1;
			}
		}
		if (flag == 0)
		{
			break;
		}
	}
}

时间复杂度:

0.时间复杂度指的是算法中的基本操作的执行次数

例:

cpp 复制代码
for (int i = 0; i < 10; i++)
{
	for (int j = 0; j < 20; j++)
	{
		printf("haha");
	}
}

该代码的printf执行次数为10 * 20 = 200

递归的时间复杂度计算方式依旧:

例:

cpp 复制代码
int func(int n)
{
	if (n == 1)
	{
		return 1;
	}

	return func(n - 1) * n;
}

func的执行次数为n

1.不论是时间复杂度还是空间复杂度,都取的是最坏的情况

关于最坏的情况的定义:

举个例子:

用冒泡排序排序一个数组(已知该数组为5个元素但具体情况未知),使之有序

那么冒泡排序需要最少排序0次,最多排序10次才能实现该数组有序

那么此时的最坏情况就是10次

2.推倒大O阶的方法:

(1).加法常数通通用1取代

(2).在得到了具体的复杂度表达式之后,只保留该表达式的最高阶项,并将前边的系数改为1

(3).如果没有最高阶项,即得到的具体表达式只有常数,则O(N) = 1

例:

推导出来的具体表达式为 2 * N ^ 2 + N

那么此时的时间复杂度为N ^ 2

而第0点中的第一个例子的时间复杂度是1,第二个是n

3.要想推出具体的时间复杂度,则要用到数学知识,大部分都涉及到的是等差数列求和或等比数列求和

例:

用冒泡排序排列数组元素为N的未知数组,那么用数学分析如下:

按照第一点的最坏情况理论,该数组的

第一个元素想要排列完毕则要经过n - 1重循环

第二个元素想要排列完毕则要经过n - 2重循环

第三个元素想要排列完毕则要经过n - 3重循环

......

倒数第二个元素(即第n - 1个元素)想要排列完毕则要经过n - (n - 1)重循环

那么n - (n - 1) + n - (n - 2)+ ...... + n - 3 + n - 2 + n - 1 即时间复杂度的具体表达式

运用等差数列求和公式得:

(n - 1) * (1 + n - 1) / 2

化简得:(n - 1) * n / 2

用第二点推导方法得:O(N) = n ^ 2

空间复杂度:

4.空间复杂度指的是一个算法在运行时临时占用的存储空间的大小

注:是临时!不包含那些一开始就分配好了的空间

例:

最上边的冒泡排序的空间复杂度就是1,因为他只用了常数次的临时变量,或称为只开辟了常数次的空间,所以按照第2点的推导方法,得冒泡排序的空间复杂度为1

相关推荐
leonkay1 天前
Golang语言闭包完全指南
开发语言·数据结构·后端·算法·架构·golang
雅欣鱼子酱1 天前
Type-C供电PD协议取电Sink芯片ECP5702,可二端头分开供电调整亮度,适用于LED灯带户外防水超亮灯条方案
c语言·开发语言
casual~1 天前
第?个质数(埃氏筛算法)
数据结构·c++·算法
仰泳的熊猫1 天前
题目2308:蓝桥杯2019年第十届省赛真题-旋转
数据结构·c++·算法·蓝桥杯
hssfscv1 天前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
Yungoal1 天前
B/S和C/S架构在服务端接收请求
c语言·开发语言·架构
不想看见4041 天前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy1 天前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
InfiniSynapse1 天前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析
WolfGang0073211 天前
代码随想录算法训练营 Day13 | 二叉树 part03
数据结构·算法·leetcode