[数据结构]算法复杂度详解

news2025/1/6 18:54:12

文章目录

  • 一、引言
    • 1、想象数据结构与算法的奇妙世界
    • 2、算法复杂度的轻松解读
    • 3、数据结构与算法的温馨寄语
  • 二、轻松掌握复杂度基础
    • 1、时间复杂度:算法速度的衡量尺
    • 2、空间复杂度:算法占地的衡量尺
    • 3、常见的复杂度
  • 三、复杂度的计算
    • 1、时间复杂度计算
    • 2、空间复杂度计算
    • 3、最好、最坏、平均复杂度
  • 四、C语言中的复杂度分析实例
    • 1、求和函数
    • 2、冒泡排序
    • 3、矩阵乘法
  • 五、扩展阅读

一、引言

1、想象数据结构与算法的奇妙世界

想象一下,数据结构就像书架,让数据变得有序。算法则是聪明的管理员,能快速找到你需要的数据。简单来说,算法就是帮我们把数据变成有用信息的聪明方法。

2、算法复杂度的轻松解读

算法复杂度就像问管理员找书快不快,需要多大地方放书。时间复杂度是找书速度,空间复杂度是书架大小。在编程中,这就像优化工作流程,让代码更快,占用资源更少。

3、数据结构与算法的温馨寄语

无论你是编程新手还是资深程序员,数据结构和算法都是你的好朋友。它们是计算机科学的基础,也是你写出高效、可靠代码的秘密武器。掌握它们,就像给编程加速,让代码更流畅、更高效。它们也是你展现才华的舞台,在笔试和面试中证明你的能力。


二、轻松掌握复杂度基础

1、时间复杂度:算法速度的衡量尺

时间复杂度,就是估算算法跑多快的一个工具。它不看具体时间,而是看算法里基本操作做了多少次,和数据量有啥关系。就像看厨师做菜,不看具体几分钟,而是看食材多少来估时间。

2、空间复杂度:算法占地的衡量尺

空间复杂度,是看算法运行时占多少地方的一个工具。它不算具体的bytes,而是算用了多少变量,就像看房间里放了多少箱子。主要关注的是算法临时申请的空间,编译时定好的栈空间不算。

3、常见的复杂度

  • 常数复杂度 O(1):算法执行时间恒定,不受数据量大小影响,效率极高。
  • 对数复杂度 O(logN):随着数据量翻倍,算法执行时间仅轻微增加,效率下降不明显。
  • 线性复杂度 O(N):算法执行时间与数据量成正比,数据量增大时,效率线性下降。
  • 线性对数复杂度 O(NlogN):效率略低于线性复杂度,但优于平方复杂度。数据量翻倍时,效率下降速度介于线性与平方之间。
  • 平方复杂度 O(N^2):算法执行时间随数据量平方增长,数据量翻倍时,效率显著下降。
  • 立方复杂度 O(N^3):比平方复杂度更慢,数据量翻倍时,效率下降速度更快。
  • 指数复杂度 O(2^N):数据量增加时,算法执行时间呈爆炸性增长,数据量翻倍导致效率急剧下降,对于大数据集几乎不可行。

文章配图


三、复杂度的计算

1、时间复杂度计算

时间复杂度就是计算算法完成任务时,基本操作执行的次数如何随数据量变化。比如,遍历一个列表的算法,其基本操作(如访问元素)执行次数与列表长度N成正比,所以时间复杂度是O(N)。

2、空间复杂度计算

空间复杂度衡量的是算法运行时需要占用的存储空间大小。简单说,就是算法运行时 “用了多少地方” 。比如,使用一个固定大小的变量,空间复杂度为O(1);若使用了一个与数据量N相等的数组,则空间复杂度为O(N)。

3、最好、最坏、平均复杂度

  • 最好复杂度:算法在 “最顺利” 时的运行时间。
  • 最坏复杂度:算法在 “最糟糕” 时的运行时间。
  • 平均复杂度:算法在不同输入下运行时间的 “平均值” 。

四、C语言中的复杂度分析实例

1、求和函数

int sum(int arr[], int n) 
{
    int res = 0;
    for (int i = 0; i < n; i++) 
    {
        res += arr[i];
    }
    return res;
}

时间复杂度O(N),因为循环n次,每次循环执行一次加法操作
空间复杂度O(1),因为额外的变量只有res和i

2、冒泡排序

void bubbleSort(int arr[], int n) 
{
    for (int i = 0; i < n-1; i++) 
    {
        for (int j = 0; j < n-i-1; j++) 
        {
            if (arr[j] > arr[j+1]) 
            {
                //交换arr[j]和arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

时间复杂度O(N^2),因为有两层嵌套的循环,每层循环最多执行n次
空间复杂度O(1),因为额外的变量只有i, j和temp

3、矩阵乘法

void matrixMultiplication(int A[][2], int B[][2], int C[][2], int n) 
{
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            C[i][j] = 0;
            for (int k = 0; k < n; k++) 
            {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}

时间复杂度O(N^3),因为有三层嵌套的循环,每层循环最多执行n次
空间复杂度O(N^2),因为需要存储结果矩阵C


五、扩展阅读

  • 学好算法对一个程序员来说是必须的吗?如果是,至少应该学到哪种程度?
  • 学数据结构和算法一定要多刷题,多练习
  • 维基百科 - 数据结构
  • 维基百科 - 算法

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

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

相关文章

联想键盘鼠标套装Liteon SK-8861 银丝带键盘、鼠标对码方法

知识点分析: 最近在IdeaCentre B520e、IdeaCentre A720等机型&#xff0c;标配2.4G无线键鼠套装&#xff1a;Liteon SK-8861。由三部分组成&#xff1a;USB接收器、鼠标、键盘。鼠标、键盘同时和USB接收器连接&#xff0c;未开箱时USB接收器包装在鼠标内。标配的键鼠套装不需要…

linux 内核代码学习(九)--Linux内核启动和文件系统

一个比较顺手的学习平台可以达到事半功倍的效果&#xff0c;这里使用的平台环境主要是利用了主机和从机间的文件共享&#xff0c;以及从机自带的编译环境可以比较顺利的编译busybox1.0版本&#xff0c;方便进行内核和文件系统的测试了学习。 主机环境&#xff1a;vmware7.0win1…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…

Qt 模型视图(三):视图类QAbstractItemView

文章目录 Qt 模型视图(三):视图类QAbstractItemView1.基本概念1.1.使用现有视图1.2.使用模型1.3.使用模型的多个视图1.4.在视图之间共享选择 Qt 模型视图(三):视图类QAbstractItemView ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视…

高级I/O知识分享【5种IO模型 || select || poll】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;前文 2&a…

无人机助力智慧农田除草新模式,基于YOLOv10全系列【n/s/m/b/l/x】参数模型开发构建无人机航拍场景下的农田杂草检测识别系统

科技发展到今天&#xff0c;无人机喷洒药物已经不是一件新鲜事情了&#xff0c;在很多高危的工作领域中&#xff0c;比如高空电力设备除冰&#xff0c;电力设备部件传送更换等等&#xff0c;无人机都可以扮演非常出色的作用&#xff0c;前面回到老家一段时间&#xff0c;最近正…

算法题总结(一)——二分查找专题

二分查找 我们二分查找的本质就是每次能够通过中间值来进行分割&#xff0c;能够比较判断&#xff0c;查找到或者接近需要的数据&#xff0c;然后把一部分的数据丢弃掉。 原题 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &…

LabVIEW提高开发效率技巧----使用快捷键

在LabVIEW的开发过程中&#xff0c;熟练掌握和运用快捷键可以极大地提升工作效率&#xff0c;减少重复性操作所花费的时间。快捷键不仅可以加快编程速度&#xff0c;还能让开发者更加专注于逻辑实现和功能设计。细问问将详细介绍LabVIEW中的常用快捷键&#xff0c;特别是强大的…

101012分页属性

4k页面 P&#xff08;有效位&#xff09;&#xff1a;1有效&#xff0c;0无效 R/W&#xff08;读写位&#xff09;&#xff1a;1可读可写&#xff0c;0可读 U/S&#xff08;权限位&#xff09;&#xff1a;1(User)&#xff0c;0(System) A&#xff08;物理页访问位&#xff…

医学数据分析实训 项目五 聚类分析--蛋白质消费结构分析--车辆驾驶行为指标

文章目录 项目五&#xff1a;聚类分析实践目的实践平台实践内容任务一&#xff1a;蛋白质消费结构分析步骤 任务一&#xff1a;蛋白质消费结构分析数据预处理&#xff08;四&#xff09;模型建立及优化KMeans 任务二 车辆驾驶行为&#xff08;四&#xff09;模型建立及优化 项目…

并发带来的对象一致性问题

多线程操作带来数据不一致情况分析&#xff0c;简单demo。 public class Object_IS {private Student_Object so new Student_Object("张三", 123);public static void main(String[] args) throws InterruptedException {Object_IS os new Object_IS();os.test1(…

论文笔记:交替单模态适应的多模态表征学习

整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation&#xff09;论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比&#xff0c;MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…

输电线路缺陷检测数据集(绝缘子自爆,破损,闪络,鸟巢,防震锤脱落五种缺陷)

输电线路数据集&#xff08;绝缘子自爆&#xff0c;破损&#xff0c;闪络&#xff0c;鸟巢&#xff0c;防震锤脱落五种缺陷&#xff09;包括&#xff1a; 1.绝缘子自爆 2.绝缘子破损绝、闪络 3.鸟巢 4.防震锤脱落 数据增强后的数量 对应数量&#xff1a;1828&#xff0c;1467&a…

类加载器详细介绍

类加载器我们要聊一个神秘而又重要的角色——Java类加载器。这家伙&#xff0c;就像是个超级英雄&#xff0c;总是在关键时刻挺身而出&#xff0c;为我们的Java程序提供强大的支持。我会尽量用简单易懂的方式来介绍它。 一 、类加载器介绍 1、类加载器是什么&#xff1f; 想象…

高频率快响应信号隔离变送器

隔离变送器相册: 隔离变送器图片----捷晟达科技​​​​ 隔离变送器---深圳捷晟达科技 隔离变送器---捷晟达科技 高频率快响应信号隔离变送器 定义&#xff1a; 高频率是指隔离变送器从输入到输出采样时的时间&#xff0c;该产品响应频率从10KHz~100KHz&#xff0c;产品精度高&…

【CSS】选择器(基础选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" type"text/css" h…

箭头检测系统源码分享

箭头检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

子查询优化

MySQL学习大纲 我的数据库学习大纲 1、什么是子查询&#xff1a; 1.MySQL 从 4.1 版本开始支持子查询&#xff0c;使用子查询可以进行 SELECT 语句的嵌套查询&#xff0c;即一个 SELECT 查询的结果作为另一个 SELECT 语句的条件。子查询可以一次性完成很多逻辑上需要多个步骤才…

二分+构造,CF 1063C - Dwarves, Hats and Extrasensory Abilities

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1063C - Dwarves, Hats and Extrasensory Abilities 二、解题报告 1、思路…

AtCoder ABC370 A-D题解

比赛链接:ABC370 AT 上 400 分寄。 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){int L,R;cin>>L>>R;if(LR)cout<<"Invalid"<<endl;else if(L1)cout<<"YES"<<endl;elsecout<…