时间?空间?复杂度??

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

会声会影视频剪辑软件教程之剪辑软件波纹在哪 剪辑软件波纹怎么去掉 波纹剪辑是什么意思

波纹效果做不好&#xff0c;那一定是剪辑软件没选对。一款好用的视频剪辑软件&#xff0c;一定拥有多个制作波纹效果的方法。用户可以根据剪辑创作的需要&#xff0c;挑选最适合作品的波纹效果来使用。有关剪辑软件波纹在哪&#xff0c;剪辑软件波纹怎么去掉的问题&#xff0c;…

使用Fiddler如何创造大量数据

在调试和分析网络流量时&#xff0c;您是否曾为无法深入了解请求和响应的数据而感到困惑&#xff1f;如果有一种工具可以帮助您轻松抓取和分析网络流量&#xff0c;您的工作效率将大大提升。Fiddler正是这样一款功能强大的抓包工具&#xff0c;广受开发者和测试人员的青睐。 Fi…

【日常开发之Windows共享文件】Java实现Windows共享文件上传下载

文章目录 Windows 配置代码部分Maven代码 Windows 配置 首先开启服务&#xff0c;打开控制面板点击程序 点击启用或关闭Windows功能 SMB1.0选中红框内的 我这边是专门创建了一个用户 创建一个文件夹然后点击属性界面&#xff0c;点击共享 下拉框选择你选择的用户点击添加…

CSS规则——font-face

font-face 什么是font-face&#xff1f; 想要让网页文字千变万化&#xff0c;仅靠font-family还不够&#xff0c;还要借助font-face&#xff08;是一个 CSS 规则&#xff0c;它允许你在网页上使用自定义字体&#xff0c;而不仅仅是用户系统中预装的字体。这意味着你可以通过提…

Vue父组件mounted执行完后再执行子组件mounted

// 创建地图实例 this.map new BMap.Map(‘map’) } } ... 现在这样可能会报错&#xff0c;因为父组件中的 map 还没创建成功。必须确保父组件的 map 创建完成&#xff0c;才能使用 this.$parent.map 的方法。 那么&#xff0c;现在的问题是&#xff1a;如何保证父组件 mo…

全空间数据处理

高精度三维数据往往因为体量巨大、数据标准不一、高保密性要求等&#xff0c;给数据的后期储存、处理、分析及展示造成巨大困扰。多源异构数据的客观存在性与数据无缝融合的困难性&#xff0c;为空间信息数据和业务过程中其他文件的有效管理与共享制造了诸多障碍。 随着数字孪…

数据库断言-数据库更新

数据库更新的步骤和查询sql的步骤一致 1、连接数据库 驱动管理器调用连接数据库方法&#xff08;传入url&#xff0c;user&#xff0c;password&#xff09;&#xff0c;赋值给变量 2、操作数据库 connection调用参数化方法&#xff0c;对sql语法进行检查&#xff0c;存储s…

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题&#xff0c;但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…

Ltv 数据粘包处理

测试数据包的生成 校验程序处理结果和原始的日志保温解析是否一致 程序粘包分解正常

Java数据结构4-链表

1. ArrayList的缺陷 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较多的场景…

OS中断机制-外部中断触发

中断函数都定义在中断向量表中,外部中断通过中断跳转指令触发中断向量表中的中断服务函数,中断指令可以理解为由某个中断寄存器的状态切换触发的汇编指令,这个汇编指令就是中断跳转指令外部中断通过在初始化的时候使能对应的中断服务函数如何判断外部中断被触发的条件根据Da…

【zip密码】忘了zip密码,怎么办?

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…

Windows资源管理器down了,怎么解

ctrlshiftesc 打开任务管理器 文件 运行新任务 输入 Explorer.exe 资源管理器重启 问题解决 桌面也回来了

vue如何引入图标

方法1&#xff1a;iconify/vue pnpm add iconify/vue -D 网址&#xff1a;https://icon-sets.iconify.design/ 使用哪个需要安装 如下截图,安装指令&#xff1a; > npm install iconify/icons-gg在使用的页面引入 import { Icon } from “iconify/vue”; <template>…

LabVIEW与C#相互调用dll

C#调用LabVIEW创建的dll 我先讲LabVIEW创建自己的.net类库的方法吧&#xff0c;重点是创建&#xff0c;C#调用的步骤&#xff0c;大家可能都很熟悉了。 1、创建LabVIEW项目&#xff0c;并创建一个简单的add.vi&#xff0c;内容就是abc&#xff0c;各个接线端都正确连接就好。 …

机器学习之逻辑回归丨KNN测试

选择题 【 正确答案: A D】 A. B. C. D. 【 正确答案: B】 A. B. C. D. 【 正确答案: C, D】 A. B. C. D. 假设我们三个类别中心&#xff0c;若某测试样本为&#xff0c;它的 c ( i ) c^{(i)} c(i)是多少&#xff1f; 【 正确答案: B】 A.1 B.2 C.3 D.不确定 假设你…

UE5 场景物体一键放入蓝图中

场景中&#xff0c;选择所有需要加入到蓝图的模型或物体。 点击 蓝图按钮&#xff0c;点击“将选项转换为蓝图” 在创建方法中&#xff0c;选择“子Actor”或着 “获取组件” 如果需要保持相对应的Actor的父子级别&#xff08;多层&#xff09;&#xff0c;那么选择“获取组件…

如何在Linux下使用git(几步把你教会)

目录 一、注册github账号 二、新建项目 1.点击右上角自己的头像&#xff0c;然后点击Your repositories。 2.点击New。 3.配置新项目信息。 4.点击Create repository即可成功创建。 三、安装git 四、配置git 五、初始化git仓库 1.先进入想要使用git的目录。 2.初始化…

SD-WAN是什么?它有哪些应用领域?

随着企业业务的不断扩展和数字化转型的加速&#xff0c;传统网络架构已无法满足企业对高效、灵活和安全网络连接的需求。在此背景下&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;应运而生&#xff0c;为企业带来了全新的网络连接体验。本文将详细介绍SD-WAN网络及…

vue音乐播放条

先看效果 再看代码 <template><div class"footer-player z-30 flex items-center p-2"><div v-if"isShow" class"h-12 w-60 overflow-hidden"><div :style"activeStyle" class"open-detail-control-wrap&…