Java—集合框架、时间和空间复杂度

一、集合框架

Java集合框架(Java Collection Framework),又称为容器(container),是定义在 java.util 包下的一组接口(interfaces)和其实现类(classes)

其主要表现为将多个元素(element)置于一个单元中,用于对这些元素进行快速、便捷的存储(store)、检索(retrieve)、管理(manipulate),即俗称的增删查改(CRUD)

类和接口总览

二、时间和空间复杂度

1、概念:

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

2、时间复杂度

算法中的基本操作的执行次数,为算法的时间复杂度

一般用大O的渐进表示法来表示时间复杂度

大O符号(Big O notation):用来描述函数渐进行为的数学符号

推导大O阶的方法

  • 1、用常数1取代运行时间中的所有加法常数
  • 2、在修改后的运行次数函数中,只保留最高阶项
  • 3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数,从而得到大O阶

示例1:

// 计算bubbleSort的时间复杂度?
void bubbleSort(int[] array) {
    for (int end = array.length; end > 0; end--) {
        boolean sorted = true;
        for (int i = 1; i < end; i++) {
            if (array[i - 1] > array[i]) {
                Swap(array, i - 1, i);
                sorted = false;
            }
        }
 
        if (sorted == true) {
            break;
        }
    }
 }

解析:


示例2: 

// 计算binarySearch的时间复杂度?
int binarySearch(int[] array, int value) {
    int begin = 0;
    int end = array.length - 1;
    while (begin <= end) {
        int mid = begin + ((end-begin) / 2);
        if (array[mid] < value)
            begin = mid + 1;
        else if (array[mid] > value)
            end = mid - 1;
        else
            return mid;
    }
 
    return -1;
 }

解析:


示例3:

// 计算阶乘递归factorial的时间复杂度?
long factorial(int N) {
    return N < 2 ? N : factorial(N-1) * N;
 }

 解析:不普适的计算方式:递归的时间复杂度 = 递归的次数 * 每次递归执行的次数

该代码基本操作递归了N次,时间复杂度为O(N)


示例4:

// 计算斐波那契递归fibonacci的时间复杂度?
int fibonacci(int N) {
    return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
 }

解析:

 3、空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,也采用大O渐进表示法

示例1:

    // 计算bubbleSort的空间复杂度?
    void bubbleSort(int[] array) {
        for (int end = array.length; end > 0; end--) {
            boolean sorted = true;
            for (int i = 1; i < end; i++) {
                if (array[i - 1] > array[i]) {
                    Swap(array, i - 1, i);
                    sorted = false;
                }
            }

            if (sorted == true) {
                break;
            }
        }
    }

解析:

使用了 end、sorted、i 三个常数个额外空间,所以空间复杂度为O(1)


示例2:

    //计算fibonacci的空间复杂度
    long[] fibonacci(int n) {
        long[] fibArry = new long[n+1];
        fibArry[0] = 0;
        fibArry[1] = 1;
        for (int i = 2; i <= n; i++) {
            fibArry[i] = fibArry[i-1] + fibArry[i-2];
        }
        return fibArry;
    }

解析:

要求n项的斐波那契数,把他们都存放到额外开辟的数组空间中,动态开辟了N个空间,空间复杂度为O(N)


示例3:

// 计算阶乘递归Factorial的空间复杂度?
long factorial(int N) {
     return N < 2 ? N : factorial(N-1)*N;
 }

解析:

看递归了多少次,递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间,空间复杂度为O(N)

复杂度大小关系:

O(1) < O(logN) < O(N) < O(N*logN) < O(N^2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681505.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

纷享销客BI典型场景案例解析

本章以具体案例来说明纷享销客一体化BI智能分析平台为企业在实际使用过程中带来的价值。 1)场景一&#xff1a;销售经理想要在周会上关注各销售人员的客户及订单情况&#xff0c;并在每周一上午9点可以把上周的整体情况周期性的将报表推送给相关销售人员。 具体图表展示样式及…

人事管理系统有哪些优势?5大人事管理系统大盘点!

本人研究企业数字化转型10余年&#xff0c;为企业软件选型、数字化提供咨询服务&#xff01;目前重点研究低代码数字化转型玩法&#xff0c;力争为各家企业探索出一条更具性价比的数字化方式。 人事管理系统有哪些优势&#xff1f;如何选择&#xff1f;又该怎样部署&#xff1…

UI设计公司-蓝蓝设计-交通行业ui设计解决方案

来百度APP畅享高清图片 这是北京兰亭妙微科技有限公司&#xff08;简称蓝蓝设计&#xff09;在交通行业的一些ui设计经验&#xff0c;我们建立了UI设计分享群&#xff0c;每天会分享国内外的一些优秀设计&#xff0c;如果有兴趣的话&#xff0c;可以进入一起成长学习&#xff0…

springcloudalibaba项目注册nacos1.4.2,在nacos上修改配置项不生效问题

背景 之前的项目启动正常,后来发现springcloudalibaba的各版本匹配不正确,于是对项目中的springboot、springcloud、springcloudalibaba版本进行匹配升级,nacos1.4.2匹配的springboot、springcloud、springcloudalibaba版本与我的项目中的版本比较接近,于是我便重新安装了…

智能视频监控平台LntonCVS视频汇聚共享平台智慧楼宇应用方案

随着城市经济的迅速发展&#xff0c;大中型城市的写字楼数量不断增加。在像香港、台北、上海、北京等大城市&#xff0c;写字楼的安保成本相当高。为了降低这一成本&#xff0c;越来越多的物业公司开始采用技术手段。写字楼安防监控系统便是其中之一&#xff0c;它利用安全防范…

django 旅游服务系统-计算机毕业设计源码88939

摘 要 旅游服务系统采用采用django框架、python语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、轮播图&#xff08;轮播图管理&#xff09;、公告信息管理&#xff08;公告信息&#xff09;、资源管理&…

Informer

I n f o r m e r Informer Informer 摘要&#xff1a; 长序列时间序列的预测 i n f o r m e r informer informer优点&#xff1a; P r o b s p a r e Probspare Probspare自关注机制&#xff0c;在时间复杂度和内存使用方面达到 O ( N l o g N ) O(NlogN) O(NlogN),在序列依…

变量位置不同会死机?郭天祥老师视频的遗留问题分析答案

在郭天祥老师视频里有一个问题分享&#xff0c;是EXMC初始化里的一个变量定义和初始化位置不同会导致程序死机&#xff0c;最终定位到程序是进入hardfault死机&#xff0c;但暂时没有后续分析了&#xff0c;这里我们来继续分析一下。 死机的程序是这样的&#xff1a; 这段代码…

springboot集成uid-gengrator生成分布式id

一、简介 uid-generator是由百度技术部开发,GitHub地址 UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器 Snowflake算法 Snowflake算法描述&#xff1a;指定机器 & 同一时刻 & 某一并发序列&#xff0c;是唯一的。据此可生成一个64 bits的唯一ID&#x…

SD6210A 低噪声可调电荷泵DC/DC转换器芯片IC

一般描述 该SD6210A是一种低噪声&#xff0c;恒定频率(1.20MHz)开关电容电压倍增器。它产生一个调节输出电压从2.8V到5V的输入与高达250mA的输出电流。低外部零件数(一个飞行电容器和两个小旁路电容的VIN和VOUT)使SD6210A非常适合小型&#xff0c;电池供电的应用新的电荷…

元宇宙数字藏品交易所,未来发展的大趋势

随着科技的飞速进步&#xff0c;元宇宙以其独特的魅力为数字世界绘制了一幅前所未有的宏伟蓝图。在这一宏大的背景下&#xff0c;数字藏品交易所作为连接虚拟与现实的桥梁&#xff0c;正以其卓越的优势&#xff0c;引领着数字藏品市场迈向新的高度。 首先&#xff0c;元宇宙为…

HBuilderX编写APP一、获取token

一、新建项目 二、从onenet获取key.js 1、下载之后的压缩包&#xff0c;解压2、关键就是找到key.js 3、将这个key.js复制到刚才的目录下面去 4、这个key.js文件就是生成token的代码 5、只要调用createCommonToken(params)这个函数&#xff0c;就可以实现生成token了 其中onload…

如何将OnePlus手机上的文件轻松传输到Mac(3种简便方法)

拥有一台OnePlus手机&#xff0c;意味着你拥有了一台性能强劲、功能丰富的Android设备。但当手机存储空间告急&#xff0c;或者你想要更好地管理和备份个人数据时&#xff0c;将文件传输到Mac电脑上无疑是一个明智的选择。本文将为你介绍三种简单有效的方法&#xff0c;帮助你轻…

十大排序-冒泡排序

算法原理如下&#xff1a; 给出一组数据&#xff1b;比较相邻的元素。如果第一个比第二个大&#xff0c;互换两个值。对每一组相邻元素同样方式比较&#xff0c;从开始的第一组到结束的最后一组。最后的元素会是最大数。除了排列好的最大数&#xff0c;针对所有元素重复以上步…

十、结果处理器

这一章和上一章参数处理器类似 首先是在XML解析的时候&#xff0c;顺便解析resultMap和resultType&#xff0c;一般更多的可能用的是resultType&#xff0c;为了实现统一&#xff0c;使用 resultType 的情况下&#xff0c;Mybatis也会创建一个resultMap实体类映射。 使用的时…

负载均衡算法深度探析:F5技术在高效流量管理中的应用

传统的单一服务器模式下&#xff0c;随着用户请求量的增加&#xff0c;单个服务器可能会承受过重的压力&#xff0c;导致响应速度下降甚至系统崩溃&#xff0c;负载均衡技术应运而生。它广泛应用于各种软硬件系统中&#xff0c;将网络流量以某种算法合理分配给各个节点&#xf…

【wiki知识库】05.分类管理实现--前端Vue模块

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f30f;前端部分的改造 2.1 新增一个tool.ts 2.2 新增admin-categoty.vue 2.3 添加新的路由规则 2.4 添加the-welcome.vue 2.5 修改HomeView.vue 三、❗注意 一、&…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十六)- 微服务(6)

目录 10. Docker 10.1 Docker基本操作 10.1.1 镜像相关命令 10.1.2 容器相关命令 10.2 数据卷命令 10.2.1 常用命令 : 10.2.2 挂载数据卷 10. Docker 10.1 Docker基本操作 10.1.1 镜像相关命令 docker --help 查看docker帮助文档 docker images --help 查看docker ima…

人工智能任务5-高级算法工程师需要学习哪些课程与掌握哪些能力

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能的任务5-高级算法工程师需要学习哪些课程&#xff0c;需要掌握哪些能力。高级算法工程师需要掌握的算法模型有&#xff1a;人脸检测模型MTCNN&#xff0c;人脸识别方法Siamese network、center loss、softm…

你中了机房建设管理的这几个误区吗?

机房建设及管理中的六大误区 作为机房建设及运维管理人员&#xff0c;您是否也常因为以下问题面临各种“头痛”瞬间 —— 由于缺少支持材料以及分析文件&#xff0c;常常迫不得已成为了各类“网络问题”的最终“背锅侠”&#xff0c;不仅要面对来自领导和客户的压力&#xff0…