[ 数据结构 ] 时间和空间复杂度

1.算法效率

算法效率分析分为两种 : ①时间效率, ②空间效率

时间效率即为 时间复杂度 , 时间复杂度主要衡量一个算法的运行速度

空间效率即为 空间复杂度 , 空间复杂度主要衡量一个算法所需要的额外空间

2.时间复杂度

2.1 时间复杂度的概念

定义 : 再计算机科学中 , 算法的时间复杂度 是一个数学函数 , 它定量描述了 该算法的运行时间

用于衡量算法执行时间 随输入规模增长的变化趋势

2.2 大O的渐进表示法

计算func基本操作执行了多少次?

java 复制代码
    public static void func1(int N){
        int count = 0;
        for(int i = 0;i<N;i++){
            for(int j = 0;j<N;j++){
                count++;
            }
        }
        for(int k = 0;k<N*2;k++){
            count++;
        }
        int m = 10;
        while((m--)>0){
            count++;
        }
        System.out.println(count);
    }

func1执行基本操作次数:

F(N) = N^2 + 2*N + 10

实际中我们计算时间复杂度时 , 我们其实不一定要计算精确的执行次数 , 而只需要大概执行次数 , 那么我们这里使用大O的渐进表示法

**O :**用于描述函数渐进行为的数学符号

2.3 推导大O阶方法

  • 用常数 1 取代运行时间中的所有加法常数
  • 再修改后的函数中 , 只保留最高阶项
  • 如果最高阶存在且不是1, 则取出这一项的系数 , 结果就是大O阶

例如: func1使用大O简静法表示后 , func1的时间复杂度为 O(N^2)

通过用大O的渐进表示法 去掉了对结果影响不大的项 , 简洁明了的表示出了执行次数

另外 有些算法还存在 时间复杂度 最好 , 最坏 , 平均的情况

最坏情况 : 任意输入规模的最大运行次数 (上界)

平均情况 : 任意输入规模的期望运行次数

最好情况 : 任意输入规模的最小运行次数 (下界)

例如: 一个长度为N的数组中寻找一个数据 X

最好情况 : 一次找到 最坏情况 : N次找到 平均情况 : N/2次找到

在实际中一般关注的是算法的 最坏运行情况 , 所以数组中搜索数据的时间复杂度为O(N)

3.空间复杂度

定义 : 是对一个算法在运行过程中临时占用空间大小的度量

用于评估算法对内存资源的消耗情况

空间复杂度计算的是 变量的个数

O(1) 常数空间

java 复制代码
int sum(int a, int b) {
    int result = a + b; // 仅占用固定空间
    return result;
}
相关推荐
im_AMBER27 分钟前
Leetcode 145 回文数 | 加一
数据结构·算法·leetcode
HLC++28 分钟前
数据结构--树
c语言·开发语言·数据结构
楼田莉子38 分钟前
C++数据结构:基数树
开发语言·数据结构·c++·学习
weixin_649555671 小时前
C语言程序结构第四版(何钦铭、颜晖)第十章函数与程序结构之递归实现顺序输出整数
c语言·数据结构·算法
进击的荆棘1 小时前
优选算法——链表
数据结构·算法·链表·stl
lcj25112 小时前
蓝桥杯C++:数据结构
数据结构·c++·算法
北顾笙9802 小时前
day05-数据结构力扣
数据结构·leetcode·哈希算法
1104.北光c°2 小时前
Leetcode206.反转链表 迭代+递归 【hot100算法个人笔记】【java写法】
java·数据结构·笔记·算法·leetcode·链表·反转链表
j_xxx404_2 小时前
蓝桥杯基础--递归
数据结构·c++·算法·蓝桥杯·排序算法
森林里的程序猿猿2 小时前
导致内存泄漏的ThreadLocal详解
java·jvm·数据结构