算法中的复杂度(先做个铺垫)

文章目录

  • 定义与分类
  • 时间复杂度
    • 概念
    • 大O的渐进表示法
    • 举例
    • 情况
    • 注意
    • 内涵
  • 空间复杂度
  • 最优解

定义与分类

复杂度:衡量算法效率的标准
时间效率:衡量这个算法的运行速度,也就是我们常说的时间复杂度
空间效率:衡量这个算法所需要的额外空间,也就是我们常说的空间复杂度

时间复杂度

概念

在计算机科学中,算法的时间复杂度是一个函数,它定量的描述了该算法的运行时间。
一个算法执行所耗费的时间,从理论上说是不能算出来的,只有你把你的程序放在机器上跑起来才能知道,但是我们需要每个算法都需要上机测试吗?那样是不是很浪费时间,还很麻烦,所有才有了时间复杂度这个分析式。
一个算法所花费的时间与其中语句执行的次数成正比,算法中基本操作的执行次数,为算法的时间复杂度

大O的渐进表示法

一般我们用大O的渐进法来表示时间复杂度,并给出了一个问题的规模,这个规模我们统称为N
推导方法

  1. 用常数1取代运行时间中的所有加法函数
  2. 在修改后的运行次数函数中,只保留最高阶限
  3. 如果最高阶存在且不是1,去掉最高项的系数

得到的结果就是大O阶
简单的说时间复杂度就是一个和数据量有关,只要高阶项,不要低阶项,不要常数项的操作次数表达式

举例

1.选择排序

public void selectSort(){int[] arr = {1,5,9,6,3};for (int i = 0; i < arr.length -1; i++) {for (int j = i; j < arr.length -1; j++) {if (arr[i] >arr[j+1]){int temp = arr[i];arr[i] = arr[j+1];arr[j+1] = temp;}}}
}

第一次:索引从0到N-1过一遍选出最小值,循环次数为N
第二次:索引从1到N-1过一遍选出最小值,循环次数为N-1
第三次:索引从2到N-1过一遍选出最小值,循环次数为N-2
依次类推…
第N次:索引从N-1到N-1过一遍选出最小值,循环次数为1
循环次数为(N+N-1+N-2+…+1),为等差数列
我们知道等差数列最后的结果为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
根据推导方法我们得出选择排序的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
2.插入排序
这里插入一个知识点:严格固定流程的算法,一定强调最差情况!
插入排序中,被进行排序的数组可以是有序数组,也可以是无序数组。
有序数组中,数组插入一次,进行比大小,不需要换位置,所以最后的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传;在无序数组中,可以是随机无序,最坏的情况就是一个降序数组,但是你需要一个升序的数组,数组插入一次,就要与前面交换位置,前面几个元素就要交换几次,时间复杂度为1+2+3+…+N为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,那最后插入排序的时间复杂度到极为多少呢?
遇到这种情况,因为插入排序的代码是固定的,所以称为固定流程的算法,我们要用最差情况来计算时间复杂度,所以插入排序的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

情况

  1. 算法流程上利用随机行为作为重要部分的,要看平均或者期望的时间复杂度,因为最差的时间复杂度无意义(生成相邻值不同的数组)
  2. 时间复杂度的均摊,(动态数组,N个数的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,那么一个数的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传)

注意

  1. 不要用代码结构来判断时间复杂度,比如只有一个while循环的冒泡排序,时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  2. 不要用代码结构来判断时间复杂度,比如N/1+N/2+…+N/N,这个流程的时间复杂度为外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传调和级数
  3. 时间复杂度只能是对算法流程充分理解才能分析出来的,而不是简单的看代码结构!
  4. 时间复杂度很重要,可以直接判断某个方法能不能通过一个题目,根据数据量猜解法

内涵

描述算法运行时间和数据量的关系,而且当数据量很大很大时,关系相当的本质,排除了常熟时间的干扰

空间复杂度

实现该算法所需的额外空间

最优解

先满足时间复杂度最优,然后尽量少用空间的解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 专属指南:利用ChatGPT提升论文写作效率

ChatGPT无限次数:点击直达 ChatGPT 专属指南&#xff1a;利用ChatGPT提升论文写作效率 引言 随着人工智能技术的不断发展&#xff0c;如今许多工具被开发出来&#xff0c;以帮助人们更高效地进行各种工作。其中&#xff0c;ChatGPT作为一个强大的语言生成模型&#xff0c;不仅…

分布式结构化数据表Bigtable

文章目录 设计动机与目标数据模型行列时间戳 系统架构主服务器Chubby作用子表服务器SSTable结构子表实际组成子表地址组成子表数据存储及读/写操作数据压缩 性能优化局部性群组&#xff08;Locality groups&#xff09;压缩布隆过滤器 Bigtable是Google开发的基于GFS和Chubby的…

云计算:Linux 部署 OVN 集群

目录 一、实验 1.环境 2.Linux 部署 OVN 集群&#xff08;中心端&#xff09; 3.Linux 部署 OVN 集群&#xff08;业务端1&#xff09; 4.Linux 部署 OVN 集群&#xff08;业务端2&#xff09; 4.OVN 中心端 连接数据库 5.OVN 业务端1 加⼊控制器 6.OVN 业务端2 加⼊控…

【uniapp】初始化项目

初始化uniapp项目 创建 Vue3/Vite 工程 # 创建以 javascript 开发的工程 npx degit dcloudio/uni-preset-vue#vite my-vue3-project # 创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 如果报错&#xff0c;或者网络问你等无法…

强大的压缩和解压缩工具 Keka for Mac

Keka for Mac是一款功能强大的压缩和解压缩工具&#xff0c;专为Mac用户设计。它支持多种压缩格式&#xff0c;包括7z、Zip、Tar、Gzip和Bzip2等&#xff0c;无论是发送电子邮件、备份文件还是节省磁盘空间&#xff0c;Keka都能轻松满足用户需求。 这款软件的操作简单直观&…

Tesserocr 的安装步骤

Tesserocr 的安装 OCR&#xff0c;即 Optical Character Recognition&#xff0c;光学字符识别。是指通过扫描字符&#xff0c;然后通过其形状将其翻译成电子文本的过程。那么对于图形验证码来说&#xff0c;它都是一些不规则的字符&#xff0c;但是这些字符确实是由字符稍加扭…

数据结构与算法——20.B-树

这篇文章我们来讲解一下数据结构中非常重要的B-树。 目录 1.B树的相关介绍 1.1、B树的介绍 1.2、B树的特点 2.B树的节点类 3.小结 1.B树的相关介绍 1.1、B树的介绍 在介绍B树之前&#xff0c;我们回顾一下我们学的树。 首先是二叉树&#xff0c;这个不用多说&#xff…

Linux的文件操作中的静态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 &#xff08;因为需要 编译&#xff09; 动态库&#xff0c…

Spring Cloud学习笔记:Eureka集群搭建样例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、项目架构2、Dependency3、项目启动类4、application.yml5、启动项目 1、项目架构 因为这是单机模拟集群搭建&#xff0c;为了方便管理就都放在了一个项目中。这次准备搭建三个项目server1, server2, server3 …

常见的垃圾回收算法

文章目录 1. 标记清除算法2. 复制算法3. 标记整理算法4. 分代垃圾回收算法 1. 标记清除算法 核心思想&#xff1a; 标记阶段&#xff0c;将所有存活的对象进行标记。Java中使用可达性分析算法&#xff0c;从GC Root开始通过引用链遍历出所有存活对象。清除阶段&#xff0c;从…

ES6 的解构赋值

解构赋值&#xff08;Destructuring assignment&#xff09;是一种方便快捷的方式&#xff0c;可以从对象或数组中提取数据&#xff0c;并将数据赋值给变量。解构赋值是ES6中一项强大且常用的特性. 1. 基本数组解构 首先&#xff0c;让我们看看如何对数组进行解构赋值。假设我…

IT运维中负载均衡的原理,包括它的作用、原理和算法优化

负载均衡在IT运维中扮演着重要的角色&#xff0c;它能够提高系统的性能、可靠性和可扩展性。本文将详细介绍负载均衡的原理、作用、优化方面以及几种常见的负载均衡算法&#xff0c;并提供一些具体的应用示例。 一、负载均衡的作用 负载均衡的主要作用是将客户端请求均匀地分…

C++ 泛型编程 模板

1.模板 就是建立通用的模具&#xff0c;大大提高复用性 模板的特点&#xff1a; 模板不可以直接使用&#xff0c;它只是一个框架 模板的通用并不是万能的 * C另一种编程思想称为 泛型编程 &#xff0c;主要利用的技术就是模板 * C提供两种模板机制:**函数模板**和**类模板*…

快速配置docker 国内源地址

前言 用于快速配置docker国内镜像&#xff0c;和自定义的docker存储路径。 执行代码 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://dockerproxy.com","https://docker.mirrors.ustc.…

webrtc中的Track,MediaChannel,MediaStream

文章目录 Track,MediaChannel,MediaStream的关系MediaStream的创建流程创建VideoChannel的堆栈创建VideoStream的堆栈 sdp中媒体参数信息的映射sdp中媒体信息参数设置体系参数设置流程参数映射体系 Track,MediaChannel,MediaStream的关系 Audio/Video track&#xff0c;MediaC…

[每周一更]-第93期:探索大型生成式聊天工具:从ChatGPT到未来

随着人工智能技术的不断进步&#xff0c;生成式聊天工具正逐渐成为人们日常生活中的一部分。这些工具利用深度学习技术和大规模语言模型的强大能力&#xff0c;能够与用户进行自然、流畅的对话&#xff0c;为我们提供了更加智能和个性化的交流体验。 ChatGPT&#xff1a;开启生…

[前端][杂项] React版本

前言 前端框架版本迭代很快&#xff0c;所以熟悉框架的版本也很重要。 React 版本介绍 。github上有更加详细的文档 React历史版本下载 因为 React 使用的是 jsx 如果要在浏览器环境中使用 jsx 那么还需要使用babel.js把jsx转换成原生js文件才能被浏览器使用。 babel官网 babe…

基于RT-Thread(RTT)的BMP280气压计驱动(I2C通信)

前言 本文基于RTT操作系统使用STM32F401RET6驱动BMP280气压计模块&#xff0c;使用I2C协议通信 一、新建工程 二、添加软件包 三、添加这个包 四、打开CubeMX 五、配置时钟源&#xff0c;使用外部晶振 六、配置串行下载口 七、打开I2C&#xff0c;我这里使用的是I2C2&#x…

LabVIEW直流稳定电源自动化校准系统

LabVIEW直流稳定电源自动化校准系统 直流稳定电源正向着智能化、高精度、多通道、宽量程的方向发展。基于LabVIEW开发环境&#xff0c;设计并实现了一种直流稳定电源自动化校准系统&#xff0c;以提升校准过程的整体效能&#xff0c;实现自动化设备替代人工进行电源校准工作。…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…