Java 数据结构与算法系列精讲之时间复杂度与空间复杂度

 更新时间:2022年02月18日 10:40:16   作者:我是小白呀  
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间,这篇文章主要给大家介绍了关于Java时间复杂度、空间复杂度的相关资料,需要的朋友可以参考下

概述

从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.

算法的衡量标准

当我们需要衡量一个算法的的优越性, 通常会使用时间复杂度 (Time Complexity) 和空间复杂度 (Space Complexity) 来衡量.

时间复杂度

时间复杂度 (Time Complexity) 通常用 O(n) 表示, 用来描述一个算法运行的时间.

时间复杂度 & 空间复杂度计算规则:

  • 用常数 1 代替运行中的所有加减, lim n->∞cn = ∞
  • 只保留最高项, lim n->∞ n^2 + an + b = lim n->∞ n^2

最优时间复杂度

最优时间复杂度指的是在最优的情况下算法需要的运行时间.

平均时间复杂度

平均时间复杂度是指所有可能的输入实例以等概率出现的情况下, 算法需要的运行时间.

最坏时间复杂度

最坏时间复杂度指的是在最坏的情况下算法需要的运行时间. 一般使用最坏时间复杂度作为时间复杂度.

O(1)

没有循环结构, 只有普通加减的代码时间复杂度为 O(1).

例如:

int i = 1;
int j = 2;
int k = i + j;  // 1+2=3

O(n)

循环 n 次的代码的时间复杂度为 O(n).

例子:

int sum = 0;
for (int i = 1; i < n; i++) {
    sum += i;
}

O(n^2)

两层循环嵌套的时间复杂度为 O(n^2). 如下例子, 需要进行 2n^2 次计算

例子:

int sum = 0;

for (int i = 1; i < n; i++) {
    for (int j = 0; j < n; j++) {
        sum += i;
        sum += j;
    }
}

O(logN)

2^n = N, 所以会循环 logN 次.

例子:

int sum = 0;

for (int i = 0; i < n; i++) {
    sum += i;
    i *= 2;
}

空间复杂度

空间复杂度 (Space Complexity) 定义为该算法所耗费的存储空间.

O(1)

如果算法执行所需要的临时空间不会随着变量的大小而变化, 那么空间复杂度就为 O(1).

例子:

int i = 1;
int j = 2;
int k = i + j;  // 1+2=3

O(n)

长度为 n 的数组占用空间为 O(n).

例子:

int[] array = new int[n]

到此这篇关于Java 数据结构与算法系列精讲之时间复杂度与空间复杂度的文章就介绍到这了,更多相关Java 时间复杂度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 查找替换pdf中的指定文本

    java 查找替换pdf中的指定文本

    这篇文章主要介绍了java 如何查找替换pdf中的指定文本,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • Java C++题解leetcode1620网络信号最好的坐标

    Java C++题解leetcode1620网络信号最好的坐标

    这篇文章主要为大家介绍了Java C++题解leetcode1620网络信号最好的坐标示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 微信小程序+后端(java)实现开发

    微信小程序+后端(java)实现开发

    这篇文章主要介绍了微信小程序+后端(java)实现开发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • JAVA异常处理机制之throws/throw使用情况

    JAVA异常处理机制之throws/throw使用情况

    这篇文章主要介绍了JAVA异常处理机制之throws/throw使用情况的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Mysql字段和java实体类属性类型匹配方式

    Mysql字段和java实体类属性类型匹配方式

    这篇文章主要介绍了Mysql字段和java实体类属性类型匹配方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Springboot中的三个基本架构

    Springboot中的三个基本架构

    这篇文章主要介绍了Springboot中的三个基本架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot通过@Scheduled实现定时任务及单线程运行问题解决

    SpringBoot通过@Scheduled实现定时任务及单线程运行问题解决

    Scheduled定时任务是Spring boot自身提供的功能,所以不需要引入Maven依赖包,下面这篇文章主要给大家介绍了关于SpringBoot通过@Scheduled实现定时任务以及问题解决的相关资料,需要的朋友可以参考下
    2023-02-02
  • Java加权负载均衡策略实现过程解析

    Java加权负载均衡策略实现过程解析

    这篇文章主要介绍了Java加权负载均衡策略实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java内存溢出的几个区域总结(注意避坑!)

    Java内存溢出的几个区域总结(注意避坑!)

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存,下面这篇文章主要给大家介绍了关于Java内存溢出的几个区域,总结出来给大家提醒注意避坑,需要的朋友可以参考下
    2022-11-11
  • 基于SpringBoot实现IP黑白名单的详细步骤

    基于SpringBoot实现IP黑白名单的详细步骤

    IP黑白名单是网络安全管理中常见的策略工具,用于控制网络访问权限,根据业务场景的不同,其应用范围广泛,比如比较容易被盗刷的短信接口、文件接口,都需要添加IP黑白名单加以限制,所以本文给大家介绍了基于SpringBoot实现IP黑白名单的详细步骤,需要的朋友可以参考下
    2024-01-01

最新评论