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

数据结构:2.时间复杂的和空间复杂度

【目标】1.如何衡量一个算法的好坏2.复杂度3.算法效率1.如何衡量一个算法的好坏1.1 两大核心指标理论层面指标问的问题表示法例子时间复杂度数据量增大耗时怎么增长大O表示法O(n) 比 O(n²) 好空间复杂度数据量增大内存怎么增长大O表示法O(1) 比 O(n) 好目前来讲时间复杂度更重要原因如下早期大约80-90年代内存是金子。当时用KB千字节甚至Byte字节来算钱。一个算法能省1KB内存可能就意味着能多运行一个程序。所以当时空间复杂度是王会用时间去换空间。现在最近20年内存变成了白菜。你花几百块钱就能买到16GB、32GB的内存而CPU的性能提升却遇到了物理瓶颈。用户的耐心也越来越有限一个网页加载超过2秒就可能被关闭。所以现在时间复杂度是王会用空间去换时间。1.2 两个实际考量工程层面有时候理论好的算法实际中不一定用。指标问的问题例子正确性结果对不对排序算法必须真的排好序可读性别人能看懂吗宁愿用简单的冒泡排序也不用晦涩的堆排序如果数据量小1.3 数据规模在实际开发过程中判断一个算法的好坏并不是单一的根据某一特性进行判断而是要根据不同的数据规模选择合适的算法。比如对一组数据进行排序数据规模你会怎么选理由10条随便写甚至手写冒泡可读性最重要不用动脑1万条Arrays.sort()快排时间重要但Java已经帮你优化好了1亿条外部排序 并行处理时间压倒一切空间也得精打细算1.4 总结衡量一个算法的好坏由时间复杂度、空间复杂度、正确性、可读性这四个方面进行评判。但是评判的前提是确定算法的业务场景、公司需求、数据规模等等。2.复杂度2.1 大O的渐进表示法在计算时间复杂度和空间复杂度的时候有很多情况下我们都不能精确的对其进行计算所以我们用估算值来当作结果对其进行评判这里我们就用到大O的渐进表示法用常数1取代运行时间中的所有常数项。如果常数项为0那么就不用1来进行取代在修改后的运行次数函数中只保留最高阶项。如果最高阶项存在且不是1则去除与这个项目相乘的常数得到的结果就是大O阶。大O的渐进表示法描述的是“当 n 很大时的趋势”。如果 n 本身就很小大O的意义不大选简单的、可读性好的算法就行数据量大时大O是生死线。2.2 时间复杂度2.2.1 时间复杂度的概念在计算机科学中算法的时间复杂度是一个数学函数它定量描述了该算法的运行时间。一个算法执行所耗费的时间从理论上说是不能算出来的只有你把你的程序放在机器上跑起来才能知道。但是在每个程序确定之前我们需要每个算法都上机测试吗是可以都上机测试但是这很麻烦所以才有了时间复杂度这个分析方式。由于一个算法所花费的时间与其中语句的执行次数成正比例算法中的执行次数最多、复杂度最高的那段代码的执行次数为算法的时间复杂度。2.2.2 常见的时间复杂度计算举例【示例一】// 计算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);}由于count是执行次数最多、复杂度最高的语句所以我们计算他的时间复杂度作为算法的时间复杂度。语句一执行 2*n 次语句二执行 10 次那么总共的执行次数就是 2*n 10 次下面我们采取大O的渐进表示法对其进行计算。2*n 10 —— 2*n 12*n 1 —— 2*n2*n —— n所以我们计算出来的结果就是O(n)【示例二】// 计算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;}由于循环体内部的比较和赋值是执行次数最多、复杂度最高的语句所以我们计算他的时间复杂度作为算法的时间复杂度。每循环一次搜索范围缩小一半初始范围n个元素第1次循环后剩余n/2第2次循环后剩余n/4第k次循环后剩余n / (2^k) 1那么也就是说我们在k次循环中总共执行了log₂ n下面我们采取大O的渐进表示法对其进行计算。log₂ n —— 没有加法常数不变保留最高阶项 —— 就是 log₂ n去除系数系数已经是1——log n所以我们计算出来的结果就是O(log n)2.3 空间复杂度2.3.1 空间复杂度的概念空间复杂度是对一个算法在运行过程中空间复杂度是临时占用存储空间大小的量度只算额外占用的、辅助性质的临时内存也就是说除了输入数据所占用的存储空间的大小其他的都算注意这里的空间复杂度的计算方法是在实际开发中的在学术上并不是这样规定 。空间复杂度不是程序占用了多少byte的空间因为这个也没太大意义所以空间复杂度算的是中间变量的个数。空间复杂度计算规则基本跟时间复杂度类似也使用大O渐进表示法。2.3.2 常见的空间复杂度的计算举例【示例一】int sum(int[] arr) {int total 0; // 1个变量for (int i 0; i arr.length; i) {total arr[i]; // 没有额外数组}return total;}可以看出我们额外的变量只有 i 和 total 这两个变量所以来说额外变量就是 2 个那么根据大O的渐进表示法计算出空间复杂度为O(1)【示例二】int[] copyArray(int[] arr) {int[] newArr new int[arr.length]; // 第1步for (int i 0; i arr.length; i) { // 第2步newArr[i] arr[i];}return newArr; // 第3步}可以看出我们额外的变量有 newArr这个数组 和 i 这个变量所以说额外变量应该是 n 1个那么根据大O的渐进表示法计算出的空间复杂度为O(n)3.算法效率算法效率分为两种时间效率和空间效率。•时间效率 算法实际运行消耗的真实时间•空间效率 算法实际运行消耗的真实内存总内存以下是DeepSeek关于时间效率和空间效率相关细节的回答“对于一个需求有不同的算法我们会根据正确性、可读性、时间复杂度、空间复杂度四点来评判算法。”✅正确。这是四个维度。“大多数情况下我们更看重时间效率和空间效率。”✅正确。在正确性和可读性满足基本要求后效率和资源占用通常是核心关注点。“所以我们会根据时间复杂度和空间复杂度这两个指标筛选掉明显很差的。”✅正确。比如时间复杂度 O(n²) 的直接淘汰空间复杂度 O(n²) 的直接淘汰。“但是这两个指标不能进行精确筛选。”✅正确。因为时间复杂度和空间复杂度常用的大O的渐进表示法是理论趋势不是具体数值。同为 O(n) 的两个算法实测可能差 10 倍。“所以我们引入了效率这个理论概念理论与实践结合在实践中进行更深层次的筛选。”✅正确。先用复杂度理论筛掉明显不行的再用效率实测从剩下的里挑最好的。

相关文章:

数据结构:2.时间复杂的和空间复杂度

【目标】1.如何衡量一个算法的好坏2.复杂度3.算法效率1.如何衡量一个算法的好坏?1.1 两大核心指标(理论层面)指标问的问题表示法例子时间复杂度数据量增大,耗时怎么增长?大O表示法O(n) 比 O(n) 好空间复杂度数据量增大…...

Perplexity体验真相曝光:92%用户忽略的3个隐藏缺陷及2024最新优化方案

更多请点击: https://intelliparadigm.com 第一章:Perplexity用户评论汇总 主流平台高频反馈主题 用户在Reddit、Product Hunt及App Store等平台对Perplexity的评价呈现显著两极分化:专业用户高度认可其引用溯源能力与无幻觉回答质量&#…...

转行对谈:转向AI是破茧成蝶还是折翼未来?

01前言|AI时代下的土建人 一、AI浪潮:开启一个崭新的时代 人工智能(AI)已经从学术前沿走向产业中心,成为当前时代最具颠覆性的技术之一。从最早“出圈”的对话式模型ChatGPT的火爆到AI绘画、AI写作等AIGC(生…...

【无人机协同】联合优化无人机轨迹、发射功率与地面用户-MEC关联的多无人机多地面用户系统 附matlab代码✅

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量m…...

Perplexity本地化查询实战:手把手教你用Ollama+Llama3构建离线知识库(含性能压测数据)

更多请点击: https://intelliparadigm.com 第一章:Perplexity本地服务查询 Perplexity 本地服务查询是指在不依赖云端 API 的前提下,通过本地部署的模型与推理服务(如 Ollama、LM Studio 或 Text Generation WebUI)完…...

STM32串口转RS-485双机通信:硬件设计、软件驱动与调试全解析

1. 项目概述:从串口到485,双机通信的工业级实现搞嵌入式开发,尤其是用STM32做控制,串口通信(UART)绝对是绕不开的基础。但如果你想把两个STM32板子连起来,距离稍微远一点,或者环境里…...

前端开发从入门到精通:Vue3+TypeScript实战教程

一、为什么软件测试从业者要学Vue3TypeScript在软件测试领域,尤其是自动化测试和性能测试方向,懂前端开发技术早已不是加分项,而是必备技能。作为测试从业者,掌握Vue3TypeScript能为你的职业发展带来多重优势:&#xf…...

从零构建嵌入式Linux平板:基于全志H3与Qt5的实战指南

1. 项目概述:为什么我们要自己动手做一块“平板”?几年前,我在一个嵌入式展会上看到一块工业平板,功能简单但价格不菲。当时我就在想,它的核心无非就是一块屏幕、一个主控板和一个定制的用户界面。既然我们有开源的Lin…...

从FM收音机到5G基站:拆解DDS技术如何悄悄改变我们的通信设备

从FM收音机到5G基站:拆解DDS技术如何悄悄改变我们的通信设备 上世纪90年代,当人们第一次在车载收音机上按下"自动搜台"按钮时,很少有人意识到这个流畅体验背后隐藏着一项革命性技术——直接数字频率合成(DDS&#xff09…...

RK3568开发板TB-96AI-3568CE深度评测:从核心接口到AI应用实战

1. 从芯片到板卡:TB-96AI-3568CE的设计哲学当一块芯片从图纸走向现实,成为一块可以握在手中的开发板时,这中间的路程远不止是简单的引脚引出和电源接通。我接触过不少基于RK3568的方案,但拿到贝启科技这块TB-96AI-3568CE时&#x…...

2025届学术党必备的五大AI学术助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术飞速发展着,学术不端行为也呈现出了新的挑战,知网身为国…...

国内用户怎么注册.ai域名?2026最新AI域名注册规则+平台推荐

随着人工智能(AI)行业的持续爆发,越来越多企业在搭建官网时,开始优先选择 .ai域名。 你会发现一个明显变化: 👉 很多AI工具、AI平台,直接使用“.ai”作为网站后缀 这背后的原因,其…...

Spring AI 快速对接 AI 大模型(开箱即用)

一、项目准备&#xff08;最简依赖&#xff09;1. 创建 Spring Boot 项目推荐版本&#xff1a;Spring Boot 3.2.x JDK 版本&#xff1a;172. pom.xml 核心依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…...

家长选择赶考小状元AI自习室还是其他品牌对孩子学习更有帮助?深度解析三大维度

随着教育智能化浪潮席卷而来&#xff0c;家长们在为孩子选择学习辅助工具时&#xff0c;面临着前所未有的多元选择。传统网课、新兴自习室品牌层出不穷&#xff0c;而深耕智能教育领域二十年的赶考小状元AI智能自习室&#xff0c;以其独特的“教育内核科技工具运营支持”三维融…...

ClaudeCodeOpenAI Token免费使用

2000万claude ops4.7 以及openai gpt5.5 token免费使用apikey贴在这里了:ops4.7sk-119f6d1b81af70e6018f5cf6eb6309261857c98a22280f27345a073c12560e2fgpt5.5sk-b013d9140497d3c7af94459a41f189e4013994f1fe8bac3d5a839e4bcf4413a9使用指南和文档在apikeyfun.com...

Adams新手避坑指南:从几何点、Marker坐标系到立方体,这些基础元素你真的用对了吗?

Adams新手避坑指南&#xff1a;几何元素背后的工程逻辑与实战陷阱 刚接触Adams的工程师常会陷入一个误区——把软件操作手册当作圣经&#xff0c;却忽略了每个几何元素背后的物理意义和工程逻辑。这种"知其然不知其所以然"的学习方式&#xff0c;往往会导致仿真结果失…...

[实测可用 v2.7.5] 桌面端 Open Claw 搭建流程全程图文教程

前言 2026 年开源圈热门的「数字员工」OpenClaw&#xff08;昵称小龙虾&#xff09;&#xff0c;GitHub 星标突破 28 万&#xff0c;凭借本地运行 零代码操作 自动干活的核心优势广受关注&#xff01;很多人误以为它是普通聊天 AI&#xff0c;实则是能真正操控电脑的自动化神…...

从A/B测试到临床实验:避开P值陷阱的5个实战要点(含单尾/双尾选择指南)

从A/B测试到临床实验&#xff1a;避开P值陷阱的5个实战要点&#xff08;含单尾/双尾选择指南&#xff09; 在数据驱动的决策时代&#xff0c;P值已成为产品迭代和医学研究中的"通行货币"。当A/B测试报告显示"P<0.05"时&#xff0c;团队往往迫不及待地全…...

创业公司如何设计有效的OKR

创业公司如何设计有效的OKR 前言 创业第一年&#xff0c;我们没有明确的目标&#xff0c;大家都很忙&#xff0c;但不知道忙什么。每个人都在做事&#xff0c;但好像没有形成合力。 后来我开始研究 OKR&#xff08;Objectives and Key Results&#xff09;&#xff0c;发现这不…...

SAP PP实战解析:MPS(主生产计划)如何成为供需平衡的“定海神针”?

1. 为什么企业需要MPS这根"定海神针"&#xff1f; 想象一下你正在经营一家汽车制造厂。周一销售部突然接到500辆车的加急订单&#xff0c;周三又被告知原定300辆的订单要取消。如果直接根据这些波动安排生产&#xff0c;车间可能周一忙到通宵&#xff0c;周三却闲置停…...

ARM中断机制深度解析:从硬件原理到实战调试与RTOS应用

1. 项目概述&#xff1a;从一行代码到硬件响应“ARM体系架构处理器的中断程序分析”这个标题&#xff0c;对于很多嵌入式开发者和系统软件工程师来说&#xff0c;就像一把钥匙。它指向了连接软件逻辑与硬件实时响应的核心枢纽。我处理过太多因为中断没玩明白而导致的系统“玄学…...

当贝盒子H5 64G版618首销TOP1!多平台登顶,凭什么这么火?

2026年5月14日&#xff0c;当贝官方发布了618抢先购首日当贝盒子H5 64G版的首销战报。据官方数据显示&#xff0c;这款重磅升级的电视盒子在京东、天猫、抖音三大主流电商平台的电视盒子类目热销榜中&#xff0c;全部拿下TOP1席位&#xff0c;成为今年618大促第一天的现象级爆款…...

FFXIV TexTools:如何用3个步骤打造你的专属艾欧泽亚冒险形象

FFXIV TexTools&#xff1a;如何用3个步骤打造你的专属艾欧泽亚冒险形象 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 想象一下&#xff0c;你站在艾欧泽亚的冒险广场上&#xff0c;周围的玩家都穿着独特的装备…...

GitLab团队协作实战:从分支策略到CI/CD流水线优化指南

1. 项目概述&#xff1a;为什么需要一个专属的GitLab使用指导&#xff1f;在团队协作开发中&#xff0c;版本控制系统是基石&#xff0c;而GitLab作为集代码托管、CI/CD、项目管理于一体的DevOps平台&#xff0c;其重要性不言而喻。然而&#xff0c;对于许多新加入团队的开发者…...

NVDC充电器设计实战:从架构解析到动态负载响应的工程挑战

1. 项目概述&#xff1a;为什么NVDC充电器设计是个技术活最近在做一个项目&#xff0c;需要为一批采用NVDC&#xff08;Narrow Voltage DC&#xff09;架构的笔记本电脑设计配套的充电器。本以为就是个普通的电源适配器&#xff0c;照着规格书选型、画板、调试就完事了&#xf…...

UVM验证中的迭代模式:从寄存器遍历到配置组合的实战应用

1. 项目概述&#xff1a;为什么要在UVM中谈迭代模式&#xff1f;如果你做过芯片验证&#xff0c;尤其是用SystemVerilog和UVM搭过测试平台&#xff0c;那你肯定对“遍历”这个概念不陌生。比如&#xff0c;你需要检查一个存储阵列里每一个地址的读写是否正确&#xff0c;或者需…...

慢时钟域到快时钟域控制信号传递:原理、方案与实战

1. 控制信号跨时钟域传递&#xff1a;一个资深工程师的实战拆解在数字电路设计里&#xff0c;尤其是涉及多时钟域的复杂系统&#xff0c;比如SoC、高速接口或者异构计算单元&#xff0c;控制信号的跨时钟域传递&#xff08;CDC&#xff0c; Clock Domain Crossing&#xff09;绝…...

Hermes Agent 任务追踪实战:3 类日志审计配置+2 步故障自愈触发流程

1. 日志审计不是“看日志”,而是让 Hermes Agent 自己学会写诊断报告 大多数人第一次配置 Hermes Agent 的任务追踪能力时,会下意识打开 logs/ 目录,用 tail -f 盯着滚动的文本发呆——这本质上还是在用人工方式做运维。真正的工程化日志审计,是让 Hermes Agent 在任务执行…...

从7805到D-CAP2:TPS54229E实现12V转5V高效电源设计

1. 从线性稳压到D-CAP2&#xff1a;一个电源工程师的选型心路刚入行那会儿&#xff0c;画的第一块51单片机板子&#xff0c;电源部分几乎不用想&#xff0c;一个7805三端稳压器&#xff0c;加上输入输出两个电解电容&#xff0c;齐活。这东西皮实、便宜&#xff0c;满大街都是&…...

前沿:小目标检测,YOLOv11n 再进化!

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 https://sensors.myu-group.co.jp/sm_pdf/SM4311.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 基于最新 YOLOv…...