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

news2024/12/23 17:15:46

目录

  • 前言
  • 一、算法效率
    • 1. 算法效率的定义
  • 二、时间复杂度
    • 1. 时间复杂度的定义
    • 2. 时间复杂度的计算
  • 三、空间复杂度
    • 1. 空间复杂度的定义
    • 2. 空间复杂度的计算
  • 四、时间复杂度曲线图
  • 结尾

在这里插入图片描述

前言

在学习C语言的时候,大多数的小伙伴们并不会对算法的效率了解,也许算法也是一个陌生的领域,当进入了数据结构这个模块,就应该对算法的效率做一个清晰的认识。但是算法的效率是什么呢?这里就引出来时间复杂度与空间复杂度的概念了。

一、算法效率

1. 算法效率的定义

算法效率指的是算法解决问题所需的时间和空间资源。通常用时间复杂度和空间复杂度来衡量一个算法的效率。
对于初学者来说,这里看到复杂度会被认为是代码的的多少,但是这是错误的。


这里举个例子:(这里递归函数看着代码很少,但是这里的时间复杂度很大)

int Fac(int n)
{
	if (n <= 2)
		return Fac(n - 1) + Fac(n - 2);
	else
		return 1;
}

二、时间复杂度

1. 时间复杂度的定义

时间复杂度是算法在执行时所需的时间资源与问题规模之间的关系。通常以最坏情况下的运行时间为衡量标准,用大O符号来表示。

2. 时间复杂度的计算

计算时间复杂度可以通过分析算法中基本操作的执行次数来完成,然后根据这些操作次数的增长趋势得出算法的时间复杂度。
计算时间复杂度的原则是:根据算法中基本操作重复执行的次数来估算算法的时间复杂度,忽略常数项和低阶项,保留最高阶项

推导大O阶方法:
1、若执行次数都是常数,则用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,常数和低阶项全部去除,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

三、空间复杂度

1. 空间复杂度的定义

空间复杂度是算法在执行时所需的内存资源与问题规模之间的关系。同样以最坏情况下所需的额外空间为衡量标准,使用大O符号表示。

2. 空间复杂度的计算

计算空间复杂度可以通过分析算法中使用的临时变量、数据结构等占用的空间大小来完成,然后根据这些空间大小的增长趋势得出算法的空间复杂度。
计算空间复杂度的原则是:根据算法中所需存储空间的大小来估算算法的空间复杂度,–忽略常数项和低阶项,保留最高阶项

推导大O阶方法:
1、若运行时间都是常数,则用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,常数和低阶项全部去除,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

四、时间复杂度曲线图

这是在电脑计算机中绘画出的图,或许有人觉得这些曲线会差不多,但是当我将这个图片缩小后就会发现区别了。
在这里插入图片描述


这里缩小后发现三个相对分区:(这里用时间复杂度表示)

  1. 无限接近于 y轴 :二次方以上的幂函数( O (n ^ 2) )和大于一为底的指数函数
    (O(n ^ k)),这里还包括一个阶乘(O(n!))(由于增长速度太快,电脑上绘画不出来,图片上就将其省略)。
  2. x轴y轴 之间:一次函数 (O(n)) 和 线性对数 ( O(n * log(n))
  3. 无线接近与 x轴:常数( O(1)) 和 对数 ( O(log(n)))

结论
上述三种中,若时间复杂度为第二条,那么这个程序只能算一般。尽量不要写出第一种,在实际开发中几乎不会使用这样时间复杂度的程序,因为太难维护。相比之下第三种写出来的程序是最好的。
在这里插入图片描述

结尾

如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!🌹🌹
如果这篇文章对你有用的话,希望大家给一个三连!!🌹🌹
在这里插入图片描述

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

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

相关文章

视频采集到录制 - 音频采集到降噪

继续上篇的视频采集到录制 视频采集相对来说还是算正常&#xff0c;如果资源够用&#xff0c;使用第三方库也是种解决办法 但音频采集网上资料相对也少&#xff0c;走了一遍&#xff0c;也发现存在很多坑 1. 音频采集 一般来说&#xff0c;采用MIC采集&#xff0c;采集出来的格…

内存泄露的循环引用问题

内存泄漏一直是很多大型系统故障的根源&#xff0c;也是一个面试热点。那么在编程语言层面已经提供了内存回收机制&#xff0c;为什么还会产生内存泄漏呢&#xff1f; 这是因为应用的内存管理一直处于一个和应用程序执行并发的状态&#xff0c;如果应用程序申请内存的速度&…

希尔伯特旅馆里,住着AI的某种真相

“无穷”和“无穷1”&#xff0c;哪个更大&#xff1f; 已经吸收了不知道多少数据的AI模型&#xff0c;和比他多学习一条数据的模型&#xff0c;哪个更智能&#xff1f; 想聊聊这个问题&#xff0c;出于一个偶然的机会。很早之前我在测试ChatGPT的时候&#xff0c;突然想问他个…

简单工厂、工厂方法、抽象工厂模式-这仨货的区别

要想明白这三玩意的区别就需要知道这三玩意的优缺点&#xff1b; 之所以有三种工厂模式&#xff0c;就说明它们各有所长&#xff0c;能解决不同场景的问题&#xff1b; 一、简单工厂模式 UML图 代码 public class MobileFactory {public static Mobile getMobile(String brand)…

【Linux】线程概述、创建线程、终止线程

目录 线程概述1、创建线程函数解析代码举例 2、终止线程函数解析代码举例 橙色 线程概述 与进程类似&#xff0c;线程是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。 进程是 CPU 分配资源的最小单位&#xff0c;线程是操作系统调度执行的最小单位。…

回归预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计学习总结参考资料 预测效果 基本介绍 MATLAB实现…

【笔记整理】轻量级神经网络 MobileNetV3

【笔记整理】轻量级神经网络 MobileNetV3 文章目录 【笔记整理】轻量级神经网络 MobileNetV31、深度可分离卷积2、翻转残差块和线性瓶颈结构3、h-swish 函数和 SE 模块4、网络结构搜索 近年来关于 CNN 的研究在飞速发展&#xff0c;CNN 模型在目标检测、图像分割等领域都取得了…

力扣sql中等篇练习(二十九)

力扣sql中等篇练习(二十九) 1 计算每个销售人员的影响力 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT s1.salesperson_id,s1.name,IFNULL(t.total…

毕业季到底是去大厂还是去小公司

(点击即可收听) 毕业季到底是去大厂还是去小公司 相信很多人在选择大小公司的时候,会比较痛苦,外面的人想进去,里面的人想出来&#xff0c;至于选择大厂还是小公司 这是因人而异的,不同的阶段都可以有不同的选择 进大厂不一定就是对的,进小公司也不一定就是错的,学习东西,增长经…

股票量化分析工具QTYX使用攻略——涨停个股挖掘热门板块(更新2.6.5)

搭建自己的量化系统 如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。 行情不等人&#xff01;边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量化系统——QTYX。 QTY…

软考A计划-试题模拟含答案解析-卷九

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

JetBrains的多数据库管理和SQL工具DataGrip 2023版本在Win10系统的下载与安装配置教程

目录 前言一、DataGrip 安装二、使用配置总结 前言 DataGrip是一款多数据库管理和SQL工具&#xff0c;适用于不同类型的数据库。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地管理数据库、编写SQL查询和执行数据操作。 DataGrip的主要特点&#xff1a; ——…

这里有3个Tips,也许可以帮你躲过ChatGPT大规模封号 | AIGC实践

据说&#xff0c;从昨天开始&#xff0c;ChatGPT又双叒叕开始大规模封号&#xff0c;很多注册用户收到这样一则消息&#xff1a; 大意是说&#xff1a;OpenAI 发现了你的 ChatGPT 账号存在可疑活动&#xff0c;为了保障平台安全&#xff0c;已自动退款并取消你的 ChatGPT Plus …

驱动开发:内核解析内存四级页表

当今操作系统普遍采用64位架构&#xff0c;CPU最大寻址能力虽然达到了64位&#xff0c;但其实仅仅只是用到了48位进行寻址&#xff0c;其内存管理采用了9-9-9-9-12的分页模式&#xff0c;9-9-9-9-12分页表示物理地址拥有四级页表&#xff0c;微软将这四级依次命名为PXE、PPE、P…

七年老程序员的三四月总结:三十岁、准备婚礼、三次分享

你好&#xff0c;我是 shixin&#xff0c;一名工作七年的安卓开发。 每两个月我会做一次总结&#xff0c;记下这段时间里有意义的事和值得反复看的内容&#xff0c;为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一&#xff0c;这两个月经历…

【数据湖仓架构】数据湖和仓库:Databricks 和 Snowflake

是时候将数据分析迁移到云端了。我们比较了 Databricks 和 Snowflake&#xff0c;以评估基于数据湖和基于数据仓库的解决方案之间的差异。 在这篇文章中&#xff0c;我们将介绍基于数据仓库和基于数据湖的云大数据解决方案之间的区别。我们通过比较多种云环境中可用的两种流行技…

HTML+CSS+JavaScript制作弹幕效果

全屏弹幕 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>弹幕效果</title><style>/* 设置弹幕的样式 */.bullet {position: absolute;font-size: 20px;color: white;text-shadow: 1px 1px 1px black;white-s…

用Python让小朋友的手绘图跳起来(附源码)

大家好&#xff0c;我是小F&#xff5e; 今天给大家介绍一个非常有趣的项目&#xff0c;基于AI识别&#xff0c;制作儿童手绘图舞蹈图。 只需几分钟&#xff0c;就能自动生成儿童手绘人物或类人角色&#xff08;即具有双臂、两条腿等的角色&#xff09;的动画&#xff0c;而且生…

波奇学C++:模板和STL

什么是模板&#xff1f;为什么我们需要模板&#xff1f; 先假设一个场景&#xff0c;我们要编写一个函数交换a,b两个数的值 void swap(int& a,int& b) {int cmpa;ab;ba; } swap函数可以帮我们交换两个int型的值&#xff0c;那如果要交换的类型是float&#xff0c;do…

基础篇010.1 STM32驱动RC522 RFID模块之一:基础知识

目录 1. RFID概述 1.1 RFID工作原理 1.2 RFID分类 1.3 RFID模块 1.4 RFID卡片 1.5 IC卡和ID卡介绍 1.6 IC卡和ID的区分 2. Mifare卡结构原理 2.1 Mifare卡概述 2.2 Mifare非接触式 IC 卡性能简介&#xff08;M1&#xff09; 2.2.1 Mifare S50与Mifare S70 2.2.2 S5…