【数据结构篇】~复杂度

标题【数据结构篇】~复杂度

前言

C语言已经学完了,不知道大家的基础都打得怎么样了?

无论怎么说大家还是要保持持续学习的状态,来迎接接下来的挑战!

现在进入数据结构的学习了,希望大家还是和之前一样积极学习新知识,同时还要巩固C的部分,一起加油吧!

复杂度

相信大家都听过算法吧,那衡量算法的好坏就是用复杂度来看的

复杂度分为:时间复杂度和空间复杂度,时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。
讲复杂度之前这里有一个题 ,大家可以先尝试做一下看看你能想出几种方法?
初入复杂度第一题

1·时间复杂度

算法的时间复杂度是一个函数式T(N) ,这里的T(n)其实和数学中的函数差不多,它的单位是(ms)毫秒,这个T(N)函数式计算了程序的执行次数,那么执行次数和运行时间就是等比正相关。
如图:

大家可以自己尝试一下在Release模式下时间是多少,图中"C++"一次时间复杂度就为T(1),那它一共++了10000000次那这段代码的时间复杂度就是T(10000000)吗?
大O的渐进表示法​
大O符号(Big O notation):是用于描述函数渐进行为的数学符号 ​
💡 推导大O阶规则​
1. 时间复杂度函数式T(N)中,只保留最高阶项,去掉那些低阶项,因为当N不断变大时,
低阶项对结果影响越来越小,当N无穷大时,就可以忽略不计了。
2. 如果最高阶项存在且不是1,则去除这个项目的常数系数,因为当N不断变大,这个系数
对结果影响越来越小,当N无穷大时,就可以忽略不计了。
3. T(N)中如果没有N相关的项目,只有常数项,用常数1取代所有加法常数。

所以上面那段代码的时间复杂度是O(1)!!!

下来有几个例子:
1·冒泡排序的时间复杂度为O(n^2

2.指数的时间复杂度

3.递归的时间复杂度

💡 总结
有些算法的时间复杂度存在最好、平均和最坏情况。
最坏情况:任意输入规模的最大运行次数(上界) ​
平均情况:任意输入规模的期望运行次数 ​
最好情况:任意输入规模的最小运行次数(下界) ​
大O的渐进表示法在实际中一般情况关注的是算法的上界,也就是最坏运行情况。

2·空间复杂度

空间复杂度的计算方法和时间复杂度大差不差。

创建一个变量和调用一次函数O(n)就为O(1);

还是有两个例子,如图:
1.冒泡排序

2.递归

下面是复杂度的对照表

3.初入复杂度第一题解析

1.第一种解法(不满足时间复杂度)( 时间复杂度 ​O(n^2)​)

2.第二种解法 (空间复杂度 ​O(n))(用空间换时间)

第二种:先创建一个新数组把要轮转的部分放入新数组,然后遍历数组。

3.第三种解法(空间复杂度 ​O(1))

相关推荐
普通网友22 分钟前
共识算法实现:从工作量证明到权益证明的演进
算法·区块链·共识算法
ldmd2841 小时前
地图生成算法(噪声篇-Perlin,Simplex,Value noise)
算法·go·地图生成
国科安芯2 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
小陈phd2 小时前
集成检索介绍
算法
小poop2 小时前
轮转数组:从暴力到最优,一题掌握算法复杂度分析
数据结构·算法·leetcode
樱桃读报僵尸3 小时前
说说 LLMRouter,Agent 执行过程中怎么动态的选择 LLM
算法
gis开发之家3 小时前
《Vue3 从入门到大神40篇》Vue3 源码详解(十):diff 算法全解析 —— 为什么 Vue3 比 Vue2 更快?
javascript·算法·typescript·前端框架·vue3·vue3源码
进击的丸子4 小时前
虹软人脸服务器SDK-C++语言Demo实操指南
后端·算法
SilentSlot4 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
兰令水4 小时前
hot100【acm版】【2026.7.25/26打卡-java版本】
java·算法·排序算法