【2023】java数据结构-时间、空间复杂度分析

1、算法效率

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间

2、时间复杂度:

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

  • 大O表示法:不具体表示代码的真正的执行时间,而是表示代码执行时间随着数据规模的增长的变化趋势
  • 复杂度分享就是要捋清楚代码的执行次数和数据规模n之间的关系;
  1. O(1):只要代码的执行时间不随着n的增大而增大,这样的代码复杂度都是O(1)。 如:

    java 复制代码
    public void test01(int n){
    	int i = 0;
    	int sum =  0;
    	for(;1<100;i++){
    		sum = sum + i;
    	}
    }
  2. O(log n):变量i的值以对数的方式增长;随着i的值越来越大,i也就离n越近。如:

    java 复制代码
    public void test01(int n){
        int i=1;
        while (i<n){
            i = i * 2;
        }
    }

由以上分析可知,代码的时间复杂度表示为O(log n)

  1. O(n):T(n)与代码的执行次数成正比(代码的执行时间越长,时间复杂度越高)

    java 复制代码
    public void test01(int n){
    	int i = 0;
    	int sum =  0;
    	for(;i<n;i++){
    		sum = sum + i;
    	}
    }

3、空间复杂度:

空间复杂度(Space Complexity)是算法在执行过程中所需的额外空间的量度。它用于评估算法对内存资源的使用情况,包括算法使用的额外内存空间的大小和增长趋势。

  1. O(1):当空间复杂度为 O(1) 时,表示算法使用的额外空间是固定的,与输入规模无关。
java 复制代码
    public void printNumbers(int n) {
    for (int i = 1; i <= n; i++) {
        System.out.println(i);
    }
}
  1. O(n):当空间复杂度为 O(n) 时,表示算法使用的额外空间与输入规模成正比。
java 复制代码
public int[] copyArray(int[] nums) {
    int[] copy = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
        copy[i] = nums[i];
    }
    return copy;
}
  1. O(n^2) : 当空间复杂度为 O(n^2) 时,表示算法使用的额外空间与输入规模的平方成正比。
java 复制代码
public int[] copyArray(int[] nums) {
    int[] copy = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
        copy[i] = nums[i];
    }
    return copy;
}
相关推荐
y = xⁿ2 分钟前
【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树
后端·算法·深度优先
不想看见4045 分钟前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy8 分钟前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
mygljx9 分钟前
spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter
java·人工智能·spring
jaysee-sjc17 分钟前
【练习十二】Java实现年会红包雨小游戏
java·开发语言·算法·游戏·intellij-idea
indexsunny29 分钟前
互联网大厂Java求职面试实战:核心技术与业务场景解析
java·spring boot·redis·微服务·kafka·互联网大厂·面试技巧
小涛不学习33 分钟前
Java 后端核心框架面试题(Spring / SpringMVC / MyBatis / MyBatis-Plus)
java·spring·mybatis
im_AMBER33 分钟前
Leetcode 141 最长公共前缀 | 罗马数字转整数
算法·leetcode
程序猿大波34 分钟前
基于java,SpringBoot和Vue餐饮公司食堂管理系统设计
java·vue.js·spring boot
似水明俊德37 分钟前
01-C#.Net-泛型-学习笔记
java·笔记·学习·c#·.net