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

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;
}
相关推荐
今后1236 小时前
【数据结构】带哨兵位双向循环链表
数据结构·链表
Lee嘉图6 小时前
数据结构——队列(Java)
数据结构
梁辰兴8 小时前
数据结构:查找
数据结构·算法·查找·顺序查找·折半查找·分块查找
midsummer_woo9 小时前
#数据结构----2.1线性表
数据结构
ShineWinsu9 小时前
对于单链表相关经典算法题:206. 反转链表及876. 链表的中间结点的解析
java·c语言·数据结构·学习·算法·链表·力扣
再睡一夏就好9 小时前
【C++闯关笔记】STL:list 的学习和使用
c语言·数据结构·c++·笔记·算法·学习笔记
Ka1Yan9 小时前
MySQL索引优化
开发语言·数据结构·数据库·mysql·算法
阿维的博客日记10 小时前
LeetCode 209 - 长度最小的子数组算法详解
数据结构·算法·leetcode
梁辰兴18 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序