时间?空间?复杂度??

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.mzph.cn/web/33370.shtml

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

相关文章

node.js环境安装以及Vue-CLI脚手架搭建项目教程

目录 ▐ vue-cli 搭建项目的优点 ▐ 安装node.js环境 ▐ 搭建vue脚手架项目 ▐ 项目结构解读 ▐ 常用命令 ▐ 创建组件 ▐ 组件路由 ▐ vue-cli 搭建项目的优点 传统的前端项目架构由多个html文件&#xff0c;且每个html文件都是相互独立的&#xff0c;导入外部组件时需…

RabbitMQ的高可用机制有了解过嘛

面试官&#xff1a;RabbitMQ的高可用机制有了解过嘛 候选人&#xff1a; 嗯&#xff0c;熟悉的~ 我们当时项目在生产环境下&#xff0c;使用的集群&#xff0c;当时搭建是镜像模式集群&#xff0c;使用了3台机器。 镜像队列结构是一主多从&#xff0c;所有操作都是主节点完成&a…

Listary——最好用的电脑搜索文件软件

简易版&#xff1a; https://www.listary.com/download-completion?versionstable 完整功能版&#xff1a; Microsoft PowerToys | Microsoft Learn

华为仓颉编程语言震撼发布!Hello Cangjie!

引言 2024 年度华为开发者大会&#xff08;HDC&#xff09;在 6 月 21 日拉开帷幕&#xff0c;鸿蒙 NEXT&#xff08;HarmonyOS NEXT&#xff09;操作系统在万众瞩目中横空出世。 华为常务董事、终端 BG 董事长余承东激动地表示 &#xff0c;从 2019 年 8 月 9 日至今共 1778 天…

创新、引领、发展——SAMPE中国2024年会在京盛大开幕

绿树阴浓夏日长&#xff0c;在这个色彩缤纷的季节&#xff0c;SAMPE中国2024年会暨第十九届国际先进复合材料制品原材料、工装及工程应用展览会在中国国际展览中心&#xff08;北京朝阳馆&#xff09;隆重开幕。新老朋友共聚一堂&#xff0c;把酒话桑麻。 为期4天的国际学术会…

不出网上线CS的各种姿势(内网横向)

情况一&#xff1a;存在一台中转机器 存在一台中转机器&#xff0c;这台机器出网&#xff0c;这种是最常见的情况。 经常是拿下一台边缘机器&#xff0c;其有多块网卡&#xff0c;用于连接内外网&#xff0c;内网机器都不出网。这种情况下拿这个边缘机器做中转&#xff0c;就…

分享几个小红书获取笔记详情API接口调用实例

item_get_video-获得小红书笔记详情 smallredbook.item_get_video 公共参数 名称类型必须描述keyString是调用key&#xff08;API支持测试&#xff0c;获取测试key&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[i…

HTML(14)——结构伪类选择器和伪元素选择器

结构伪类选择器 作用&#xff1a; 根据元素的结构关系查找元素 选择器说明E:first-child查找第一个E元素E:last-child查找最后一个E元素E:nth-child(N)查找第N个E元素(第一个元素N值为1) 例如&#xff1a;查找第一个li标签&#xff0c;将背景改为绿色 <style> li:fir…

APP启动流程

文章目录 主要构成详细启动流程参考链接 主要构成 App的启动流程主要涉及几个关键步骤和组件的交互&#xff0c;包括Launcher进程、ActivityManagerService&#xff08;AMS&#xff09;、Zygote进程、以及App进程本身。以下是详细的启动流程&#xff1a; 用户操作&#xff1a;…

[职场] 怎么写个人简历模板 #其他#知识分享

怎么写个人简历模板 怎么写个人简历模板1 姓名&#xff1a;xxx 性别&#xff1a;x 年龄&#xff1a;x岁 婚姻状况&#xff1a;x 最高学历&#xff1a;xx 政治面貌&#xff1a;xx 现居城市&#xff1a;xx 籍贯&#xff1a;xx 联系电话&#xff1a;xxxxxx 电子邮箱&#xff1a;xx…

vue的学习之路(Axios 基本使用)

<script src"js/axios.min.js"></script> 3、在页面中引用 4、发送异步请求 url?xxx rest请求【GET,POST,DELETE,PATCH】 5、准备一个SpringBoot的控制层与axios进行交互 实体类 public class User { private Integer id; private String user…

家政小程序开发,打造方便快捷的家政市场

随着生活水平的提高&#xff0c;对家政的需求也在逐渐增加。不过在市场中&#xff0c;传统的家政服务存在严重的信息差&#xff0c;需要花费大量时间才可以找到合适的家政人员&#xff0c;效率较低。 互联网家政小程序因此出现&#xff0c;它能够直接连接用户与家政人员&#…

深入理解Qt属性系统[Q_PROPERTY]

Qt 属性系统是 Qt 框架中一个非常核心和强大的部分&#xff0c;它提供了一种标准化的方法来访问对象的属性。这一系统不仅使得开发者能够以一致的方式处理各种数据类型&#xff0c;还为动态属性的管理提供了支持&#xff0c;并与 Qt 的元对象系统紧密集成。在这篇文章中&#x…

WPF——属性

一、属性 类最初只有字段与函数&#xff0c;字段为一个变量&#xff0c;访问权限可以是private&#xff0c;protected&#xff0c;public。而将字段设为private&#xff0c;不方便外界对类数据的操作&#xff0c;但是将字段设为public又怕外界对数据进行非法操作&#xff0c;于…

尴尬时刻:如何在忘记名字时巧妙应对

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

llama系列模型学习

一、目录 llama1 模型与transformer decoder的区别llama2 模型架构llama2 相比llama1 不同之处llama3 相比llama2 不同之处llama、llama2、llama3 分词器词表大小以及优缺点采用的损失函数是什么&#xff1f;为什么Layer Norm 改为RMS Norm?如何消除模型幻觉&#xff1f; 二…

Vscode配置Verilog开发环境(二)

两年前我写过一篇vscode配置fpga开发环境的博客&#xff0c;近期发现查看的人数还是比较多的&#xff0c;经过两年的使用&#xff0c;优化了代码模板以及删减了一些插件等等&#xff0c;因此有了本文。 目前我的vscode只有下图中的九个插件&#xff0c;相比前文已经减少了一些了…

地级市绿色创新及碳排放与环境规划数据(2000-2021年)

数据简介&#xff1a;分享各个城市对于碳排放的降低做出了哪些共享。该数据是地级市2000-2021年间由绿色创新、碳排放与环境规制数据构成的能源与环境研究数据大合集&#xff0c;并对其进行可视化处理&#xff0c;供大家研究使用。当今我国大力推进生态文明建设、美丽中国建设等…

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

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

python爬虫必须要高匿IP吗 ?

各个平台搜索关键词就可以找到不同品牌的代理IP了。 找倒是不难&#xff0c;难的是能从中挑选出靠谱且合适的代理品牌。 在选择代理IP这块&#xff0c;不建议使用免费和超低价的代理&#xff0c;因为这一类的代理往往非常不稳定&#xff0c;很多都被网站拉黑过&#xff0c;特…