学习数据结构(1)时间复杂度
1.数据结构和算法
(1)数据结构是计算机存储、组织数据的方式,指相互之间存在⼀种或多种特定关系的数据元素的集合
(2)算法就是定义良好的计算过程,取一个或一组的值为输入,并产生出一个或一组值作为输出,简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果
(3)算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量⼀个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量⼀个算法的运行快慢,而空间复杂度主要衡量⼀个算法运行所需要的额外空间
2.时间复杂度
(1)概念
在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运行时间。时间复杂度是衡量程序的时间效率
为什么不去计算程序的运行时间?
·程序运行时间与编译环境、运行机器的配置有关,同一个算法程序,用一个老编译器进行编译和用新编译器编译,在同样机器下运行时间不同
·同⼀个算法程序,用⼀个老低配置机器和新高配置机器,运行时间也不同
·运行时间只能程序写好后测试,不能在程序写前通过理论思想计算评估
计算时间复杂度计算的不是程序的精确执行次数,(精确执行次数计算起来很复杂),计算时间复杂度只是想比较算法程序的增长量级,也就是当N不断变大时T(N)的差别,只需要计算程序能代表增长量级的大概执行次数,复杂度的表示通常使用大O的渐进表示法
(2)大O的渐进表示法
大O符号:是用于描述函数渐进行为的数学符号
规则:
·时间复杂度函数式T(N)中,只保留最高阶项,去掉低阶项,因为当N不断变大时,低阶项对结果影响越来越小,当N无穷大时,就可以忽略不计了
·如果最高阶项存在且不是1,则去除这个项目的常数系数,因为当N不断变大,这个系数对结果影响越来越小,当N无穷大时,就可以忽略不计了
·T(N)中如果没有N相关的项目,只有常数项,则用常数1取代常数
(3)实例
例1:计算Fucn1的时间复杂度

T(N)=N^2+2*N+10,只保留最高次项,则时间复杂度为O(N)
例2:计算Fucn2的时间复杂度

T(N)=2N+10,只保留最高次项,系数改为1,则时间复杂度为O(N)
例3:计算Fucn3的时间复杂度

T(N)=M+N,若M和N相差不大,T(N)可看成2N或2M,若M>>N,T(N)=M,若M<<N,T(N)=N,故时间复杂度为O(N)
例4:计算Fucn4的时间复杂度

T(N)=100,只有常数项,用1代替常数,则时间复杂度为O(1)
例5:计算Fucn5的时间复杂度

若要查找的字符在字符串第一个位置,T(N)=1,若要查找的字符在字符串最后一个位置,T(N)=N,若要查找的字符在字符串中间位置,T(N)=N/2或N/2+1(N是偶数),或T(N)=(N+1)/2(N是奇数),因此,Fucn5的时间复杂度分为:最好情况:O(1),最坏情况:O(N),平均情况:O(N)
补充:
有些算法的时间复杂度存在最好、平均和最坏情况
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)
大O的渐进表示法在实际中一般情况关注的是算法的上界,也就是最坏运行情况
故例5的时间复杂度取O(N)
例6:计算BubbleSort的时间复杂度

若数组有序,则T(N)=N,若数组有序且为降序,则:T (N) = N(N-1)/2,故BubbleSort的时间复杂度取最差情况为O(N^2)
例7:计算Func6的时间复杂度

当n=2时,执行次数为1,当n=4时,执行次数为2,当n=16时,执行次数为4,假设执行次数为x ,则2^x= n, 因此执行次数:x = log (2) n,故Func6的时间复杂度为O(log (2) n),当n接近无穷大时,底数的大小对结果影响不大,因此,一般情况下不管底数是多少都可以省略不写,即可以表示为log n,建议使用log n
例8:计算Fac的时间复杂度

递归算法的时间复杂度=单次递归的时间复杂度*递归次数
单次递归的时间复杂度为O(1),递归次数为N,故Fac的时间复杂度为O(N)
相关文章:
学习数据结构(1)时间复杂度
1.数据结构和算法 (1)数据结构是计算机存储、组织数据的方式,指相互之间存在⼀种或多种特定关系的数据元素的集合 (2)算法就是定义良好的计算过程,取一个或一组的值为输入,并产生出一个或一组…...
项目集成GateWay
文章目录 1.环境搭建1.创建sunrays-common-cloud-gateway-starter模块2.目录结构3.自动配置1.GateWayAutoConfiguration.java2.spring.factories 3.pom.xml4.注意:GateWay不能跟Web一起引入! 1.环境搭建 1.创建sunrays-common-cloud-gateway-starter模块…...
【Ubuntu】使用远程桌面协议(RDP)在Windows上远程连接Ubuntu
使用远程桌面协议(RDP)在Windows上远程连接Ubuntu 远程桌面协议(RDP)是一种允许用户通过图形界面远程控制计算机的协议。本文将详细介绍如何在Ubuntu上安装和配置xrdp,并通过Windows的远程桌面连接工具访问Ubuntu。 …...
python3+TensorFlow 2.x 基础学习(一)
目录 TensorFlow 2.x基础 1、安装 TensorFlow 2.x 2、TensorFlow 2.x 基础概念 2、1 Eager Execution 2、2 TensorFlow 张量(Tensor) 3、使用Keras构建神经网络模型 3、1 构建 Sequential 模型 3、2 编译模型 1、Optimizer(优化器&a…...
《活出人生的厚度》
《活出人生的厚度》可以从不同角度来理解和实践,以下为你提供一些拓展内容: ### 不断学习与自我提升 - **持续知识更新**:保持对新知识的渴望,利用各种渠道学习,如在线课程、学术讲座、行业研讨会等。例如,…...
安装 docker 详解
在平常的开发工作中,我们经常需要部署项目。随着 Docker 容器的出现,大大提高了部署效率。Docker 容器包含了应用程序运行所需的所有依赖,避免了换环境运行问题。可以在短时间内创建、启动和停止容器,大大提高了应用的部署速度&am…...
【Rust自学】16.3. 共享状态的并发
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的:Do not commun…...
开发者交流平台项目部署到阿里云服务器教程
本文使用PuTTY软件在本地Windows系统远程控制Linux服务器;其中,Windows系统为Windows 10专业版,Linux系统为CentOS 7.6 64位。 1.工具软件的准备 maven:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…...
【2024年华为OD机试】 (B卷,100分)- 乘坐保密电梯(JavaScriptJava PythonC/C++)
一、问题描述 问题描述 我们需要从0楼到达指定楼层m,乘坐电梯的规则如下: 给定一个数字序列,每次根据序列中的数字n,上升n层或下降n层。前后两次的方向必须相反,且首次方向向上。必须使用序列中的所有数字,不能只使用一部分。目标是到达指定楼层m,如果无法到达,则给出…...
maven的打包插件如何使用
默认的情况下,当直接执行maven项目的编译命令时,对于结果来说是不打第三方包的,只有一个单独的代码jar,想要打一个包含其他资源的完整包就需要用到maven编译插件,使用时分以下几种情况 第一种:当只是想单纯…...
solidity高阶 -- 线性继承
Solidity是一种面向合约的高级编程语言,用于编写智能合约。在Solidity中,多线继承是一个强大的特性,允许合约从多个父合约继承属性和方法。本文将详细介绍Solidity中的多线继承,并通过不同的实例展示其使用方法和注意事项。 在Sol…...
国内外大语言模型领域发展现状与预期
在数字化浪潮中,大语言模型已成为人工智能领域的关键力量,深刻影响着各个行业的发展轨迹。下面我们将深入探讨国内外大语言模型领域的发展现状以及未来预期。 一、发展现状 (一)国外进展 美国的引领地位:OpenAI 的 …...
【Leetcode 热题 100】416. 分割等和子集
问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ …...
C语言------数组从入门到精通
1.一维数组 目标:通过思维导图了解学习一维数组的核心知识点: 1.1定义 使用 类型名 数组名[数组长度]; 定义数组。 // 示例: int arr[5]; 1.2一维数组初始化 数组的初始化可以分为静态初始化和动态初始化两种方式。 它们的主要区别在于初始化的时机和内存分配的方…...
物管系统赋能智慧物业管理提升服务质量与工作效率的新风潮
内容概要 在当今的物业管理领域,物管系统的崛起为智慧物业管理带来了新的机遇和挑战。这些先进的系统能够有效整合各类信息,促进数字化管理,从而提升服务质量和工作效率。通过物管系统,物业管理者可以实时查看和分析各种数据&…...
2024年记 | 凛冬将至
放弃幻想,准备斗争! 考研or就业? 上大学以来,考研上名校在我的心里一直是一颗种子,2024年初,当时的想法是考研和就业两手抓。买了张宇的高数现代,想要死磕! 也记了挺多笔记... 如果…...
MySQL数据导入与导出
在现代软件开发中,数据管理是一个重要的核心环节,而数据库则是进行数据管理的主要工具。MySQL 作为一款开源的关系型数据库管理系统,被广泛应用于企业和个人开发项目中。对于学习编程的初学者或是自学者来说,掌握 MySQL 的基本操作尤为重要,尤其是数据的导入与导出功能。这…...
NoSQL与SQL比较
1.认识NoSQL NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。 1.1.结构…...
Ceph:关于Ceph 中使用 RADOS 块设备提供块存储的一些笔记整理(12)
写在前面 准备考试,整理 ceph 相关笔记博文内容涉及使用 RADOS 块设备提供块存储理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波…...
Android SystemUI——最近任务列表启动(十八)
前面分析了初始化涉及到的关键类,系统启动后会启动 SystemUI 进程,然后进行一系列初始化,接下来看一下进入 Recents 的流程。我们主要分析最近任务应用列表的启动与显示。 一、最近任务启动 关于手势或 Key 按键触发这一块逻辑处理入口都是在 PhoneWindowManager,咱们从 R…...
AI 项目经理 Agent:拆解任务、分配资源与监控风险
AI项目经理Agent:拆解任务、分配资源与监控风险的全流程落地指南从GPT-4发布以来,“AI替代白领”的声音此起彼伏,但作为一名在互联网大厂带过3个亿级SaaS交付项目、同时搞了2年AI辅助项目管理(AIPM)落地的软件工程师&a…...
Python 的串口操作库 pyserial
封装了串口通讯模块,支持Linux、Windows、BSD(可能支持所有支持POSIX的操作系统),支持 Jython (Java) 和 IconPython (.NET and Mono)。 首页 http://pyserial.sf.net/ 1. 特性 所有平台使用同样的类接口端口号默认从0开始&…...
综合能源系统多级环式一体化设计【附代码】
✨ 长期致力于综合能源系统、环式一体化设计、混合求解算法、软件开发应用研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)多级环式一体化设计模型与嵌…...
Zotero插件市场:告别繁琐安装,开启高效学术插件管理新时代
Zotero插件市场:告别繁琐安装,开启高效学术插件管理新时代 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zoter…...
TestDisk与PhotoRec:免费开源的数据恢复双雄终极指南
TestDisk与PhotoRec:免费开源的数据恢复双雄终极指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 在数字时代,数据丢失是每个人都会遇到的噩梦。无论是误删除重要文件、分区表损坏…...
开源机械爪应用宝库:从视觉分拣到项目实战全解析
1. 项目概述:一个开源“机械爪”用例的灵感宝库如果你对机器人、自动化或者开源硬件感兴趣,最近在GitHub上闲逛时,可能刷到过一个叫hesamsheikh/awesome-openclaw-usecases的仓库。光看名字,就能猜个八九不离十:这是一…...
别再只堆叠4层了!用DenseGCN构建超深图网络,点云分割mIoU提升实战
突破GCN深度瓶颈:DenseGCN在点云分割中的实战优化指南 传统图卷积网络(GCN)通常被限制在3-4层的浅层架构中,这种深度限制严重制约了其在点云分割等复杂任务中的表现。本文将揭示如何通过密集连接(Dense Connections&am…...
实时语音AI对话应用开发:从WebRTC到LLM集成的全栈实践
1. 项目概述:实时语音对话的AI应用实践最近在GitHub上看到一个挺有意思的项目,叫proj-airi/webai-example-realtime-voice-chat。光看名字,就能猜到个大概:这是一个基于Web的、利用AI技术实现的实时语音聊天示例。作为一个在音视频…...
如何利用QGIS 3.22为机器学习任务高效构建遥感影像切片数据集
1. 为什么需要QGIS处理遥感影像数据 做机器学习项目时,最头疼的就是数据准备环节。特别是处理遥感影像这种"庞然大物",动辄几个GB的高分辨率图像,直接用Python脚本处理不仅效率低,还容易内存溢出。去年我做城市绿地识别…...
Kleiber:简化多架构Docker镜像构建与发布的自动化工具
1. 项目概述与核心价值最近在整理自己的开发工具链时,又翻出了devgap/kleiber这个项目,它在我日常的容器化开发工作流中扮演了一个相当关键但又不那么起眼的角色。简单来说,Kleiber 是一个 Docker 镜像的构建和发布自动化工具,但它…...
