java数据结构(复杂度)
一.时间复杂度和空间复杂度
1.时间复杂度
衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时,对于时间效率的作用就显得十分重要了。
1.大O渐进表示法
Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {System.out.println("H");}}for (int i = 0; i < n; i++) {System.out.println("w");}for (int i = 0; i < 3; i++) {System.out.println("w");}
我们来看一下这个代码的运行次数。
运行次数:n*n + n +3
在计算时间复杂度时我们会优先忽略掉对整体影响不大的值,如该运行次数中的3,我们将其忽略,另外因为n平方为指数函数,相比于n这个常函数,指数函数能更好的表达时间复杂度,所以我们将其忽略。
2.推导方法
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶
具体怎么用呢?
比方说我们的上一个代码时间复杂度就是O(n^2)。
Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 0; i < 2*n; i++) {System.out.println("j");}System.out.println("Hello");
这个代码是:2*n + 1.时间复杂度是O(n);
for (int i = 0; i < 100; i++) {System.out.println("Hello");}
运行次数:100,时间复杂度:O(1);
Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();for (int i = 0; i < n; i++) {System.out.println("j");}for (int i = 0; i < m; i++) {System.out.println("Hello");}
运行次数:m+n,时间复杂度:O(m+n);
int[] array = {1,2,3,4,5,6,7,8,9,0};Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine();int left = 0;int right = array.length - 1;while(left < right){int mid = left + (right - left) / 2 ;if ( n > mid){left = mid;}if (n < mid){right = mid;}if (n == mid){System.out.println("找到了是:" + mid);break;}

我们发现次数为x次时,n / 2^x = 1,所以时间复杂度为O(log n) ;
int fib (int N) {
return N < 2 ? N : factorial(N-1) * N;
}
次数为n次,所以时间复杂度为O(n);
int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

我们发现它实际上是这样执行的我们用红色圈出来的那部分没有遵循我们之前的规则,但由于时间复杂度是估算的,所以我们也就忽略了着误差。我们发现程序执行的次数是一个等差数列,所以我们用到了等差数列的求和公式,再根据大O推到得出时间复杂度为O(N^2);
空间复杂度
空间复杂度算的是临时开辟了多少空间,多少个变量。
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);
long factorial(int N) {
return N < 2 ? N : factorial(N-1)*N;
}
开辟了N个变量,所以为O(n);
相关文章:
java数据结构(复杂度)
一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时&…...
windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…...
HTML+CSS基础(了解水平)
html 的介绍 学习目标 能够知道html的作用 1. html的定义 2. html的定义 HTML 的全称为:HyperText Mark-up Language, 指的是超文本标记语言。 标记:就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1><…...
[设计模式]1_设计模式概览
摘要:设计模式原则、设计模式的划分与简要概括,怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用,后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则(语言无关) 本质原理图 原…...
ClickHouse总体学习
文章目录 一、简介1、OLAP 与 OLTP 的对比2、列式储存的好处3、DBMS 的功能4、多样化引擎5、高吞吐写入能力6、数据分区与线程级并行 二、Explain 查看执行计划三、建表优化1、数据类型2、分区和索引3、表参数4、写入和删除优化 四、常见配置CPU资源内存资源存储 五、ClickHous…...
Elasticsearch集群与日志系统实战部署指南
一、环境规划与初始化配置 1. 服务器资源分配 IP地址部署服务主机名172.25.23.7ES Kafka Zookeeper Kibananode1172.25.23.8ES Kafka Zookeeper Filebeatnode2172.25.23.9Kafka Zookeeper Apache Logstashnode3 系统要求: 配置:4核CPU / 4G…...
SFT数据处理部分的思考
SFT数据及处理的业内共识 1.prompt的质量和多样性远重要于数据量级,微调一个 30 b 量级的base model只需要 10 w 量级的数据即可 参考:《LIMA:Less Is More for Alignment》 2.合成数据很重要!一般需要通过…...
netsh实现TCP端口转发
服务器:192.168.31.9 端口:56000 客户端:192.168.31.2 端口:5600 客户端(本地端口5600)通过TCP连接服务器的56000端口 PC:192.168.31.5,PC实现客户端和服务器之间56000端口转发 1. …...
数据分布偏移检测:保障模型在生产环境中的稳定性
数据分布偏移检测:保障模型在生产环境中的稳定性 引言 在机器学习系统从开发环境部署到生产环境的过程中,数据分布偏移问题是影响模型性能的主要挑战之一。当训练数据与生产环境中的数据分布不一致时,即使是经过精心调优的模型也可能表现出明显的性能下降。本文将深入探讨…...
leetcode 75.颜色分类(荷兰国旗问题)
题目描述 题目分析 本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。 要想单独解决这道题本身还是很简单的,统计0、1、2的数量然后按顺序赋值,或者手写一个冒泡排序,whatever。 但是在这一题中我们主…...
在windows上通过idea搭建doris fe的开发环境(快速成功版)
一、前置环境准备 1. 准备Linux环境,我起的虚机,使用CentOS8,4核、12G,磁盘50G 1.1.备份yum源 # 系统下载连接:magnet:?xturn:btih:9DB46A612D04763AA7DB02A0FF63EDE2EA555867&dnCentOS-8.1.1911-x86_64-dvd1.…...
MyBatis源码分析の配置文件解析
文章目录 前言一、SqlSessionFactoryBuilder1.1、XMLConfigBuilder1.2、parse 二、mappers标签的解析2.1、cacheElement2.1.1、缓存策略 2.2、buildStatementFromContext2.2.1、sql的解析 前言 本篇主要介绍MyBatis源码中的配置文件解析部分。MyBatis是对于传统JDBC的封装&…...
python爬虫笔记(一)
文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签(网站)target属性换行线和水平分割线 图片设置宽高width,height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…...
docker后台运行,便于后期用命令行进入它的终端
在 docker compose up --build -d 命令中,**-d(或 --detach)参数的作用是让容器以后台模式(detached mode)**运行。以下是详细解释: **-d 参数的作用** 后台运行容器: 默认情况下&a…...
剑指 Offer II 087. 复原 IP
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20087.%20%E5%A4%8D%E5%8E%9F%20IP/README.md 剑指 Offer II 087. 复原 IP 题目描述 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址…...
DC-6靶机详解
一、主机发现 arp-scan -l靶机ip为192.168.55.159 二、端口扫描、目录枚举、指纹识别、 2.1端口扫描 nmap 192.168.55.159发现没有开放特殊端口 看来信息收集的重点要放在网页中了 2.2目录枚举 dirb http://192.168.55.1592.3指纹识别 nmap 192.168.55.159 -sV -sC -O …...
Java构造方法详解:从入门到实战
目录 一、什么是构造方法? 二、构造方法的作用 三、构造方法分类与使用 1. 默认构造方法 2. 有参构造方法 3. 构造方法重载 四、注意事项(避坑指南) 五、经典面试题解析 六、实战应用场景 七、总结 一、什么是构造方法? …...
STM32-SPI通信外设
目录 一:SPI外设简介 SPI框图编辑 SPI逻辑 编辑 主模式全双工连续传输 编辑 非连续传输 二:硬件SPI读写W25Q64 1.接线: 2. 代码 SPI外设的初始化 生成时序 一:SPI外设简介 STM32内部集成了硬件SPI收发电路&#…...
远程控制中的云电脑是什么意思?1分钟学会用
很多常用我们ToDesk远程控制的朋友们或许会注意到无论是在PC端还是移动端中都出现有【云电脑】【来云电脑爽玩-新用户免费1小时】这些词句等信息。那么这究竟是代表什么意思呐?云电脑是什么又怎么用呐?为什么要增加云电脑?以下小编就为大家科…...
【go】Go 语言中 errors.Is 和 errors.As 的区别
Go 语言中 errors.Is 和 errors.As 的区别 核心区别概述 errors.Is 和 errors.As 是 Go 1.13 引入的错误处理函数,它们有着不同的用途: errors.Is: 判断错误链中是否包含特定的错误值(错误相等性检查)errors.As: 尝试将错误转换…...
网络爬虫【简介】
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲视图 一、网络爬虫的定义 网络爬虫(Web Crawler),又称为网络蜘蛛、网络机器人等,是一种按照一定规则自动抓取互联网信息的程序或脚本。它…...
JPA动态查询自定义排序规则
方法1:使用 CASE WHEN 语句排序 // 自定义排序逻辑 // 定义“离线”排在前,“在线”排在后 Expression<Object> caseExpression cb.selectCase().when(cb.equal(root.get("status"), "离线"), 0).when(cb.equal(root.get(…...
卫语句优化多层if else嵌套
一、卫语句的介绍 卫语句是一种编程实践,用于在函数或方法的开头快速处理不符合条件的情况,从而避免深层次的嵌套结构。它的核心思想是尽早返回,减少嵌套,使代码更加清晰易读。 二、卫语句的作用 提高可读性:卫语句将…...
2024华东师范大学计算机复试上机真题
2024华东师范大学计算机复试机试真题 2023华东师范大学计算机复试机试真题 2022华东师范大学计算机复试机试真题 2024华东师范大学计算机复试上机真题 2023华东师范大学计算机复试上机真题 2022华东师范大学计算机复试上机真题 在线评测:传动门:pgcode…...
3.15刷题
P6337 [COCI 2007/2008 #2] CRNE - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;//横加竖 最大。n/2,n/21if(n%20){cout<<(n/21)*(n/21);}else cout<<(n/22)*(n/21);return 0; }P6338 [COCI 2007/2008 #2] PRVA - 洛…...
14.使用各种读写包操作 Excel 文件:辅助模块
一 各种读写包 这些是 pandas 在底层使用的各种读写包。无须安装 pandas,直接使用这些读写包就能够读写 Excel 工作簿。可以尽可能地使用 pandas 来解决这类问题,只在 pandas 没有提供你所需要的功能时才用到读写包。 表中没有 xlwings ,因为…...
设计心得——多态
一、设计上的多态 无论是在网上还是书籍上,还是自己的文章里都反复分析过多态的原理、应用和各种常见的情况。本篇重点从设计的角度来阐述一下多态,而不对多态的具体的用法进行说明。在前面的知识学习中可以知道,多态可以分为动多态和靜多态…...
【DeepSeek】本地部署DeepSeek的完整教程(Ollama+Docker+Open WebUI)
本地部署DeepSeek的完整教程 文章目录 本地部署DeepSeek的完整教程写在前面技术需求详细步骤一. 安装Ollama软件二. 安装DeepSeek-R1模型三. 安装Docker软件四. 配置Web UI界面问题解决1. 打开`docker desktop`时,一直显示`Docker Engine stopped`2. 用`Docker`拉取`Open WebU…...
Python数据分析之数据可视化
Python 数据分析重点知识点 本系列不同其他的知识点讲解,力求通过例子让新同学学习用法,帮助老同学快速回忆知识点 可视化系列: Python基础数据分析工具数据处理与分析数据可视化机器学习基础 四、数据可视化 图表类型与选择 根据数据特…...
1、操作系统引论
一、操作系统 会使用linux系统 建议大家先学会linux的基础指令,可以看菜鸟教程网站进行学习。 1、各种定义 操作系统定义 管理计算机的 硬件 和软件资源, 能对各类作业进行调度,方便用户使用计算机的程序集合。操作系统运行在内核态…...
