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…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

AWSLambda之设置时区
目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可,即Asia/Shanghai。 参考 使用 Lambda 环境变量...

Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...