【JAVA-数据结构】时间空间复杂度计算案例

        接着上一篇文章,对应举一些例子。

1.时间复杂度

【实例1】

// 计算func2的时间复杂度?
void func2(int N) {int count = 0;for (int k = 0; k < 2 * N ; k++) {count++;} int M = 10;while ((M--) > 0) {count++;} System.out.println(count);
}

        基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)

【实例2】

// 计算func3的时间复杂度?
void func3(int N, int M) {int count = 0;for (int k = 0; k < M; k++) {count++;} for (int k = 0; k < N ; k++) {count++;} System.out.println(count);
}

        基本操作执行了M+N次,有两个未知数M和N,时间复杂度为 O(N+M) 

【实例3】

// 计算func4的时间复杂度?
void func4(int N) {int count = 0;for (int k = 0; k < 100; k++) {count++;} System.out.println(count);
}

        基本操作执行了100次,通过推导大O阶方法,时间复杂度为 O(1) 

【实例4】

// 计算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;}}
}

        基本操作执行最好N次,最坏执行了(N*(N-1))/2次,通过推导大O阶方法+时间复杂度一般看最坏,时间复杂度为 O(N^2)

【实例5】

// 计算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;elsereturn mid;} return -1;
}

        基本操作执行最好1次,最坏 次,时间复杂度为 O( ) ps: 在算法分析中表示是底数为2,对数为N,有些地方会写成lgN。(建议通过折纸查找的方式讲解logN是怎么计算出来的)(因为二分查找每次排除掉一半的不适合值,一次二分剩下:n/2;两次二分剩下:n/2/2 = n/4)

【实例6】

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

        通过计算分析发现基本操作递归了N次,时间复杂度为O(N) 

【实例7】

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

        通过计算分析发现基本操作递归了 次,时间复杂度为O( )

2.空间复杂度 

【实例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;}}
}

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

【实例2】

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

        动态开辟了N个空间,空间复杂度为 O(N)

【实例3】

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

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

        这是一些时间空间复杂度相关案例,帮助大家理解和练习。 

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

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

相关文章

什么是远程过程调用(RPC)

进程间通信(IPC) 进程间通信(Inter-Process Communication)是指两个进程或者线程之间传送数据或者信号的一些技术或者方法。进程是计算机进行资源分配的最小的单位。每个进程都有自己独立的系统资源,而且彼此之间是相对隔离的。为了使得不同的进程之间能够互相访问,相互协…

简单的mybatis batch插入批处理

简单的mybatis batch插入批处理 1.需求 公司的权限管理功能有一个岗位关联资源的分配操作&#xff0c;如果新增一个岗位&#xff0c;有时候需要将资源全部挂上去&#xff0c;原有的是for循环插入资源信息&#xff0c;发现有时候执行速度过慢&#xff0c;所以此处想修改为批处…

基于TCP协议的网络通信

TCP即传输控制协议&#xff0c;基于TCP协议的网络通信总是面向连接的&#xff0c;在通信过程中需要进行“三次握手&#xff0c;四次挥手”&#xff0c;这是众所周知的&#xff0c;所以这里不过多赘述。我们都知道TCP协议传输数据比较稳定&#xff0c;那么为什么稳定&#xff0c…

pip的安装和使用

pip的安装和使用 1、 pip 是一个现代的&#xff0c;通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。便于我们对Python的资源包进行管理。 2、注&#xff1a;pip 已内置于 Python 3.4 和 2.7 及以上版本&#xff0c;其他版本需另行安装。 3、在安…

RAG高级优化:一文看尽query的转换之路

准确地找到与用户查询最相关的信息是RAG系统成功的关键&#xff0c;如何帮助检索系统提升召回的效果是RAG系统研究的热门方向。本文将介绍三种query理解的方法&#xff0c;以增强检索增强生成(RAG)系统中的检索过程&#xff1a; 查询重写&#xff1a; 重新定义查询&#xff0c;…

[Python学习日记-29] 开发基础练习2——三级菜单与用户登录

[Python学习日记-29] 开发基础练习2——三级菜单与用户登录 简介 三级菜单 用户登录 简介 该练习使用了列表、字典、字符串等之前学到的数据类型&#xff0c;用于巩固实践之前学习的内容。 三级菜单 一、题目 数据结构&#xff1a; menu { 北京: { 海淀: { …

什么是unix中的fork函数?

一、前言 在本专栏之前的文档中已经介绍过unix进程环境相关的概念了&#xff0c;本文将开始介绍unix中一个进程如何创建出新进程&#xff0c;主要是通过fork函数来实现此功能。本文将包含如下内容&#xff1a; 1.fork函数简介 2.父进程与子进程的特征 3.如何使用fork创建新进程…

基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…

通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系

今天通俗讲解一下js的对象&#xff0c;因为要通俗&#xff0c;所以可能描述不甚准确。 在js中&#xff0c;想要创建一个对象&#xff0c;首先要写出构造函数&#xff08;跟其它的语言不太一样哦&#xff0c;其它语言一般都会先写一个class 类名&#xff09;。 构造函数写法如…

Transformer-LSTM网络的轴承寿命预测,保姆级教程终于来了!

概要 关于轴承寿命预测&#xff0c;网络上的文章、代码层出不穷&#xff0c;但是质量却是令人堪忧&#xff0c;有很多文章甚至存在误导嫌疑。本期代码是在小淘怒肝好几个夜晚整理出来的&#xff0c;本期代码可以帮你迅速掌握一个轴承寿命预测的全过程。 为了不误导我的读者朋…

YOLOv5独家改进:严重遮挡和重叠目标场景解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

【d48】【Java】【力扣】LCR 123. 图书整理 I

思路 方法1&#xff1a;放进list,将list倒置&#xff0c;利用stream&#xff0c;将list改为int类型 方法2&#xff1a;递归&#xff1a;递归通用思路&#xff1b;明确每一层做什么确定返回值确定什么地方接收下层的返回值 每一层&#xff1a;调用下层&#xff0c;然后把自己…

Oracle AI理论与实践,企业落地篇干货满满

最近也是看到了圈子里的一位DBA好友&#xff0c;领导安排的工作是让负责AI的落地&#xff0c;而且也作为他业绩考核的指标&#xff0c;作为1名15年的DBA老兵来说&#xff0c;让AI落地面临的困难重重。 AI已经逐渐侵入到实际的生活中&#xff0c;最近我也是参加了Oracle官方在中…

【py】计算字母出现次数 字典储存

代码 用于计算用户输入字符串中每个字母字符的出现频率&#xff1a; from collections import Counter def calculate_character_frequency(): # 获取用户输入的字符串 user_input input("请输入一个字符串&#xff1a;") # 将字符串转换为小写…

摄影社团管理系统

基于springbootvue实现的摄影社团管理系统 &#xff08;源码L文ppt&#xff09;4-075 第四章 系统概要设计 4.1系统设计原理 设计原理是指系统的设计来源&#xff0c;它将需求合理地分解为功能&#xff0c;并抽象地描述系统的模块和其下的功能。在功能模块化后&#xff…

DeiT(ICML2021):Data-efficient image Transformer,基于新型蒸馏且数据高效的ViT!

Training data-efficient image transformers & distillation through attention&#xff1a;通过注意力训练数据高效的图像转换器和蒸馏 论文地址&#xff1a; https://arxiv.org/abs/2012.12877 代码地址&#xff1a; https://github.com/facebookresearch/deit 这篇论文…

KDD2024 时序论文(Time Series)

1、Generative Pretrained Hierarchical Transformer for Time Series Forecasting paper: https://dl.acm.org/doi/abs/10.1145/3637528.3671855 code&#xff1a;GitHub - SiriZhang45/FRNet: Code Implementation of FRNet 2、Fredformer: Frequency Debiased Transforme…

一文教你分不清路由器、交换机、光猫的概念,协助你对路由模组选型

当谈论网络设备时&#xff0c;我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成部分&#xff0c;承担着连接、传输和管理数据的重要任务。在日常生活和工作中&#xff0c;我们几乎离不开它们的存在&#xff0c;无论是在家中上网、办公室内…

Java:日期操作

目录 1、生成20240605180212格式的时间2、Date类型转LocalDate类型3、LocalDate类型基本操作4、格式化日期格式5、String 与 LocalDateTime 之间的转换6、生成指定时间段内的时间列表 1、生成20240605180212格式的时间 String dateTime LocalDateTime.now().format(DateTimeF…