网站内容丰富/怎么在百度上打广告
目录
八、算法
8.1 概念
8.1.1 非正式定义
8.1.2 示例
8.1.3 定义动作
8.1.4 细化
8.1.5 泛化
8.2 三种结构
8.2.1 顺序
8.2.2 判断
8.2.3 循环
8.3 算法的表示
8.3.1 UML
8.3.2 伪代码
8.4 更正式的定义
8.5 基本算法
8.5.1 求和
8.5.2 求积
8.5.3 最大和最小值
8.5.4 排序
8.5.5 查找
8.6 子算法
8.6.1 结构图
8.7 递归
8.7.1 迭代的定义
8.7.2 递归的定义
八、算法
8.1 概念
8.1.1 非正式定义
算法的一种非正式概念如下:算法是一种逐步解决问题或完成任务的方法。
按照这种定义,算法完全独立于计算机系统。算法需要一组输入数据,并产生一组输出数据。
8.1.2 示例
现在我们要得到一组输入数据(都是整数)里的最大值,为了方便分析算法,我们假设要找到五个输入数据里的最大值,显然这个任务不可能一步完成,根据小学的数学知识,这个算法可以用以下几步实现:
首先检查第一个整数,由于还没有检查其他整数,所以将最大值设为12;
检查第二个数,发现8小于12,所以最大值仍为12;
检查第三个数,发现13大于12,所以最大值变为13;
检查第四个数,发现9小于13,最大值不变;
检查第五个数,发现11小于13,最大值不变。
经过五个步骤就可以得出这组数中的最大值为13.
8.1.3 定义动作
将上述五个步骤定义为五个动作,通过算法中的这五个动作就可以找到数据中的最大值。
8.1.4 细化
为了使算法能在所有的程序中使用,还需要进行细化。现在有两个问题:第一步中的动作和其他步不一样;第二步到第五步中的程序描述语言不同。对动作进行改进后可以得到:
8.1.5 泛化
将这个算法推广到 个数中找最大值,只要让计算机循环步骤一
次。
8.2 三种结构
计算机专家为结构化程序或算法定义了三种结构。这种想法认为程序必定是由顺序、判断(选择)、循环三种结构组成的,已经证实其他结构都是不必要的。仅仅使用这三种结构就可以使程序或算法容易理解、调试或修改。
8.2.1 顺序
第一个结构称为顺序结构。算法(最终是程序)都是指令序列,可以是简单指令或是其他两种结构之一。
8.2.2 判断
有些问题只用简单指令是无法解决的。有时候需要检测一个条件,当这个条件满足时执行一系列操作;这个条件不满足时执行另外一系列操作。这就是判断(选择)结构。
8.2.3 循环
在有些问题中,相同的指令需要重复,可以使用循环结构来解决这个问题。
8.3 算法的表示
8.3.1 UML
统一建模语言(UML)是算法的图形表示。它使用“大图”的形式掩盖了算法的所有细节,只显示算法从开始到结束的整个流程。
8.3.2 伪代码
伪代码是算法的一种类似英语的表示法,现在还没有伪代码的标准。伪代码与真正的代码相似,区别就是伪代码无法运行。
8.4 更正式的定义
算法是一组明确步骤的有序集合,它产生结果并在有限时间内终止。
定义良好:算法必须是一组定义良好的且有序的指令集合。在数学中,定义良好的函数指的是相同的自变量应该有相同的函数值、对于每一个存在的自变量都应该存在对应的函数值。放在算法中可以理解为,算法对于所有可能的输入都是有效。
明确步骤:算法的每一步都必须有清晰、明白的定义,不能产生歧义。
产生结果:算法必须产生结果,否则算法就是无意义的。这个结果可以是数据也可以是产生的其他影响。
有限时间内终止:算法必须能够在有限时间内终止,否则就不能叫算法(例如无限循环)。
8.5 基本算法
这里讨论算法只是概括性的描述思路,算法的理解和实现要在学习了编程语言后才能明白的更透彻。
8.5.1 求和
分为三个逻辑部分:
将和(sum)初始化;
循环,在每次迭代中将新的数加到和上;
退出循环并返回结果。
8.5.2 求积
分为三个逻辑部分:
将积(product)初始化;
循环,每次迭代将新的数乘到积上;
退出循环后返回结果。
8.5.3 最大和最小值
在本文最开始已经描述过,最大和最小不同的地方在于,一个在初始化时要使用很小的数,一个在初始化时要使用很大的数。
8.5.4 排序
计算机科学中一个最普遍应用是排序,即根据数据的值对它们进行排列。如果没有排序,查找会变得非常困难。例如,在一个杂乱无序的通讯录里找一个人是非常困难的,但如果按照某种规则排好序,那么就会方便很多。
下面简单介绍三种最基础排序算法的思路。
1. 选择排序
在选择排序中,将待排序的数列分为两个部分,已排序子列表和未排序子列表。每次循环找到未排序子列表中的最小值(也可以是最大值)并与未排序子列表中的第一个元素交换位置,算法开始的时候,整个列表都是未排序子列表。 个数的列表需要
轮完成排序,最后一个数是排好序的,不需要再循环。
2. 冒泡排序
在冒泡排序中,也将列表分为已排序子列表和未排序子列表。在每次循环中,从未排序子列表的第一个元素开始,元素之间两两比较(第一个和第二个比,第二个和第三个比,依次下去),当前一个元素较大(较小)时,两元素交换位置,这样每轮比较之后,未排序子列表中最小(最大)的元素就像气泡一样慢慢冒到未排序子列表最前端,在算法开始时,整个列表都是未排序子列表。 个数的列表需要
轮完成排序,最后一个数是排好序的,不需要再循环。
图中冒泡排序算法,元素从后往前比较,但不管从前往后还是从后往前,其本质和效率都是相同的。
3. 插入排序
在插入排序中,列表也被分为已排序子列表和未排序子列表。在每次循环中,拿出列表当前位置的元素,并将它插入到已排序列表中的合适位置,就像接扑克牌一样,新的数(牌)只要插入到排好序序列的合适位置,整个序列就是有序的,与前两个算法不同的是,在算法开始时,第一个位置认为是已排序的,因为只有一个数,所以它就在它应该插入的位置,插入从第二个位置的元素开始,直到最后一个元素正确插入。 个数的列表需要
轮完成排序。
4. 其他排序算法
这三种算法是最低效的,但是它们简单易懂,还有例如快速排序、归并排序等更高效的排序算法。评价算法性能的两个指标是时间复杂度和空间复杂度,这两个概念会在后面的学习中学到。
8.5.5 查找
在计算机科学里还有一种常用的算法叫作查找,是一种在列表中确定目标所在位置的算法。
1. 顺序查找
用于在无序且较小的列表中查找,通过检查列表中的每个元素,找到目标元素所在的位置。如果列表有序或是很大,那么有更高效的查找算法。
2. 折半查找(二分法)
用于有序数列中的查找。首先找到数列的中间元素(通过数列最左侧坐标与最右侧坐标之和除以2来找到),如果要查找的数比它大,那么就应该在它的右边(或左边)查找,如果比它小,就应该在左边(或右边)查找,如果刚好等于它,那么直接返回。当确定要查找的半区后,将这个半区看成新的数列,但是坐标仍然使用它在原数列的坐标,对这个半区重新使用相似的方法,由于中间元素已经考察过,所以在更新最左侧或最右侧坐标时要去掉中间元素。如此循环,直到更新后的最左侧坐标大于最右侧坐标(说明查找的值不存在)或是找到目标值。
8.6 子算法
结构化编程要求将算法分成几个单元,称为子算法。每个子算法又分为更小的子算法。使用子算法的优点是:程序更容易理解;子算法可在主算法中的不同地方调用,无须重写。
8.6.1 结构图
程序员使用的另一个工具是结构图。结构图是一种高级设计工具,它显示算法和子算法之间的关系,它一般在设计阶段使用。结构图一般从上到下、从左到右阅读。
8.7 递归
8.7.1 迭代的定义
如果算法的定义不涉及算法本身,则算法是迭代的。例如,求阶乘的迭代定义:
8.7.2 递归的定义
当一个算法出现在它本身的定义中,这个算法就是递归的。例如,求阶乘的递归定义:
递归实际上是将一个复杂问题由高到低分解,并从低到高解决这个问题。
相关文章:

计算机科学导论笔记(六)
目录 八、算法 8.1 概念 8.1.1 非正式定义 8.1.2 示例 8.1.3 定义动作 8.1.4 细化 8.1.5 泛化 8.2 三种结构 8.2.1 顺序 8.2.2 判断 8.2.3 循环 8.3 算法的表示 8.3.1 UML 8.3.2 伪代码 8.4 更正式的定义 8.5 基本算法 8.5.1 求和 8.5.2 求积 8.5.3 最大和最…...

嵌入式从业10年,聊聊我对工业互联网和消费物联网的看法 | 文末赠书4本
嵌入式从业10年,聊聊我对工业互联网和消费物联网的看法 工业互联网和消费物联网,有何异常点?本文,博主将结合自己的亲身经历,现身说法,聊聊博主对工业互联网和消费物联网的看法。 文章目录1 写在前面2 我眼…...

python的django框架从入门到熟练【保姆式教学】第一篇
当今,Python已成为最受欢迎的编程语言之一。而Django是一个基于Python的Web框架,它能够帮助你快速、高效地开发Web应用程序。如果你是一名初学者,学习Django框架可能会让你感到有些困惑。不过,不用担心,我们将为你提供…...

浏览记录或者购物车的去重处理
saveHistory(){// 获取缓存数据let historyArr uni.getStorageSync(historyArr) || []//需要添加的数据let item{id:this.detail.id,classid:this.detail.classid,title:this.detail.title,picurl:this.detail.picurl,looktime:parseTime(Date.now())};// forEach和findIndex的…...

Ubantu docker学习笔记(二)拉取构建,属于你的容器
文章目录一、拉取启动容器二、本地镜像初解三、构建镜像3.1使用docker commit构建镜像切换阿里镜像3.2使用dockerfile构建镜像四、总个结吧这里的话,就详细说说小唐对于容器的配置,对了!小唐参考的书籍是Linux容器云实战!…...

指针数组 数组指针 常量指针 指针常量 函数指针 指针函数
一、指针常量与常量指针 1、指针常量 本质上是一个常量,常量的类型是指针,表示该常量是一个指针类型的常量。在指针常量中,指针本身的值是一个常量,不可以改变,始终指向同一个地址。在定义的时候,必须要初…...

前端js学习
1. js入门 1.1 js是弱类型语言 1.2 js使用方式 1.2.1 在script中写 1.2.2 引入js文件 1.2.3 优先级 1.3 js查错方式 1.4 js变量定义 1.4 js数据类型 数据类型英文表示示例数值类型number1.1 1字符串类型string‘a’ ‘abc’ “abc”对象类型object布尔类型booleannumber函数…...

“华为杯”研究生数学建模竞赛2007年-【华为杯】A题:食品卫生安全保障体系数学模型及改进模型(附获奖论文)
赛题描述 我国是一个拥有13亿人口的发展中国家,每天都在消费大量的各种食品,这批食品是由成千上万的食品加工厂、不可计数的小作坊、几亿农民生产出来的,并且经过较多的中间环节和长途运输后才为广大群众所消费,加之近年来我国经济发展迅速而环境治理没有能够完全跟上,以至…...

转战C#---day2
定义数组: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Relay_Sin_Com {class Program{static void Main(string[] args){int[] ages1 {3240,242,34};Console.WriteLine(age…...

【vue2源码学习】— diff
vue更新还是调用了 vm._update 会进入下面这一步 vm.$el vm.__patch__(prevVnode, vnode) 又回到了patch方法 会通过sameVnode 判断是不是相同的vnode// patch代码片段 const isRealElement isDef(oldVnode.nodeType) if (!isRealElement && sameVnode(oldVnode, vno…...

更换 Linux 自带的 jdk 环境
如下,我要把 Linux 默认的 jdk 版本换成我自己的 jdk 版本。 Linux 自带的 jdk 环境: 要更换的 jdk 环境: 1、切换到 root 用户进行操作; 2、在根目录下创建一个 /export/server/ 目录; [rootcentos /]# mkdir -p /e…...

MySQL8读写分离集群
文章目录前言MySQL读写分离原理搭建MySQL读写分离集群MySQL8.0之前MySQL8.0之后后记前言 上一期介绍并实现了MySQL的主从复制,由于主从复制架构仅仅能解决数据冗余备份的问题,从节点不对外提供服务,依然存在单节点的高并发问题 所以在主从复…...

蓝桥冲刺31天之第七天
目录 A:三角回文数 B:数数 C:数组切分 D:倍数问题 一星陨落,黯淡不了星空灿烂; 一花凋零,荒芜不了整个春天。 如果命运是世界上最烂的编剧, 你就要争取做人生最好的演员。 即使生…...

【Python百日进阶-Web开发-Vue3】Day550 - Vue3 商城后台 10:Veux4-02基本使用
文章目录 二、Vuex的基本使用2.4 Mutations 应用 :同步更新state2.4.1 `src/store/index.js`2.4.2 `src/views/index.vue`2.5 Module的应用:分模块2.5.1 `src/store/modules/product.js`2.5.2 `src/store/modules/cart.js`2.5.3 `src/store/index.js`2.5.4 `src/views/index.…...

ESP32驱动-红外寻迹传感器驱动
红外寻迹传感器驱动 1、红外寻迹传感器介绍 红外寻迹传感器具有一对红外线发射管与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,输出接口会输出一个数字信号(低电平或高电平,取决于电路…...

【TS】TypeScript泛型 T 的用法详解
一、什么是泛型? 泛型,从字面上理解,泛型就是一般的,广泛的的意思。 TypeScript中泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体类型,而是在使用的时候再指定类型…...

Vue 3.0 单文件组件 【Vue3 从零开始】
#介绍 在很多 Vue 项目中,我们使用 app.component 来定义全局组件,紧接着用 app.mount(#app) 在每个页面内指定一个容器元素。 这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的…...

北邮22信通:你是不是在looking for……那串代码?(2)第三章单链表
相信有了第二章顺序表的基础,小伙伴们学习第三章链表应该会轻松一点吧 目录 类模板下的单链表 1.1书上干净完整代码(无增改、适合自己动手实验) 1.2对书上代码的完善和对一些问题的验证和解释代码 1.补全一个函数: 2.this指…...

蓝库云|告诉你传统产业该如何进行数字化转型
在后疫情时代下,企业该如何在面临生存危机的情形下,投入「数字化转型」、提升公司竞争力,已成为许多公司的当务之急,但到底什么是数字化转型呢?传统产业又如何着手进行数位转型? 数字化转型是什么…...

121.(leaflet篇)leaflet结合echarts4迁徙图
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>...

链表及其基本操作
1.单链表:1.1定义/性质:链表是线性表的链式存储方式。单链表通过指针线性遍历,删除/增加节点时间复杂度为O(1),访问节点时间复杂度为O(n)。单链表分为带头结点和不带头结点两种,带头结点是为了方便统一操作(…...

【Java基础 下】 031 -- 反射 动态代理
一、什么是反射? 换句话说就是(从类里拿出来) 可以获取到:(利用反射,我们可以获取到类中所有的东西) 获取是先从class字节码文件中获取的 二、获取class对象的三种方式 三种方式也对应了三种阶段…...

springcloud3 GateWay
一 GateWay 1.1 GateWay的作用 gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件ÿ…...

万字长文:Stable Diffusion 保姆级教程
万字长文:Stable Diffusion 保姆级教程 2022年绝对是人工智能爆发的元年,前有 stability.ai 开源 Stable Diffusion 模型,后有 Open AI 发布 ChatGPT,二者都是里程碑式的节点事件,其重要性不亚于当年苹果发布iPhone&a…...

WAMP搭建靶场
WAMP W:windows A:apache M:mysql,mariadb P:php 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) 2. 安装phpstudy 默认安装即可 3. 下载DVWA靶场 https://github.com/digininja/DVWA/archive/…...

Uipath Excel 自动化系列13-ForEachExcelSheet(遍历Sheet)
活动描述 ForEachExcelSheet(遍历Sheet):遍历Excel中的工作表,可以对 Excel 工作簿中的每个工作表重复一个或多个活动,该活动需与Use Excel File 活动选择的 Excel 文件一起使用。 使用场景:当处理包含多张工作表的 Excel 文件,…...

JDBC快速入门
🍎道阻且长,行则将至。🍓 目录 一、JDBC入门 1.概述 (1)JDBC本质 (2)JDBC好处 2.快速入门 (1)步骤 (2)实践 (3)两个小问题 一、JDBC入门 1.概述 JDBC就是使用Java语言操作关系型数据库的一套API,全称:( Java…...

蓝桥杯三月刷题 第六天
文章目录💥前言😉解题报告💥星期计算🤔一、思路:😎二、代码:💥考勤刷卡🤔一、思路:😎二、代码:💥卡片🤔一、思路:😎二、代…...

分享几个常用的运维 shell 脚本
今天咸鱼给大家分享几个不错的 Linux 运维脚本,这些脚本中大量使用了 Linux 的文本三剑客: awkgrepsed 建议大家这三个工具都要了解并最好能够较为熟练的使用 根据 PID 显示进程所有信息 根据用户输入的PID,过滤出该PID所有的信息 #! /b…...

分隔链表(精美图示详解哦)
全文目录引言分隔链表题目描述与思路实现总结引言 前面,我们熟悉了管理链表中的数据的方法,也了解了几道与链表相关的题目: 戳我看单链表详解哦 在本篇文章中,我们将再了解一道题目:分隔链表: 分隔链表OJ…...