当前位置: 首页 > news >正文

【Java数据结构】时间和空间复杂度

       本章开始将进入数据结构的知识,时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,。

时间复杂度

算法中执行的次数决定了时间复杂度。

在计算执行次数时,只需要计算大概的次数,即称为大O的渐进表示法,以下是大O的渐进表示法计算执行次数时要注意的点: 

  1. 用常数1取代运行时间中所有加法常数;例:5 -》O(1)
  2. 运行次数是一个函数时,只保留最高阶项;例:n^2+2n+1 -》 O(n^2)
  3. 如果最高阶项存在且不是1,就去除项的常数;例:2n -》O(n)

举几个例子更能了解时间复杂度:

第一个例子:

	public static void func1(int n) {int count = 0;for(int i = 0; i < 2*n; i++) {count++;}int m = 10;while(m-->0) {count++;}System.out.println(count);}

上面这个例子的时间复杂度是O(n);为什么呢?我现在就来说说:

       首先执行第一个循环for循环,它的时间复杂度是2n;然后就是进入第二个循环whlie循环,它的复杂度是10;然后这个程序就走完了,总的复杂度是2n+10。那为什么是n呢? 就是因为大O的渐进表示法,常数次数为1,所以就是2n+1,但是1与2n相比没有什么区别,那就是2n,表示法中表明系数可去除,所以综合下来就为n啦!!!

第二个例子:冒泡排序法 

	public static void bubbleSort(int[] array) {for(int i = 0; i < array.length; i++) {for(int j = 0; j < array.length - 1; j++) {if(array[j] > array[j+1]) {int temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}}

       在冒泡排序中,有最好的情况也有最坏的情况,最好是这个排序以及符合排序,那只需要走一遍就可以即复杂度是O(N)最坏情况就是内外层循环都要执行以次,那就是n*(n-1)次,根据大O渐进表示法复杂度为O(N^2)

第三个例子:二分查找

	public static int binarySearch(int[]array, int search) {int begin = 0;int end = array.length;while(begin < end) {int mid = begin +(end -begin)/2;if (array[mid] < search)begin = mid + 1;else if (array[mid] > search)end = mid - 1;else return mid;}return -1;}

二分查找的时间复杂度是O(log N);怎么计算的呢 ?

       假设该数组有N个元素,第一次查找元素个数减去一半(N/2),第二次又减去一半(N/2^2),第k次时就只剩一个元素了那么就有N/2^k = 1,就得到log N(2不写,默认为2)。

第四个例子:阶乘递归

	public long factorial(int N) {return N < 2 ? N : factorial(N - 1) * N;}

       递归的复杂度 = 递归的次数 * 每次递归执行的次数,大概意思就是递归一次套一次套了多少次那就是递归得次数,套一次中里面执行的次数就是每次地柜执行的次数。所以上面例子的复杂度是N*1次,即O(2^N)。

        斐波那契数列的复杂度是O(2^N),它是一个一分二,二分四,四分八等等将其累加起来就是2^N次。

常见的复杂度:O(1) < O (log N) < O(N * log N) < O (N^2)

空间复杂度

       空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。开辟了几个空间复杂度就是几,为常数时复杂度是O(1)。

例如冒泡排序,它创建了3个变量(i, j , temp)所以复杂度是O(1);阶乘递归,它每次调用一次方法也需要开辟一次空间,所以它的空间复杂度是O(N); 

相关文章:

【Java数据结构】时间和空间复杂度

本章开始将进入数据结构的知识&#xff0c;时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空间复杂度主要衡量一个算法所需要的额外空间&#xff0c;。 时间复杂度 算法中执行的次数决定了时间复杂度。 在计算执行次数时&#xff0c;只需要计算大概的次数&#xff…...

八斗深度学习

八斗深度学习第二周笔记 一、深度学习步骤&#xff1a;1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小…...

安卓报错Switch Maven repository ‘maven‘....解决办法

例如&#xff1a;Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码&#xff1a;allowInsecureProtocol true...

Scala编程技巧:正则表达式与隐式转换

1. 引言 在Scala编程中&#xff0c;正则表达式和隐式转换是处理字符串匹配和类型转换的强大工具。本文将通过一个实用的示例——电话号码和身份证号码验证器&#xff0c;来展示如何使用这些工具。 2. 知识概括 2.1 正则表达式基础 正则表达式是用于字符串搜索和匹配的强大工…...

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…...

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件&#xff0c;用户可以使用 SSH 来远程连接 linux 系统的计算机&#xff0c;或者传输文件。不过在 win10 以前&#xff0c;windows 并不原生支持 SSH&#xff0c;需要借助第三方工具来使用 SSH 功能。而实际上&#xff0c;微软在 2015 年就曾…...

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器&#xff0c;具有以下显著优势&#xff1a; 1、开源性质&#xff0c;支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点&#xff0c;但缺点也是不言而喻的&#xff0c;由于AI绘画的整个过程以及现…...

ubuntu存储空间不足快速解决

几个自己常用的释放空间命令&#xff0c;备忘 将文件夹下的文件按从大到小排列 ls -lhS /var/log/syslog 过大 sudo truncate -s 0 /var/log/syslog /var/log/Xorg.0.log.old过大 sudo truncate -s 0 /var/log/Xorg.0.log.old 清理系统日志文件&#xff1a; sudo journalctl --…...

Prescan simulink carsim联合仿真平台搭建问题总结

解决办法主要来自忠厚的老王&#xff1a;自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 这部分直接复制的老王视频的&#xff1a; Q1:prescan安装了&#xff0c;但是找不到Demo_Carsim3D A1:这个文件夹是我自己建立的不是prescan自带的&#xff0…...

STM32(HAL_工程模板的搭建)

目录 一、准备文件 二、创建工程 三、创建分组 四、配置文件处理 五、编译错误处理 一、准备文件 准备HAL库文件: ST官网( 意法半导体-STMicroelectronics )搜索STM32Cube, 本文使用“STM32Cube_FW_F4_V1.24.1” 版本的HAL库, 使用的是F4的库文件。 创建文件&#xff1a…...

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用&#xff08;操作环境变量&#xff09; 七、虚拟环境 介绍Mac/linux创建虚拟…...

CAD C# 批量替换当前图中块

本案例功能为选择当前文档中一个块&#xff08;旧块&#xff09;&#xff0c;然后选择新图元&#xff08;新块&#xff09;&#xff0c;运行插件后新块将替换图中所有的旧块。 效果如下&#xff1a; public static class Class1{//选取对象替换块定义[CommandMethod("TT&…...

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明&#xff1b;* 2. 外部可控制进度变化&#xff1b;* 3. 支持屏幕拖动调节进度&#xff08;回调给外部&#xff09;&#xff1b;效果 歌词文件&#xff08;.lrc&#xff09; 一. 使用…...

vscode 配置C/C++环境控制台参数

您可以通过以下步骤在VS Code中配置C/C环境的控制台参数&#xff1a; 1&#xff0c;打开VS Code并进入您的C/C项目 2&#xff0c;点击左侧的"调试"图标&#xff0c;然后点击顶部的齿轮图标&#xff0c;选择“launch.json”。 3&#xff0c;在"launch.json&qu…...

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段&#xff1a;协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录&#xff08;Resource Record, RR&#xff09;格式&#xff1a;被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...

多系统对接的实现方案技术分析

前言 随着信息化和大数据时代的到来&#xff0c;数据资产变得至关重要&#xff0c;企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势&#xff0c;但也导致了信息孤岛问题。为了解决这一问题&#xff0c;数据中台和异构系统集成技术应…...

kv类型算子使用

对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...

3维建模blender

官网稳定版下载&#xff1a;https://www.blender.org/download/lts/ windows有安装版和portable版 教程&#xff1a;https://www.bilibili.com/video/BV1kX4y1m7G5 1. 基础操作 场景操作 场景位移&#xff1a;shift鼠标中键长按场景旋转&#xff1a;鼠标中键长按场景缩放&…...

百问FB网络编程 - UDP编程简单示例

6.5 UDP编程简单示例 ​ UDP服务器首先进行初始化操作&#xff1a;调用函数socket创建一个数据报类型的套接字&#xff0c;函数bind将这个套接字与服务器的公认地址绑定在一起。然后调用函数recvfrom接收UDP客户机的数据报。UDP客户机首先调用函数socket创建一个数据报套接字&…...

面试题:什么是ThreadLocal,如何实现的?

强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 你是否还在为简历无人阅读而感到沮丧&#xff1f;是否因为寻觅不到理想的工作机会而感到焦虑不安&#xff1f;试试:看看…...

OpenSpeedy:终极免费游戏变速工具完整使用指南

OpenSpeedy&#xff1a;终极免费游戏变速工具完整使用指南 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款完全免费且开源的Windows游戏加速工具&#xff0c…...

无线充电技术解析:从Qi标准到射频远距充电的现状与未来

1. 无线充电的现状与用户困境作为一名长期关注消费电子与网络通信设备的技术博主&#xff0c;我每天打交道最多的就是各种“电老虎”和“充电宝”。Rebecca Day在文章里描述的那个圣诞场景&#xff0c;我简直不能再熟悉了——在一堆新设备的包装盒里翻找线缆&#xff0c;在抽屉…...

【LangChain】 入门:从分步调用到链式编程

LangChain 入门&#xff1a;从分步调用到链式编程本文基于一段翻译助手的示例代码&#xff0c;讲解 LangChain 的核心概念、输出解析器的作用&#xff0c;以及普通写法与链式写法的对比。一、LangChain 是什么&#xff1f; 名字拆解缩写含义LangLanguage&#xff08;语言&#…...

AI编程提效:用系统提示词实现测试驱动开发与可靠交付

1. 项目概述&#xff1a;一个为AI编程工作流设计的“系统指令集”如果你经常用Claude、Cursor或者ChatGPT来辅助写代码&#xff0c;大概率遇到过这种情况&#xff1a;AI助手给出的代码片段看起来能跑&#xff0c;但一放到项目里就各种报错&#xff1b;或者它自作主张地“优化”…...

GPU硬件操作强度与LLM推理效率优化实践

1. 硬件操作强度&#xff08;HOI&#xff09;与LLM推理效率的深度解析在GPU加速的大型语言模型推理场景中&#xff0c;我们常常遇到一个看似矛盾的现象&#xff1a;计算单元利用率不足的同时&#xff0c;显存带宽却成为瓶颈。这种现象的根源在于硬件操作强度&#xff08;Hardwa…...

多智能体安全协调中的约束推断与CBF应用

1. 多智能体安全协调中的约束推断方法概述在分布式多智能体系统中&#xff0c;安全协调一直是个极具挑战性的问题。想象一下&#xff0c;当一群机器人在仓库中协同搬运货物时&#xff0c;每个机器人可能只知道部分环境信息&#xff08;比如某些障碍物的位置&#xff09;&#x…...

深入解析Arm架构TLB维护机制与A64指令集

1. TLB维护机制基础解析在处理器架构中&#xff0c;TLB&#xff08;Translation Lookaside Buffer&#xff09;是内存管理单元&#xff08;MMU&#xff09;的核心组件&#xff0c;负责缓存虚拟地址到物理地址的转换结果。当CPU需要访问内存时&#xff0c;首先会查询TLB获取地址…...

《深入浅出通信原理》连载101-105

连载101&#xff1a;正弦信号的傅立叶变换连载102&#xff1a;直流信号的傅立叶变换连载103&#xff1a;复指数信号傅立叶变换的另外一种求法连载104&#xff1a;非周期信号的傅立叶变换连载105&#xff1a;傅立叶变换的对称性&#xff08;一&#xff09;...

从协议到代码:用Python仿真5G NR下行同步全流程(含PBCH解码与MIB解析)

从协议到代码&#xff1a;用Python仿真5G NR下行同步全流程&#xff08;含PBCH解码与MIB解析&#xff09; 在通信系统设计中&#xff0c;下行同步是终端接入网络的第一步关键操作。5G新空口(NR)技术引入了更复杂的同步信号结构&#xff0c;这对算法工程师和研究人员提出了更高要…...

LynxPrompt Action:GitHub Actions 实现 AI 配置中心化与自动化管理

1. 项目概述&#xff1a;为什么我们需要一个AI配置的“中央仓库”&#xff1f; 如果你和我一样&#xff0c;日常开发中同时用着Cursor、Claude Code、GitHub Copilot&#xff0c;甚至还在尝试Windsurf和Aider&#xff0c;那你一定遇到过这个头疼的问题&#xff1a;每个工具的配…...