代码复杂度分析

news2025/1/11 12:38:45

1.复杂度分析原则

1.1 最大循环原则

只看高阶部分

public class SumNum {
    public static void main(String[] args) {
        System.out.println(sum2(4));
    }
    /**
     * 1-n 的累加
     * @param n
     * @return
     */
    public static int sum1(int n){
        int sum = 0;// 执行1次
        for (int i=0;i<n;i++){//这是三个代码 分别执行1 n n 次
            sum+=n;//执行n次
        }
        return sum;
        //这边算一下这个这串代码累计执行的时间 T(n) = (3n+2)*Timer(单位时间)
        //这边的时间复杂度   O(3n+2)   O(n)
    }

    public static int sum2(int n){
        int sum = 0;// 执行1次
        for (int i=0;i<n;i++){//这是三个代码 分别执行1 n n 次
            for (int j=0;j<n;j++){//分别执行n n² n²
                sum+=i*j;//执行n²
            }
        }
        return sum;
        //这边算一下这个这串代码累计执行的时间 T(n) = (3n²+3n+2)*Timer(单位时间)
        //时间复杂度   O(3n²+3n+2) O(n²)
    }
}

如果代码里面有n 和 n² 那么就只看高阶

1.2 加法原则

 public static int sum3(int[] n,int [] m){
        int sum = 0;
        for (int i : n){
            sum+=i;
        }

        for (int i : m){
            sum+=i;
        }
        return sum;
    }
    //这边的复杂度就是适用加法原则
    //时间复杂度O(m+n) ,但是依然是O(n)的一种

1.3 乘法原则

两个n 相互调用的话,这串代码就是O(n²)

 public static int sum1(int n){
        int sum = 0;// 执行1次
        for (int i=0;i<n;i++){//这是三个代码 分别执行1 n n 次
            sum+=sum5(i);//执行n次
        }
        return sum;
        //这边算一下这个这串代码累计执行的时间 T(n) = (3n+2)*Timer(单位时间)
        //这边的时间复杂度   O(3n+2)   O(n)
    }

    public static int sum5(int n){
        int sum = 0;// 执行1次
        for (int i=0;i<n;i++){//这是三个代码 分别执行1 n n 次
            sum+=n;//执行n次
        }
        return sum;
        //这边算一下这个这串代码累计执行的时间 T(n) = (3n+2)*Timer(单位时间)
        //这边的时间复杂度   O(3n+2)   O(n)
    }

2.常见复杂度

常数O(1)
线性O(2)
对数O(log n)
线性对数O(n log n)

k次方

O(nᴷ)
指数O(2ᴺ)
阶乘O(n!)

x 轴为要处理的数据量,y是花费时间。可以看出来阶乘的写法是花费时间最高的(所以不一定非要删库对吧😊)

2.1 O(1)

常数复杂度其实就是和数据量没多大关系举个例子,虽然这个集合数据量增大,但是我的时间却和数据量没多大关系。

public void handlerData(List datas){
        System.out.println(datas.size());
    }

2.2 O(n)

这个是我们平常工作中做常见的复杂度

public void handlerData2(List datas){
       for(Object item : datas){
           System.out.println(item.toString());
       }
    }

2.3 O(log n)

简单点说就是执行次数肯定比n 少

public void handlerData3(List datas){
        for(int i=0;i<datas.size();i++){
            System.out.println(datas.get(i*2));
        }
        //这边会执行多少次肯定不是 n次
        //2ᴷ = n;
        //n = log₂ᴷ
    }

2.4 O(n log n)

这边就不举例子,简单点说就是一个n 复杂度方法里面调用了 log n 复杂度的方法,那么两个方法的复杂度就是线性对数复杂度了。

2.5 最好/最坏/平均复杂度

这边就解释一下这个三个名词的意思是啥就行,不需要深入理解。

假设我要从一个数组中找一个数字,我肯定以循环该数组来查询这个字段,那么我运气好的话第一个数字就是要的数字,那么这种情况就是最好复杂度、最坏就是没查到,或者是最后一个数字。

平均就是所有数字的复杂度的合除以所有情况的次数。没什么用,大概知道什么意思就行!

3.空间复杂度

上面讲述的是时间复杂度,就是数据量越大所耗费的时间。那么空间复杂度就是所消耗的内存空间和数据量的关系。

一般工作中比较常见的就是O(1)、O(n)、O(n²)

1-1 完

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻量应用云服务器如何部署SpringBoot项目(jar包形式)?

这篇文章将介绍如何在腾讯云的轻量应用服务器上部署我们的java项目&#xff0c;本次演示的是java项目是使用springboot开发的单体项目&#xff0c;项目开发完成之后需要打包成jar&#xff0c;然后上传至云服务器&#xff0c;安装运行数据库文件之后&#xff0c;使用java -jar 的…

企业经营欺诈评分模型的开发与划定

近两周&#xff0c;番茄风控上线的课程中&#xff0c;涉及的财税票贷产品课程干货满满。 今天我们跟大家讲讲在模型中最干货的内容&#xff0c;也就是在税票贷产品中最干货的欺诈模型的开发与使用&#xff0c;本文会基于税票中票&#xff08;也就是发票&#xff09;相关的数据进…

双缝函数的编程

摘要 在傅立叶光学中&#xff0c;光学元件通常可以建模为传递函数&#xff0c;该函数对输入场的振幅和相位进行调制。VirtualLab Fusion提供了可编程功能&#xff0c;用户可以在其中定义元件的函数体现。 此示例提供了具有自定义缝隙宽度的双缝函数的代码段。 狭缝在y方向上是无…

CUDA 编程基础

1. GPU与CPU并行计算框架2. CUDA编程模型3 CUDA程序1. GPU与CPU并行计算框架 GPU并不是一个独立运行的计算平台&#xff0c;而需要与CPU协同工作&#xff0c;可以看成是CPU的协处理器&#xff0c;因此当我们在说GPU并行计算时&#xff0c;其实是指的基于CPUGPU的异构计算架构。…

学习日记(XML 文件解析、检索、工厂设计模式、装饰设计模式)

文章目录学习日记&#xff08;XML 文件解析、检索、工厂设计模式、装饰设计模式&#xff09;一、XML 概述1. 概念2. XML 的创建及语法规则3. XML 文档约束方式二、XML 文件的解析技术1. 使用 Dom4j 解析 XML 文件2. XML 解析案例三、XML 文件的数据检索技术&#xff1a;XPath四…

Nacos 注册中心、配置文件中心的常用配置(springcloud)

Nacos Discovery Starter 更多的配置项 1.服务端地址 spring.cloud.nacos.discovery.server-addr 无 Nacos Server 启动监听的 ip 地址和端口2.服务名 spring.cloud.nacos.discovery.s ervice ${spring.application.name} 给当前的服务命名3.服务分组spring.cloud.nacos.disc…

Nuttx系统学习笔记(三)——使用Nuttx操作STM32F429外设

在上一篇&#xff0c;我们已经学会了如何将Nuttx进行烧录&#xff0c;以及学会了如何部署这个操作系统&#xff0c;接下来我们就要使用这个操作系统来实现我们对嵌入式设备的控制&#xff0c;当然也是从点灯开始的。这个基于Posix架构的操作系统使用起来是跟FreeRTOS那些操作系…

【微信开发第五章】SpringBoot实现微信分享

前言 在进行微信公众号业务开发的时候&#xff0c;有些时候需要用到微信分享&#xff0c;以卡片的形式分享出去&#xff0c;例如订单信息&#xff0c;用户信息。该篇文章每一步都有记录&#xff0c;力争理解的同时各位小伙伴也能够实现功能 效果图如下&#xff1a; 文章目录前…

centos 7.9 部署 harbor 镜像仓库实践

centos 7.9 harbor 部署镜像仓库 文章目录centos 7.9 harbor 部署镜像仓库1. 安装 docker1.1 配置 docker2. 安装 docker-compose3. 下载 harbor4. 定制配置文件 harbor.yml5. 配置证书5.1 生成证书颁发机构证书5.2 生成服务器证书5.3 向 Harbor 和 Docker 提供证书6. 部署 har…

【软件测试】一线大厂的测试开发基本技能,我不再想庸庸碌碌......

目录&#xff1a;导读一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结能在一线大厂工作是大多数人的目标&#xff0c;不仅薪酬高&#xf…

[Git] 系列四Push Pull —— Git 远程仓库和高级操作

[Git] 系列四Push & Pull —— Git 远程仓库和高级操作 Author: Xin Pan Date: 2022.11.06 git fetch git fetch 完成了仅有的但是很重要的两步: 从远程仓库下载本地仓库中缺失的提交记录更新远程分支指针(如 o/main) git fetch 并不会改变你本地仓库的状态。它不会更…

Github 注册

Github 注册 https://github.com/ 1. 简介 初始 Github 注册 填写注册信息 一开始注册github发现了这个问题&#xff0c;多试几次。或者换个浏览器&#xff0c;或者对octocaptcha做一个域名映射。 140.82.112.4 http://octocaptcha.com填写验证码 当注册成功后&#xff0…

【小专题】正交试验法设计测试用例

正交试验法设计测试用例 正交试验法设计工具&#xff1a; 1、正交设计助手 2、AllPairs 3、python&#xff08;本质是使用AllPairs&#xff09; 先看一个案例&#xff1a; 假设一个web系统&#xff0c;需要做兼容性测试&#xff0c;该系统兼容不同操作系统、数据库和web服…

【ESP8266与ESP12E 电机拓展板握手】

【ESP8266与ESP12E 电机拓展板握手】 1. 前言2. 材料3. 工作原理3.1 板载功能3.2 引脚接口定义图3.3 产品技术规格4. 方案4.1 普通马达接线图4.2 42步进电机接线图5. 相关代码5.1 直流电机的管理代码5.2 步进电机管理代码6. 应用7. 来源1. 前言 ESP12E Motor Shield 是一块扩展…

代码改成多线程,竟有 这些问题

文章目录CPU 使用率飙高事务问题导致服务挂掉CPU 使用率飙高 每条数据都有些业务逻辑&#xff0c;如果单线程导入所有的数据&#xff0c;导入效率会非常低。于是改成了多线程导入。 如果 excel 中有大量的数据&#xff0c;很可能会出现 CPU 使用率飙高的问题。 我们都知道&am…

公众号免费查题系统

公众号免费查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击…

8.for循环

循环控制语句 1.for循环 for (表达式1&#xff1b;表达式2&#xff1b;表达式3) { //复合语句&#xff0c;循环体 } 第一次进入循环的时候执行表达式1&#xff0c;表达式1只执行一次 表达式2是循环的条件&#xff0c;只有表达式2为真了&#xff0c;才执行循环体&#xff0c;也…

Android 应用模块的构建

Google文档说明&#xff1a;https://developer.android.com/studio/build?hlzh-cn Android 构建系统会编译应用资源和源代码&#xff0c;然后将它们打包成 APK 或 Android App Bundle 文件&#xff0c;供您测试、部署、签名和分发。Android Studio 使用高级构建工具包 Gradle …

Python学习----面向对象

面向对象思想就不说了&#xff0c;和java一样。这是为了自己能够一直看教程不走神做得笔记。 类的定义和赋初值 成员变量和成员方法&#xff0c;含义和java一样。 成员变量的申明没啥好记得 需要关注得是成员方法&#xff0c;在定义成员方法得时候&#xff0c;需要传入self关…

设计模式学习笔记 - 组合模式

设计模式学习笔记 - 组合模式一、学校院系展示问题二、传统方案解决学校院系展示问题三、组合模式介绍1、基本介绍2、组合模式原理四、组合模式解决学校院系展示问题五、组合模式在JDK集合的源码分析六、组合模式的注意事项和细节一、学校院系展示问题 展示一个学校院系结构&am…