【数据结构篇】~复杂度

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

前言

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))

相关推荐
奔跑吧 android40 分钟前
【linux kernel 常用数据结构和设计模式】【数据结构 2】【通过一个案例属性list、hlist、rbtree、xarray数据结构使用】
linux·数据结构·list·kernel·rbtree·hlist·xarray
汉克老师42 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
Mr_Xuhhh2 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
默默无名的大学生2 小时前
数据结构—顺序表
数据结构·windows
c++bug2 小时前
六级第一关——下楼梯
算法
PAK向日葵2 小时前
【C/C++】面试官:手写一个memmove,要求性能尽可能高
c语言·c++·面试
Morri32 小时前
[Java恶补day53] 45. 跳跃游戏Ⅱ
java·算法·leetcode
林木辛3 小时前
LeetCode热题 15.三数之和(双指针)
算法·leetcode·双指针
AndrewHZ3 小时前
【3D算法技术】blender中,在曲面上如何进行贴图?
算法·3d·blender·贴图·三维建模·三维重建·pcg
Jared_devin3 小时前
二叉树算法题—— [蓝桥杯 2019 省 AB] 完全二叉树的权值
数据结构·c++·算法·职场和发展·蓝桥杯