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

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;
}
相关推荐
星释24 分钟前
Rust 练习册 67:自定义集合与数据结构实现
数据结构·算法·rust
2301_807997382 小时前
代码随想录-day47
数据结构·c++·算法·leetcode
别动哪条鱼2 小时前
FFmpeg 核心数据结构关系图
数据结构·ffmpeg
小龙报2 小时前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio
万物挽挽2 小时前
数据结构概述
数据结构
wangwangmoon_light3 小时前
1.10 数据结构之图
数据结构
星轨初途4 小时前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
Chance_to_win6 小时前
数据结构之排序
数据结构
小年糕是糕手6 小时前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
kupeThinkPoem7 小时前
跳表有哪些算法?
数据结构·算法