Java实现-数据结构 2.时间和空间复杂度

.如何衡量一个算法的好坏:时间复杂度和空间复杂度

算法效率分为时间效率和空间效率,时间效率称为时间复杂度,空间效率称为空间复杂度

时间复杂度

算法的时间复杂度是一个数学函数,它描述了算法的运行时间,一个算法执行耗费的时间,和这个算法当中语句的执行次数有关,语句执行次数越多,运行时间就多,成正比,算法中的基本操作执行次数,为算法的时间复杂度

大O的渐进表示法

找语句执行次数多的语句===找循环

语句执行次数:n^2+2n+10;

用N表示法表示时,只保留最高次项

时间复杂度T(n^2);

推到O阶方法

1.用常数1取代运行时间中的所有加法常数

2.再修改后的执行次数中,只保留最高阶项

3.如果最高项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是O阶

时间复杂度 分为最好情况、最坏情况、平均情况

我们一般所说的时间复杂度是最坏情况下的时间复杂度

常见时间复杂度例题

语句执行次数:1+2n+1+M+1;

时间复杂度:O(n);

语句执行次数:1+m+n+1;

时间复杂度:O(m+n);

语句执行次数:102;

时间复杂度:O(1);

语句执行次数:array.length+array.length*(array.length-1)*3+2;

时间复杂度:O(n^2);

冒泡排序法是n^2;

二分查找:n/2^x=1,n=2^x,x=log2n;

时间复杂度:O(log2N);

递归的时间复杂度如何运算:递归的时间复杂度=递归的次数*每次递归后执行的次数

时间复杂度:O(n);

计算时间复杂度不要只记得循环次数,要关注具体的每一个语句,进行判断

F(n)=F(n-1)+F(n-2);

斐波那契递归数列的时间复杂度:

最坏情况下:遍历所有节点

O(2^n);

空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量,也使用大O渐进表示法

无论是空间复杂度还是时间复杂度,我们都应该结合代码的实现去做空间复杂度和时间复杂度的计算,一些常用的复杂度大小:O(logN) < O(N) < O(N*logN) <O(n^2);

相关推荐
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
鱼跃鹰飞9 小时前
Leetcode1891:割绳子
数据结构·算法
无限进步_11 小时前
【C语言&数据结构】对称二叉树:镜像世界的递归探索
c语言·开发语言·数据结构·c++·git·算法·visual studio
玖剹11 小时前
队列+宽搜(bfs)
数据结构·c++·算法·leetcode·宽度优先
C++ 老炮儿的技术栈13 小时前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
萧瑟其中~13 小时前
二分算法模版——基础二分查找,左边界查找与右边界查找(Leetcode的二分查找、在排序数组中查找元素的第一个位置和最后一个位置)
数据结构·算法·leetcode
码农小韩14 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
想做后端的小C15 小时前
408 数据结构:数据结构三要素——逻辑结构、物理(存储)结构和运算操作
数据结构
栈与堆15 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust