时间?空间?复杂度??

news2024/12/24 3:18:35

1.什么是时间复杂度和空间复杂度?

1.1算法效率

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称为空间复杂度。
时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的水准,所以我们如今不需要再特别关注算法的空间复杂度。

1.2时间复杂度的概念

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法度上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度

1.3空间复杂度的概念

空间复杂度是对一个算法运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少比特位的空间,因为这个也没有太大的意义,所以空间复杂度算的是变量的个数。空间复杂度计算也采用大O渐进表示法

2.什么是大O 渐进表示法?

实际中我们计算时间复杂度时,我们其实并不一定要精确的执行次数,而只需要大概执行次数,那么这里我们使用大O渐进表示法
大O符号(Big O notation):是用来描述函数渐进行为的数学符号。
推导大O阶方法:
1.用常数1取代运行时间中所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

3.如何计算常见算法的时间复杂度和空间复杂度?

3.1普通常见的时间复杂度计算

3.1.1Func1
void Func1 (int N)
{
	int count=0;
	for(int j=0;i<N,++i)
	{
		for(int j=0;j<N;++j)
		{
			count++;
		}
	}
	for(int k=0;k<2*N;++k)
	{
		++count;
	}
	int M=10;
	while(M--)
	{
		++count;
	}
	printf("%d ",count);
}

在这里插入图片描述

3.1.2Func2
void Func2 (int N)
{
	int count=0;
	for(int k=0;k<2*N;++k)
	{
		++count;
	}
	int M=10;
	while(M--)
	{
		++count;
	}
	printf("%d ",count);
}

在这里插入图片描述

3.1.3Func3
void Func3 (int N,int M)
{
	int count=0;
	for(int k=0;k<N;++k)
	{
		++count;
	}
	for(int k=0;k<M;++k)
	{
		++count;
	}
	printf("%d ",count);
}

在这里插入图片描述

3.1.4Func4
void Func4 (int N)
{
	int count=0;
	for(int k=0;k<100;++k)
	{
		++count;
	}
	printf("%d ",count);
}

在这里插入图片描述

3.2存在时间复杂度最好、平均、最坏的情景

const char * strchr (const char * str,char character)
{
	while(*str!='\0')
	{
		if(*str==character)
		return str;
		str++;
	}
	return NULL;
}

在这里插入图片描述

3.3冒泡排序的时间复杂度计算

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

在这里插入图片描述

3.4折半查找的时间复杂度计算

//前提数组中数据为升序
int BinarySearch(int *a,int n,int x)
{
	assert(a);
	int left=0;
	int right=n;
	while(left<right)
	{
		int mid=(left+right)/2;
		if(a[mid]<x)
		{
			left=mid;
		}
		if eles (a[mid]>x)
		{
			right=mid;
		}
		else(a[mid]==x)
		return mid;
	}
}

在这里插入图片描述

3.5计算阶乘递归的时间复杂度

long long Factorial(size_t N)
{
	return N<2?N:Factorial(N-1)*N;
}

在这里插入图片描述

4.常见的时间复杂度:

在这里插入图片描述

结论O(1)<O(log n)<O(n)<O(n log n)<O(n^2)

5.空间复杂度的计算

5.1 空间复杂度为O(1)

时间虽然是累计的,但是空间不累计,循环走了N次,但始终重复利用的是一个空间

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

5.2空间复杂度为O(n)

5.2.1由动态内存开辟的
void factor(int *a)
{
	int * a=(int)malloc((n)*sizeof(int));
}
5.2.2函数递归类型

递归调用了N层,每次调用建立了一个栈帧,每个栈帧使用了常数个空间——》O(1)
调用时,建立栈帧
返回时,销毁
最后对未知的N 空间复杂度为O(N)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1846658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爱眼小妙招:台灯怎么选?学生如何正确使用台灯?

视力是心灵的窗户&#xff0c;尤其对于儿童来说更为重要。然而&#xff0c;随着现代生活方式的改变&#xff0c;孩子们面临越来越多的视力挑战。据统计&#xff0c;在近视学生中&#xff0c;近10%的人患有高度近视&#xff0c;而这一比例随年级的增加而逐渐上升。从幼儿园的小小…

Redis-数据类型-Bit的基本操作-getbit-setbit-Bitmap

文章目录 0、Bitmaps&#xff08;位图&#xff09;1、查看redis是否启动2、通过客户端连接redis3、切换到db7数据库4、设置&#xff08;或覆盖&#xff09;一个键&#xff08;key&#xff09;的值&#xff08;value&#xff09;5、获取存储在给定键&#xff08;key&#xff09;…

解锁空间数据奥秘:ArcGIS Pro与Python双剑合璧,处理表格数据、矢量数据、栅格数据、点云数据、GPS数据、多维数据以及遥感云平台数据等

ArcGISPro提供了用户友好的图形界面&#xff0c;适合初学者快速上手进行数据处理和分析。它拥有丰富的工具和功能&#xff0c;支持各种数据格式的处理和分析&#xff0c;适用于各种规模的数据处理任务。ArcGISPro在地理信息系统&#xff08;GIS&#xff09;领域拥有广泛的应用&…

鸿蒙Harmony角落里的知识:从ECMA规范到ArkTS接口(二)

上篇介绍了typedArray.slice方法&#xff0c;鸿蒙Harmony角落里的知识&#xff1a;从ECMA规范到ArkTS接口&#xff08;一&#xff09;本文介绍一个返回结果和参数和slice非常类似的函数&#xff1a;TypedArray.prototype.subarray。 ECMA对TypedArray.prototype.subarray接口的…

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(三)通信接口

Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU, 集成了内置以太网控制器&#xff0c;配备2路CAN、4路UART、5组GPIO、2路SPI等多种通信接口&#xff0c;能够轻松与各种显示设备连接&#xff0c;实现快速数据传输和稳定通信&#xff0c;可以与各…

Matplotlib绘制一个X轴2个Y轴的图表

import matplotlib matplotlib.use(Agg) # 使用Agg后端&#xff0c;这个后端适用于生成图像文件但不显示它们 import matplotlib.pyplot as plt fig plt.figure(figsize(15, 8))# 字体使用楷体 matplotlib.rc("font", family"Microsoft YaHei") ax1 fig…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

ISCC2024 WriteUpReverse 迷失之门

Reverse 迷失之门 迷失之门 writeup解题思路 打开题目是一个压缩包解压后是一个.exe程序 按照做题顺序第一步查壳发现并没有壳将其拖入ida中进行查看 使用shiftF12进行字符串查看 发现flag字符了我们双击它 将光标移动到yes哪里右击空白地方打开交叉索引并按F5进行反汇编发现…

Ci2451和Ci2454:2.4GHz无线MCU的芯片对比数据资料分析

一、2.4GHz无线MCU芯片的背景介绍 1、开头我们先聊聊&#xff0c;关于南京中科微2.4GHz无线MCU芯片&#xff08;Ci2451、Ci2454、CSM2433)是建立在现有的2.4GHz射频芯片基础上面&#xff0c;它的内部是集成了8位RISC内核&#xff0c;且集成丰富的MCU资源、更小的尺寸可以来满足…

stable diffusion webui电商基础模型

电商生成模型的产生主要有两个路子,1.训练微调;2.模型融合。 下面这些是借鉴,帮助思考如何构建电商模型。 电商必备的10款Stable diffusion WebUI 模型 - 知乎一、WFProduct 电商场景这是一个专门为电商摄影场景训练的 lora 模型,可以生成各种极具设计感的场景图,效果逼真…

2024年高处安装、维护、拆除证考试题库及高处安装、维护、拆除试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年高处安装、维护、拆除证考试题库及高处安装、维护、拆除试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上…

【设计模式深度剖析】【10】【行为型】【状态模式】

&#x1f448;️上一篇:访问者模式 | 下一篇:解释器模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 状态模式定义英文定义直译如何理解呢&#xff1f; 状态模式的角色Context&#xff08;环境类&#xff09;State&#xff08;抽象状态类&#xff09;Concret…

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统--图文解析

实战&#xff01;如何从零搭建10万级 QPS 大流量、高并发优惠券系统–图文解析 原文链接&#xff1a;https://juejin.cn/post/7087824893831544845 原文作者&#xff1a;字节跳动技术团队 需求背景 需要设计、开发一个能够支持十万级 QPS 的优惠券系统 什么是QPS? Queri…

课程标准包括哪些内容?

老师们常常会思考&#xff1a;课程标准究竟包含哪些要素&#xff1f;课程标准不仅仅是一系列冷冰冰的条条框框&#xff0c;而是活生生的指导原则&#xff0c;引领教学实践&#xff0c;激发学生的潜能。 课程标准&#xff0c;简而言之&#xff0c;是对学习成果的期望和要求的明确…

观测云「可观测性解决方案」荣耀登入华为云官网

继成功上架华为云云商店联营商品后&#xff0c;「观测未来可观测性解决方案」已进一步正式登陆华为云官网&#xff0c;标志着双方合作的深化与拓展。这一全新上架的解决方案是观测云技术实力的集大成之作&#xff0c;为企业提供了一个全面升级的数字化监控观测服务。 观测云&am…

AI大模型“行业数据集-场景应用创新计划”启动征集

数据决定了大模型的“智力”边界。当前&#xff0c;在通用领域&#xff0c;大模型初步呈现了一定的场景应用能力&#xff0c;然而&#xff0c;在医疗健康、教育等垂直领域&#xff0c;大模型所展现的能力尚不足以支持专业应用&#xff0c;其主要原因在于模型训练缺乏高质量可用…

深入探索Java开发世界:MySQL~类型分析大揭秘

文章目录 深入探索Java开发世界&#xff1a;MySQL~类型分析大揭秘一、数据结构类型二、函数类型三、事物类型四、事物隔离级别类型五、数据一致性问题类型 深入探索Java开发世界&#xff1a;MySQL~类型分析大揭秘 MySQL数据库基础知识&#xff0c;类型知识点梳理~ 一、数据结构…

基于EXCEL数据表格创建省份专题地图

1 数据源 随着西藏于5月1日发布2022年一季度经济运行情况&#xff0c;31省份一季度GDP数据已全部出炉。 总量方面&#xff0c;粤苏鲁稳居前三&#xff1b;增速方面&#xff0c;23省份高于“全国线”&#xff0c;新疆表现最佳&#xff0c;增速达到7.0%。 表格表现数据不够直观…

MATLAB神经网络---lstmLayer(LSTM 长短期记忆神经网络)

前言 描述LSTM就要先描述一下循环神经网络 循环神经网络 循环神经网络通过使用带自反馈的神经元&#xff0c;使得网络的输出不仅和当前的输入有关&#xff0c;还和上一时刻的输出相关&#xff0c;于是在处理任意长度的时序数据时&#xff0c;就具有短期记忆能力。 如下是一个…

【前端vue3】TypeScrip-interface(接口)和对象类型

对象类型 定义对象需要用到interface&#xff08;接口&#xff09;&#xff0c;主要用来约束数据的类型满足格式 定义方式如下&#xff1a; interface Person {name: string;age: number; }如对象中与接口中的属性不一致会报错&#xff0c;必须保持一致 例如如下&#xff1a…