数据结构【第2章】——算法

news2024/11/18 23:40:59

算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

注:算法定义中,提到了指令,指令能被人或计算装置执行。它可以是计算机指令,也可以是我们平时的语言文字。

程序 = 数据结构 + 算法

算法的五个特性

  • 有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  • 确定性:算法中每一条指定必须有确切的含义,读者理解时不会产生二义性。并且在任何条件下,算法只有惟一的一条执行路径,即对于相同的输入只能得出相同的输出。
  • 可行性:一个算法是能行的。即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
  • 输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。
  • 输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。

注意:算法必须是有穷的,而程序可以是无穷的。

算法设计的要求

  • 正确性:算法能够满足具体问题的需求。
  • 可读性:算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解。
  • 健壮性:当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
  • 时间效率高与存储量低:效率指的是算法执行的时间。存储量需求指算法执行过程中所需要的最大存储空间。
    在这里插入图片描述

算法效率的度量方法

1)事后统计法
这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
2)事前统计法
在计算机程序编制前,依据统计方法对算法进行估算。

一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决干下列因素:

在这里插入图片描述
最终,在分析程序的运行时间时,最重要的是把程序看成是独立于程序设计语言的算法或一系列步骤。

判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数。

时间复杂度

时间复杂度定义

在这里插入图片描述
注:除非特别指定,通常我们提到的运行时间都是最坏情况的运行时间。

推导大O阶

O(1):常数阶
O(n):线性阶
O(n^2):平方阶
在这里插入图片描述
在这里插入图片描述

对数阶

在这里插入图片描述

常见的时间复杂度

在这里插入图片描述
在这里插入图片描述

常<对<幂<指<阶在这里插入图片描述
求和定理:假设T1(n)和T2(n)是程序段P1、P2的执行时间,并且T1(n)= O(f(n)), T2(n)=O(g(n)),那么
总执行时间复杂度是T1(n)+T2(n)= O(MAX(f(n),g(n)))。(多个并列循环)。

求积定理:假设T1(n)和T2(n)是程序段P1、P2的执行时间,并且T1(n)= O(f(n)), T2(n)=O(g(n)),那么
总执行时间复杂度是T1(n)*T2(n)= O(f(n)*g(n))。(多层嵌套循环·)

1)顺序执行的代码只会影响常数项,可以忽略
2)只需挑选循环中的一个基本操作分析它的执行次数与n的关系即可。
3)如果有多层嵌套循环,只需关注最深层循环循环了几次。

最坏时间复杂度:最坏情况下算法的时间复杂度
最好时间复杂度:最好情况下算法的时间复杂度
平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间

时间复杂度是指最坏时间复杂度,只关注最高此项,只有常数项记作1。

空间复杂度

算法存储包含:输入数据所占的空间、程序本身所占的空间和临时变量所占的空间。
算法空间复杂度 S(n) = O(f(n))
算法原地工作指算法所需的辅助空间为常量,S(n)= O(1)。

空间复杂度,只需关注存储空间大小与问题规模相关的变量。

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

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

相关文章

基于基于Web停车场管理系统的设计与实现-【开题报告】

文章目录 本系列校训毕设的技术铺垫文章主体层次选题目的和意义&#xff1a;课题研究目标、内容和手段&#xff1a;系统功能设计&#xff08;论文&#xff09;提纲&#xff1a;日程安排&#xff1a;参考文献 配套资源 本系列校训 互相伤害互相卷&#xff0c;玩命学习要你管&am…

机房环境、动力、网络、安防,帮您提高运维效率,确保机房安全

机房作为单位的核心部门&#xff0c;由计算机、服务器、网络设备、存储设备等关键设备组成&#xff0c;智能化计算机机房这个概念在各个领域中&#xff0c;已经占据了很重要的地位&#xff0c;伴随着国家大力倡导的&#xff0c;东数西算&#xff0c;数字经济、云计算、5G大数据…

FastAPI 是什么?小白必看

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建基于 Python 的 API。它是一个开源项目&#xff0c;基于 Starlette 和 Pydantic 库构建而成&#xff0c;提供了强大的功能和高效的性能。 FastAPI 官网地址&#xff1a;FastAPI FastAP…

Handler源码详解

Handler在Android开发中经常使用&#xff0c;我们从经常使用的sendMessage 看一下Handler的源码&#xff1a; 实际是调用了sendMessageDelayed,只不过delayMillis0了。 接着调用了 sendMessageAtTime函数 引出一个很重要的角色MessageQueue消息队列&#xff0c;enqueueMessag…

uniapp uview文件上传的文件不是文件流,该如何处理?用了uni.chooseImage预览功能要如何做

在使用uniapp开发&#xff0c;运用的ui是用uview&#xff0c;这边需要做一个身份认证&#xff0c;如下图 使用的是uview的u-upload组件&#xff0c;可是这个组件传给后端的不是文件流 后端接口需要的是文件流格式&#xff0c;后面使用了uniapp的选择图片或者拍照的api&#x…

Sentaurus TCAD 频繁跳出窗口

软件提示激活窗口&#xff0c;想要永久去掉这个窗口&#xff0c;需要进入root权限后复制下面的代码&#xff0c;然后回车运行 sed -i “s|enabled1|enabled0|g” /etc/yum/pluginconf.d/fastestmirror.conf mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Bas…

Redis主从复制、哨兵机制、集群分片

一.主从复制 1.概述 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(master)&#xff0c;后者称为从节点(slave)。 数据的复制是单向的&#xff0c;只能由主节点到从节点。默认情况下&#xff0c;每台Redis服务器都是主…

变透明的黑匣子:UCLA 开发可解释神经网络 SNN 预测山体滑坡

内容一览&#xff1a;由于涉及到多种时空变化因素&#xff0c;山体滑坡预测一直以来都非常困难。深度神经网络 (DNN) 可以提高预测准确性&#xff0c;但其本身并不具备可解释性。本文中&#xff0c;UCLA 研究人员引入了 SNN。SNN 具有完全可解释性、高准确性、高泛化能力和低模…

vue3 vant组件的引入方式

vue3中如何使用vant组件 创建项目及环境&#xff1a;vue3 ts vite 一、全局组件全部引用 注意&#xff1a;配置 unplugin-vue-components 插件后&#xff0c;将不允许以这种方式导入组件 1.安装vant 在项目目录下运行 npm i vant // Vue 3 项目&#xff0c;安装最新版 Va…

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

大数据学习教程:Linux 高级教程(上)

一、Linux用户与权限 1. 用户和权限的基本概念 1.1、基本概念 用户 是Linux系统工作中重要的一环, 用户管理包括 用户 与 组 管理 在Linux系统中, 不论是由本级或是远程登录系统, 每个系统都必须拥有一个账号, 并且对于不同的系统资源拥有不同的使用权限 对 文件 / 目录 的…

【Linux学习】日积月累——进程控制

一、进程创建 1.1 fork函数的认识 #include<unistd.h> pid_t fork(void); 返回值&#xff1a;自进程返回0&#xff0c;父进程返回子进程PID&#xff0c;出错返回-1进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;分配新的内存块…

英语不好能学好Python吗?Python常用英文单词汇总

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 有些小可爱对英语好不好对学习python有没有什么影响有着很深的疑惑。 其实python学习&#xff0c;主要靠多敲多练&#xff0c;主打一个熟能生巧 那今天我就给大家带来Python常用英文单词汇总&#xff0c; 新手期小可…

关于领导要求logback日志时间格式要求为“年-月-日 时:分:秒,毫秒”

今天接到领导邮件要求整改系统输出日志规范&#xff0c;有一条要求调整输出日志时间格式为标题所述格式&#xff0c;例&#xff1a;2022-02-21 14:13:32,489 项目目前logback.xml里的配置是这样&#xff1a; <pattern>%d{yyyyMMdd hh:mm:ss} [%p][%c][%M][%L]-> %m%…

docker容器所有操作、创建私有仓库

目录 一、创建容器与运行容器 1、创建容器 2、启动容器&#xff08;后面加镜像:标签或者唯一ID都可以&#xff09; 3、容器的运行与终止 4、容器的进入 5、容器的导出与导入 6、容器的删除 7、文件复制 8、查看容器资源使用率 9、查看容器进程状态 10、更新容器配置 …

捷码低代码|5种常见的布局组件介绍!

在捷码中亲自体验&#xff0c;学习效果更好&#xff01;没有账号的&#xff0c;点击免费获得账号&#xff1a;http://dev.gemcoder.com/front/development/index.html#/login 本文会介绍五种布局组件&#xff0c;即流式布局、弹性布局、固定布局、多行多列布局、Layout布局。 一…

喜讯! WorkPlus入选中国信通院数字产品“2023全景图”!

“2023数字生态发展大会”暨中国信通院“铸基计划” WorkPlus喜讯 7月27日&#xff0c;中国信息通信研究院&#xff08;下称“中国信通院”&#xff09;主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开&#xff0c;大会全面地总结了“铸基计划”上半…

企业优化效率,进行数据在线管理是不二选择

如今商业环境的竞争是愈发激烈了起来&#xff0c;企业优化效率成为了提高竞争力和发展壮大的关键。数据与图文档管理是企业运营中不可或缺的一环&#xff0c;传统管理方式已不适应快速变化的市场需求和多样化的业务流程。而在线图文档管理结合BOM系统作为企业数字化管理的不二选…

无涯教程-Lua - repeat...until 语句函数

与 for 和 while 循环(它们在循环顶部测试循环条件)不同&#xff0c;Lua编程中的 repeat ... until 循环语言在循环的底部检查其条件。 repeat ... until 循环与while循环相似&#xff0c;不同之处在于&#xff0c;保证do ... while循环至少执行一次。 repeat...until loop - …

openGauss学习笔记-28 openGauss 高级数据管理-NULL值

文章目录 openGauss学习笔记-28 openGauss 高级数据管理-NULL值28.1 IS NOT NULL28.2 IS NULL openGauss学习笔记-28 openGauss 高级数据管理-NULL值 NULL值代表未知数据。无法比较NULL和0&#xff0c;因为它们是不等价的。 创建表时&#xff0c;可以指定列可以存放或者不能存…