【数据结构篇】~复杂度

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

前言

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

相关推荐
算AI9 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
我不会编程55510 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
似水এ᭄往昔11 小时前
【C语言】文件操作
c语言·开发语言
owde11 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头11 小时前
分享宝藏之List转Markdown
数据结构·list
hyshhhh11 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
蒙奇D索大12 小时前
【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
c语言·数据结构·考研·改行学it
A旧城以西12 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
杉之12 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓12 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法