06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标
目录
1 算法的定义
2 算法的三种表现形式
2.1 自然语言
2.2 伪代码
2.3 流程图
3 算法的五个特性
3.1 有穷性
3.2 确定性
3.3 可行性
3.4 输入
3.5 输出
4 好算法的设计目标
4.1 正确性
4.2 可读性
4.3 健壮性
4.4 通用性
4.5 高效率与低存储量
1 算法的定义
算法是指为解决特定问题而设计的一系列明确、有限的指令集合。简而言之,算法就是解决问题的方法或步骤。
2 算法的三种表现形式
2.1 自然语言
使用日常使用的语言来描述算法的步骤,通常较为直观但可能缺乏精确度。
示例:冒泡排序算法
从数组的第一个元素开始,比较相邻的两个元素。
如果前一个元素大于后一个元素,则交换它们的位置。
继续比较下一个相邻的两个元素,直到数组的最后一个元素。
重复上述过程,每次遍历都将最大的未排序元素移动到数组的末尾。
当没有更多的元素需要交换时,排序完成。
2.2 伪代码
一种介于自然语言和编程语言之间的表达方式,用于描述算法的逻辑结构。
示例:冒泡排序算法
procedure bubbleSort(list : array of items)n = length(list)for i from 0 to n-1swapped = falsefor j from 0 to n-1-iif list[j] > list[j+1]swap(list[j], list[j+1])swapped = trueif not swappedbreakend procedure
2.3 流程图
采用图形化的方式展示算法的流程,适合表达分支、循环等控制结构。

3 算法的五个特性
3.1 有穷性
有穷性是指算法应该在执行有限数量的步骤后终止。这意味着算法不应该包含导致无限循环或无限递归的逻辑。每当运行一个算法时,它最终应该给出一个结果并停止,而不是持续运行而没有终点。注意,算法在设计上是有穷的,但程序在实际执行过程中可能会无限期地运行。有穷性保证了算法的实用性和效率。
3.2 确定性
确定性要求算法中的每一个步骤都必须是明确无误的,不允许有任何歧义。这意味着给定相同的输入,算法应当总是产生相同的结果,并且每一步都应该能够被精确地理解和执行。这确保了算法的可预测性和可靠性。
3.3 可行性
可行性指的是算法中描述的操作都是基本的,可以通过已经实现的方法来完成。换句话说,算法中的每一步都应该是可以通过已有的技术手段实际执行的。这不仅仅涉及到计算资源的限制,还涉及到现有技术是否支持算法中提出的操作。可行性确保了算法不仅是理论上的可能,而且是实践上可行的解决方案。
3.4 输入
输入是指算法开始执行前需要从外部接收的信息。这些信息可以是一个或多个量,也可以完全没有(即算法不需要任何外部输入)。输入为算法提供了处理的对象或条件,使得算法能够针对不同的情况产生相应的结果。正确识别和定义算法所需的输入是设计有效算法的关键部分之一。
3.5 输出
输出是指算法执行完成后产生的结果。一个算法至少应该产生一个输出,这个输出是对输入数据进行处理后的结果,或者是对某个问题的解答。输出是衡量算法性能和效果的重要标准,也是算法与外界交流的主要方式。确保算法能够产生正确的输出是算法设计的核心目标之一。
4 好算法的设计目标
4.1 正确性
正确性是算法设计中最重要且基本的要求。一个正确的算法应该能够准确地解决它所设计的问题。正确性可以细分为以下几个层次:
- 无语法错误:算法实现时不应包含任何语法错误,确保程序能够成功编译和运行。
- 对测试数据有效:算法应对常用的测试数据集产生正确的输出,满足预期结果。
- 对苛刻输入有效:对于经过精心设计的、复杂或极端的输入数据,算法也应能够产生正确的输出。
- 对所有合法输入有效:无论输入数据如何变化,只要符合输入规范,算法都应能够正确处理并给出满足要求的结果。
4.2 可读性
可读性强调算法的易读性和易理解性。一个具有良好可读性的算法更容易被人阅读、理解和维护,有利于团队协作和技术传承。
- 简洁明了:算法描述应尽量简洁,避免不必要的复杂性。
- 结构清晰:合理组织算法结构,如使用恰当的注释、变量命名和模块划分,提高代码的可读性。
4.3 健壮性
健壮性指的是算法在面对异常或非法输入时的表现。一个健壮的算法应能够有效地处理错误输入,防止系统崩溃或产生不可预测的结果。
- 错误检测:算法应具备检测输入数据合法性的能力,及时发现并处理错误。
- 异常处理:对于无法处理的错误输入,算法应提供合理的错误提示或采取安全措施,避免系统故障。
4.4 通用性
通用性意味着算法应具有广泛的适用性,能够处理各种类型的数据集,而不仅仅是特定的案例。
- 适应性强:算法应能够在不同场景下灵活应用,不受特定数据格式或类型的限制。
- 扩展性好:算法设计时应考虑未来可能的变化,便于扩展和改进。
4.5 高效率与低存储量
效率和存储量是评价算法性能的重要指标。高效的算法能够在较短的时间内完成任务,同时占用较少的存储资源。
- 时间效率:算法的执行时间应尽可能短,尤其是在处理大规模数据时。
- 空间效率:算法在运行过程中应尽量减少对内存的占用,降低存储需求。
相关文章:
06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标
目录 1 算法的定义 2 算法的三种表现形式 2.1 自然语言 2.2 伪代码 2.3 流程图 3 算法的五个特性 3.1 有穷性 3.2 确定性 3.3 可行性 3.4 输入 3.5 输出 4 好算法的设计目标 4.1 正确性 4.2 可读性 4.3 健壮性 4.4 通用性 4.5 高效率与低存储量 1 算法的定义 …...
【红外传感器】STM32C8T6标准库使用红外对管
好好学习,天天向上 前言一、了解红外二、标准库的代码1.infrared.c2.infrared.h3.main.c4 现象 总结 前言 红外线:频率介于微波与可见光之间的电磁波。 参考如下 【STM32】标准库与HAL库对照学习教程外设篇–红外避障传感器 光电红外传感器详解&#…...
STM32L010F4 最小系统设计
画一个 STM32L010F4 的测试板子...... by 矜辰所致前言 最近需要用到一个新的 MCU: STM32L010F4 ,上次测试的 VL53L0X 需要移植到这个芯片上,网上一搜 STM32L010F4,都是介绍资料,没有最小系统,使用说明等。…...
AI 工具大赏:探索智能时代的得力助手
在当今这个科技飞速发展的时代,人工智能(AI)技术已经深入到我们生活的方方面面。从日常办公到创意设计,从学术研究到娱乐休闲,AI 工具正以其强大的功能和便捷的使用体验,成为人们不可或缺的得力助手。那么&…...
安通物流借助CRM重塑企业客户关系管理新格局
安通控股股份有限公司(以下简称"安通控股")是一家扎根集装箱多式联运物流产业的现代综合物流服务企业,致力于为客户提供绿色、经济、高效、安全的集装箱全程物流解决方案。 据Alphaliner排名统计,截至2023年10月,安通控股综合运力全球排名21位,位居国内内贸集装箱物…...
C++标准模板库--vector
vector 介绍 vector(向量)是一种序列容器,表示为可以改变大小的数组。vector中的元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素,且与数组一样高效。但与数组不同的是ÿ…...
通信学习干货:运营商为什么要大力推广FTTR?
随着数字化时代的来临,互联网的需求不断增长,家庭网络也在不断演进。光纤到家(FTTH)已经成为提供高速互联网连接的标配,但随着技术的发展,我们迎来了FTTR(光纤到房间)技术࿰…...
【Spring篇】初识之Spring的入门程序及控制反转与依赖注入
🧸安清h:个人主页 🎥个人专栏:【计算机网络】,【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 文章目录 🎯初始Spring …...
OpenLayers:构建高质量的Web地图应用
OpenLayers:构建高质量的Web地图应用 文章目录 OpenLayers:构建高质量的Web地图应用简介为什么选择 OpenLayers?跨平台兼容性高性能渲染高度可定制化社区支持 安装与设置功能扩展矢量图层地理编码投影转换 交互与事件其他高级特性控制动画数据…...
Java比较两个Excel是否内容一致
领导每天让比较两个Excel中的内容,为了节省工作效率多摸鱼,就写了个java接口,通过上传两个文件 进行代码比较得到详细的比较结果(这个需要自己根据日志二开) 目前只实现了比较功能 话不多说直接上代码,具体看注释 package com.yx…...
UniApp入门教程
UniApp X 是一种用于构建跨平台应用程序的框架,它基于 Vue.js 并通过 UniApp 技术栈支持多种平台,如微信小程序、支付宝小程序、H5、Android 和 iOS。以下是 UniApp X 的一些关键特点和基础知识: UniApp X 的特点 跨平台支持: 可…...
Vue.js中使用Element UI实现动态表单项管理及验证
在Vue.js项目中,表单是与用户交互的重要部分,特别是在需要动态管理表单项的场景下,如何优雅地实现添加、删除、上移、下移及验证功能变得尤为重要。本文将详细介绍如何使用Element UI来实现一个包含动态表单项管理以及验证功能的表单。 效果…...
一插U盘就提示格式化?原因、恢复与预防全攻略
一、现象直击:U盘插入电脑即提示格式化 在日常的工作与生活中,U盘作为重要的数据存储和传输工具,被广泛应用于各类场景。然而,有时当我们满怀期待地将U盘插入电脑时,却会遭遇一个令人头疼的问题——系统弹出提示框&am…...
云电脑使用教程标准版
云电脑,也称为云桌面,是一种通过互联网连接远程服务器,使用虚拟桌面环境来执行计算任务的技术。川翔云电脑通过创建软件镜像,让用户能够快速启动并使用预配置的软件和资料,提供高效且经济的云服务。相较于公有云服务&a…...
浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介 随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。 在JavaScript下载…...
机器学习——量子机器学习
量子机器学习: 未来的机器学习方法 量子计算和机器学习的结合为计算科学带来了前所未有的前景。量子机器学习(QML)正在迅速发展,目标是利用量子计算的优势来处理传统计算机无法高效解决的问题。本文将深入探讨量子机器学习的基本概念、量子计算的关键技术、具体的量…...
[Linux] 创建可以免密登录的SFTP用户
本文主要包含: 创建新用户创建密钥对用于免密登录新用户将新建用户改造为SFTP用户为SFTP上传数据设置限速 1. 创建新用户 sudo useradd sftp_user sudo passwd sftp_user # 输入密码2. 创建密钥对 参考这篇文章 [Linux] 生成 PEM 密钥对实现服务器的免密登录 3. 将新建用户…...
【部署篇】Redis-03主从模式部署(源码方式安装)
一、准备主机 主从模式只是解决了数据备份容灾并不能解决单点故障问题,生产环境中需要在主从模式基础上增加哨兵,实现主节点宕机时自动将其中一个重节点设置为新的主节点。 主机IP角色说明192.168.128.31master,主节点可读写。192.168.128…...
C/C++语言基础--C++四大类型转换讲解
本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 通过前面几节课,我们学习了抽象、封装、继承、多态、异常等概念,这一篇我们将继续学习C的类型转换,和C语言还有很大区别的;在本节课最后,也简要说…...
KafKa 集群【docker compose】
文章目录 主机准备部署编辑 docker-compose.ymlcontrollerbroker生成cluster_id 一篇完整的 docker-compose.yml 文件查看集群状态使用 kafka-ui 查看拉取 kafka-ui添加集群查看集群状态 使用命令行查看 配置讲解controllerbroker 主机准备 IPcontroller idbroker id192.168.1…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
