| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Java学习苦旅(八)——不复杂的复杂度 -> 正文阅读 |
|
[数据结构与算法]Java学习苦旅(八)——不复杂的复杂度 |
本篇博客将详细讲解时间复杂度和空间复杂度。 时间复杂度什么是时间复杂度在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。 大O的渐进表示法在实际过程中,我们计算时间复杂度时,并不一定要计算精确的执行次数,而只需要大概执行次数,所以我们使用 大O的渐进表示法。 大O符号:是用于描述函数渐进行为的数学符号。 使用规则
对于有些算法的时间复杂度存在三种情况:
在实际过程中,一般关注的都是最坏情况。例如数组中查找数据的时间复杂的为O(N)。 示例示例一
fun原本的时间复杂度为2*N+10,由大O的渐进表示法可知,fun的时间复杂度为O(N) 示例二
由大O的渐进表示法可知,func的时间复杂度为O(M+N) 示例三
func1原本的时间复杂度为O(100),由大O的渐进表示法可知,func1的时间复杂度为O(1) 示例四
由大O的渐进表示法可知,bubbleSort在最好情况下的时间复杂度为O(N),在最坏情况下的时间复杂度为O(N2) 示例五
递归的时间复杂度 = 递归的次数 * 每次递归执行的次数 所以factorial的时间复杂度为O(N) 示例六
fibonacci原本的时间复杂度为O(20 + 21 + 22 + … + 2(N-1)),由大O的渐进表示法可知,fibonacci的时间复杂度为O(2N) 空间复杂度空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用 大O渐进表示法 。 示例示例一
空间复杂度计算的是额外的空间。例如bubbleSort函数中,array是数组,是必要的空间,而sorted是额外的空间,因此bubbleSort的空间复杂度为O(1)。 示例二
fibonacci中动态开辟了N个空间,因此空间复杂度为O(N)。
factorial中递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间,因此factorial的空间复杂度为O(N)。 结尾本篇博客到此结束 上一篇博客:Java学习苦旅(七)——我有对象啦!!! 下一篇博客预告:Java学习苦旅(九)——原来顺序表可以这么简单呀! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 1:43:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |