【数据结构篇】~复杂度

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

前言

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

相关推荐
晓蛋5 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊5 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿5 天前
重载、重写(覆盖)、重定义区别
c语言
猎头南楼5 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
phltxy5 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
m0_547486665 天前
《数据结构教程》全套 PPT课件2026
数据结构
phltxy5 天前
C 语言中的数据存储:从类型到二进制位
c语言
旖旎夜光5 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控