| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数据结构与算法】时间复杂度和空间复杂度 -> 正文阅读 |
|
[数据结构与算法]【数据结构与算法】时间复杂度和空间复杂度 |
时间复杂度和空间复杂度的认知🌎 一. 如何衡量一个算法的好坏
🌙 二. 算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。 时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度 🪐 三. 时间复杂度??3.1 时间复杂度的概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的运行时间。 一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。 一个算法所花费的时间与其中语句的***执行次数***成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。 🌪3.2 大O的渐进表示法如下文代码:
Func1 执行的基本操作次数 :F(N) = N^2 + N*2 + 10 大O符号(Big O notation):是用于描述函数渐进行为的数学符号。 🌈3.3 推导大O阶方法
使用大O的渐进表示法以后,Func1的时间复杂度为:O(N^2) 另外有些算法的时间复杂度存在最好、平均和最坏情况:
例如:在一个长度为N数组中搜索一个数据x
在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N) ??3.4 常见时间复杂度计算举例例一:for循环加while循环自增
在for循环里执行的基本操作次数为2N,在while循环里执行了10次,根据我们的推导大O阶方法可得最后的时间复杂度为:O(N) 例二:for循环分开自增两次
在第一个for循环里执行的基本操作次数为M,在第二个for循环里执行的基本操作次数为N,根据我们的推导大O阶方法可得最后的时间复杂度为:O(M+N) 例三:for循环自增一次
根据我们的推导大O阶方法可得时间复杂度为:O(1),当然,如果在for循环里不是明确的数字,而是N的话,那么时间复杂度就为:O(N)。N是一个统称:问题的规模 例四:冒泡排序
最坏情况:第一个大的for循环里执行的基本操作次数为N,在第二个for循环里执行的基本操作次数为N-1,所以合起来就是N*(N-1) = N^2 - N,根据我们的推导大O阶方法可得时间复杂度为:O(N^2) 假设这个代码没有进行任何的优化,那么它的时间复杂度必然是O(N^2) 例五:二分查找
最坏情况:二分查找最坏的情况就是要找的数据在最左边或者最右边,此处就不详讲二分查找了,二分查找的规律直接罗列出来:2^(找代码的次数 - 1) = 数据个数。所以我们可以得出找代码的次数 = log以2为底的n次方 + 1,根据我们的推导大O阶方法可得时间复杂度为log以2为底的n次方:O(logn) – >此处默认为以2为底 例六:阶乘计算
递归的时间复杂度 = 递归的次数 * 每次递归之后执行的次数,这里递归的次数为N,递归后执行的次数为1次,所以此处的时间复杂度为:O(N) 例七:斐波那契数列
递归的时间复杂度 = 递归的次数 * 每次递归之后执行的次数 如图我们可以看到递归的次数是2^0 + 2^1 + 2^2 + 2^3 + …+2^(n - 1) 是一个等比数列,所以我们算得递归的次数为2,所以最终根据递归时间复杂度公式和推导大O阶方法可得最后的时间复杂度为:O(2^N)。
?? 四.空间复杂度空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。 例一:冒泡排序
其中在bubbleSort函数中只传了一个array数组,所以空间复杂度为:O(1) 例二:斐波那契第N项
数组存的是前N项,在函数里也求第N项的空间复杂度,所以空间复杂度为:O(N) 例三:阶乘
递归N次,要开辟N个空间,所以空间复杂度为:O(N) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:35:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |