当前位置: 首页 > news >正文

【数据结构】时间复杂度和空间复杂度

 

🌇个人主页:平凡的小苏

📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情

🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html

小苏希望大家能从这篇文章中收获到许多,如果大家觉得这篇文章对你有帮助,请给小苏点赞+收藏+评论

目录

1.算法效率  

1.1 如何衡量一个算法的好坏

 2. 时间复杂度

2.1时间复杂度的概念

2.2 大O的渐进表示法

3.空间复杂度

4.由数据范围反推算法复杂度以及算法内容


1.算法效率  

1.1 如何衡量一个算法的好坏

如何衡量一个算法的好坏呢?比如对于以下斐波那契数列
long long Fib(int N)
{if(N < 3)return 1;return Fib(N-1) + Fib(N-2);
}
斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?

 2. 时间复杂度

2.1时间复杂度的概念

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。
时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
即:找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。
// 请计算一下Func1中++count语句总共执行了多少次?
void Func1(int N)
{
int count = 0;
for (int i = 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\n", count);
}

 Func1 执行的基本操作次数 :

F(N) = N^2+2*N+10

  • N = 10 F(N) = 130
  • N = 100 F(N) = 10210
  • N = 1000 F(N) = 1002010
实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。

2.2 O的渐进表示法

大O符号(Big O notation):是用于描述函数渐进行为的数学符号。

推导大O阶方法:
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
使用大O的渐进表示法以后,Func1的时间复杂度为O(N^2);
  • N = 10 F(N) = 100
  • N = 100 F(N) = 10000
  • N = 1000 F(N) = 1000000
通过上面我们会发现大O的渐进表示法去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数。
另外有些算法的时间复杂度存在最好、平均和最坏情况:
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)

3.空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度
空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。
空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法
注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

4.由数据范围反推算法复杂度以及算法内容

 好了!小编的分享到这里就结束了,有什么不足的地方请大佬多多指教!!!

相关文章:

【数据结构】时间复杂度和空间复杂度

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 &#x1f6f8;C语言专栏&#xff1a;https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…...

从发现SQL注入到ssh连接

前言&#xff1a; 某天&#xff0c;同事扔了一个教育站点过来&#xff0c;里面的url看起来像有SQL注入。正好最近手痒痒&#xff0c;就直接开始。 一、发现时间盲注和源码 后面发现他发的url是不存在SQL注入的&#xff0c;但是我在其他地方发现了SQL盲注。然后改站点本身也可…...

SAP ABAP

方法一&#xff1a; REPORT ZDCH_09_TEST2. ************************************************************************ * DATEN DEFINITION * *********************************************************************…...

C/C++每日一练(20230219)

目录 1. 用队列实现栈 2. 判断是否能组成三角形 3. 只出现一次的数字 II 附录 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;的异同 1. 栈和队列的相同点 2. 栈和队列的不同点 1. 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;…...

【NestJS】模块

脚手架中&#xff0c;可以执行 nest g mo XXX 创建模块。通过脚手架命令创建的模块&#xff0c;会自动被导入至根模块注册。 注意&#xff1a;项目中的模块都需要导入到根模块中注册一下才能被使用。 共享模块 nest g res boy、nest g res girl 如果希望在 girl 模块中使用 …...

隐私计算头条周刊(2.13-2.19)

开放隐私计算收录于合集#企业动态44个#周刊合辑44个#政策聚焦37个#隐私计算91个#行业研究36个开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播…...

【STM32笔记】低功耗模式配置及避坑汇总

【STM32笔记】低功耗模式配置及配置汇总 文章总结&#xff1a;&#xff08;后续更新以相关文章为准&#xff09; 【STM32笔记】__WFI()&#xff1b;进入不了休眠的可能原因 【STM32笔记】HAL库低功耗模式配置&#xff08;ADC唤醒无法使用、低功耗模式无法烧录解决方案&#x…...

DFN: Dynamic Filter Networks-动态卷积网络

一、论文信息 论文名称&#xff1a;Dynamic Filter Networks 作者团队&#xff1a;NIPS2016 二、动机与创新 卷积层是通过将上一层的特征映射与一组过滤器进行卷积计算输出特征映射&#xff0c;滤波器是卷积层的唯一参数&#xff0c;通常用反向传播算法在训练中学习&#xff…...

面试官:你是怎样理解Fiber的

hello&#xff0c;这里是潇晨&#xff0c;今天我们来聊一聊Fiber。不知道大家面试的时候有没有遇到过和react Fiber相关的问题呢&#xff0c;这一类问题比较开放&#xff0c;但也是考察对react源码理解深度的问题&#xff0c;如果面试高级前端岗&#xff0c;恰巧你平时用的是re…...

【C++的OpenCV】第一课-opencv的介绍和安装(Linux环境下)

第一课-目录一、基本介绍1.1 官网1.2 git源码1.3 介绍二、OpenCV的相关部署工作2.1 Linux平台下部署OpenCV一、基本介绍 1.1 官网 opencv官网 注意&#xff1a;官网为英文版本&#xff0c;可以使用浏览器自带的翻译插件进行翻译&#xff0c;真心不推荐大家去看别人翻译的&am…...

k8s安装tekton,编写task

文章目录一、官方安装二、国内资源安装安装tekton安装dashboard安装CLI三、demo编写task.yaml编写taskRun.yaml使用tkn命令查看参考文章一、官方安装 地址&#xff1a;https://tekton.dev/docs/installation/pipelines/#installing-tekton-pipelines-on-kubernetes 注意&#…...

K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示

K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:数据对比&#xff1a;四、部分代码说明1、接线引脚定义1.1、STC89C52RCS12SD紫外线传感器模块1.2、STM32F103…...

还真不错,今天 Chatgpt 教会我如何开发一款小工具开发(Python 代码实现)

上次使用 Chatgpt 写爬虫&#xff0c;虽然写出来的代码很多需要修改后才能运行&#xff0c;但Chatgpt提供的思路和框架都是没问题。 这次让 Chatgpt 写一写GUI程序&#xff0c;也就是你常看到的桌面图形程序。 由于第一次测试&#xff0c;就来个简单点的&#xff0c;用Python…...

Boom 3D最新版本下载电脑音频增强应用工具

为了更好地感受音乐的魅力&#xff0c;Boom 3D 可以让你对音效进行个性化增强&#xff0c;并集成 3D 环绕立体声效果&#xff0c;可以让你在使用任何耳机时&#xff0c;都拥有纯正、优质的音乐体验。Boom 3D是一款充满神奇魅力的3D环绕音效升级版&#xff0c;BOOM 3D是一个全新…...

redis-如何保证数据库和缓存双写一致性?

前言 数据库和缓存&#xff08;比如&#xff1a;redis&#xff09;双写数据一致性问题&#xff0c;是一个跟开发语言无关的公共问题。尤其在高并发的场景下&#xff0c;这个问题变得更加严重。 我很负责的告诉大家&#xff0c;该问题无论在面试&#xff0c;还是工作中遇到的概率…...

系列二、核心概念运行流程

一、镜像&容器&仓库 1.1、镜像 定义&#xff1a;一个镜像代表着一个软件&#xff0c;例如&#xff1a;mysql镜像、redis镜像、nginx镜像。 特点&#xff1a;只读 1.2、容器 定义&#xff1a;基于某个镜像运行一次就会生成一个程序实例&#xff0c;一个程序实例称之为一…...

恢复 iPhone 和 iPad 数据的 10 种简单工具

它发生了.. 有时您需要从您的手机或平板设备恢复重要数据。 许多人已经开始将重要文件存储在手机上&#xff0c;因为他们几乎可以在任何情况下随时随地轻松访问数据。 从技术上讲&#xff0c;您会在几分之一秒内丢失所有存储的信息、照片、视频、音乐、文档等。因此&#xff…...

经理与员工工资关系-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-6】经理与员工工资案例&#xff08;利用多态实现&#xff09; 欢迎点赞关注收藏 【案例介绍】 案例描述 某公司的人员分为员工和经理两种&#xff0c;但经理也属于员工中的一种&#xff0c;公司的人员都有自己的姓名和地址&#xff0c;员工和经理都有自己的工号、工…...

Micropython ESP32配置与烧录版本

下载ESP32的Micropython固件 官方连接https://www.micropython.org/download/esp32/ 看了下描述&#xff0c;上面的是IDF4.x系列编译&#xff0c;下面是IDF3.x系列编译&#xff0c;我们默认选新的 下载安装CP2102驱动 CP210x USB to UART Bridge VCP Drivers - Silicon Labs…...

java面试题-并发关键字(Synchronized,volatile,final)

Synchronized1.Synchronized可以作用在哪里?Synchronized可以作用在方法、代码块、静态方法和类上。方法public synchronized void method(){//同步代码块 }代码块Object lock new Object(); synchronized(lock){//同步代码块 }静态方法public static synchronized void stat…...

保姆级教程!小程序开发只需3步,Gemini设计 + Trae开发 + 微信开发者工具预览上架

大家好&#xff0c;我是李奔腾。今天我想分享一下&#xff0c;如何通过AI工具快速设计和开发一个万年历小程序。借助 Gemini、Trae 和 微信开发者工具&#xff0c;几分钟时间就能让小程序顺利运行起来&#xff0c;极大地提升开发效率。第一步&#xff1a;使用Gemini设计小程序首…...

constexpr从入门到架构级应用:掌握5大编译期元编程模式,3天重构高性能库

第一章&#xff1a;constexpr的本质与编译期计算范式constexpr 不是简单的“编译期可求值”标记&#xff0c;而是一种强制性的**编译期契约**&#xff1a;它要求被修饰的函数或变量必须在编译阶段完成求值&#xff0c;且所有操作必须处于常量表达式语境中。这一机制推动 C 从运…...

VideCoding - Claude Code 核心工作流 (Core Workflow)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/159921522 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Claude…...

创想三维“闯入”漫展,3D打印赋能Cosplay创作

4月4日&#xff0c;中西部文化巡展漫展现场&#xff0c;天猫“无畏契约主题电竞活动”的电竞装备体验区内&#xff0c;两台创想三维3D打印机——SPARKX i7 Combo和Creality K2 Combo正在高速运转&#xff0c;层层堆叠的PLA耗材逐渐勾勒出精致的Cosplay道具轮廓。周围有许多人围…...

Microsoft Agent Framework + Kimi API 实战:控制台应用跑通单次与多轮 Agent 对话

使用 Kimi 的 OpenAI 兼容接口实现单次对话实现多轮对话&#xff08;基于 Session 保留上下文&#xff09;你把代码复制后&#xff0c;只要配置好 KIMI_API_KEY 就能跑起来。环境准备.NET SDK 9.0Kimi API Key一个控制台项目创建项目并安装依赖&#xff1a;dotnet new console …...

Labview下的ADC参数测试上位机软件:动态与静态参数计算及波形显示

ADC参数测试上位机&#xff0c;通过将ADC的数字量输入上位机&#xff0c;上位机可以计算出动态参数 ENOB SFDR SNR 总谐波失真 以及静态参数 DNL和INL等参数。 其中动态参数的计算以及时序和频域的波形显示均采用matlab模块计算。 使用labview编写隔壁工位的张工最近快被ADC测…...

终极指南:Noria线程域调度机制如何实现5倍性能提升的无锁并发数据流处理

终极指南&#xff1a;Noria线程域调度机制如何实现5倍性能提升的无锁并发数据流处理 【免费下载链接】noria Fast web applications through dynamic, partially-stateful dataflow 项目地址: https://gitcode.com/gh_mirrors/no/noria Noria作为一款专注于动态部分状态…...

Godot做2D游戏,角色总‘穿模’或图层错乱?一篇讲透Y-Sorting与碰撞体设置

Godot做2D游戏&#xff0c;角色总‘穿模’或图层错乱&#xff1f;一篇讲透Y-Sorting与碰撞体设置 在开发2D俯视角或斜视角游戏时&#xff0c;角色与场景元素的交互问题常常让开发者头疼。想象这样一个场景&#xff1a;你的主角在森林中穿行&#xff0c;却总是莫名其妙地"漂…...

CsvHelper与Entity Framework集成:数据库导出的终极指南

CsvHelper与Entity Framework集成&#xff1a;数据库导出的终极指南 【免费下载链接】CsvHelper Library to help reading and writing CSV files 项目地址: https://gitcode.com/gh_mirrors/cs/CsvHelper 在当今数据驱动的世界中&#xff0c;CSV文件处理是每个开发者都…...

Whisper JAX时间戳功能:为语音内容添加精准时间标记的终极指南

Whisper JAX时间戳功能&#xff1a;为语音内容添加精准时间标记的终极指南 【免费下载链接】whisper-jax JAX implementation of OpenAIs Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax Whisper JAX是OpenAI …...