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

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;
}
相关推荐
码达拉2 小时前
顺序表的总结及模拟实现
数据结构·c++
紫洋葱hh3 小时前
【数据结构】二叉搜索树
数据结构
·白小白4 小时前
【数据结构】——栈(Stack)的原理与实现
c语言·开发语言·数据结构
类球状5 小时前
数据结构(一)顺序表
数据结构
Rain_is_bad6 小时前
初识c语言————排序方法
c语言·开发语言·数据结构
一支闲人7 小时前
C语言相关简单数据结构:顺序表
c语言·数据结构·基础知识·适用新手小白
霖008 小时前
FPGA的PS基础1
数据结构·人工智能·windows·git·算法·fpga开发
数据智能老司机11 小时前
图算法趣味学——桥和割点
数据结构·算法·云计算
John.Lewis12 小时前
数据结构初阶(11)排序的概念与运用
c语言·数据结构·排序算法