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 高效率与低存储量


算法的定义

        算法是指为解决特定问题而设计的一系列明确、有限的指令集合。简而言之,算法就是解决问题的方法或步骤。


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 高效率与低存储量

        效率和存储量是评价算法性能的重要指标。高效的算法能够在较短的时间内完成任务,同时占用较少的存储资源

  • 时间效率:算法的执行时间应尽可能短,尤其是在处理大规模数据时。
  • 空间效率:算法在运行过程中应尽量减少对内存的占用,降低存储需求。

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

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

相关文章

Java笔记-static关键字

1.static关键字内存说明 2.访问特点 package com.test.Statics2;import com.test.statics.Student;public class Test {public static void main(String[] args) {// 静态成员中访问非静态成员// method3() // 错误-不能直接调用,需要new对象调用Test test01 new T…

英伟达开源超强模型Nemotron-70B;OpenAI推出Windows版ChatGPT桌面客户端

🦉 AI新闻 🚀 英伟达开源超强模型Nemotron-70B 摘要:英伟达近日开源了新型AI模型Nemotron-70B,迅速超越GPT-4o和Claude 3.5 Sonnet,成为AI社区的新宠。该模型在多项基准测试中表现优异,采用混合训练方法和…

STM32CUBEIDE新建工程

新建工作区 可以在下面的目录创建工作区,来管理不同的工程,其中有一个是第一次打开软件的时候创建的。 新建一个工程 使用stm32cubeMX生成程序 生成之后直接打开,由于有一些.c.h文件是我们自己建立的,所以需要手动添加进工程…

Linux的开发工具gcc Makefile gdb的学习

一:gcc/g 1. 1 背景知识 1. 预处理(进行宏替换) 预处理 ( 进行宏替换 ) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结…

Unicode编码检查, 字符计算, Utf8与Utf16互转, GBK字符计算

CUnicodeUtils #pragma once #include <stdint.h> #include <string>class CUnicodeUtils { public:// // brief: 获取UTF16字符个数// param: pData 数据(UTF16编码, 大端字节序或小端字节序, 可包含BOM)// param: size 数据长度(字节)//…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

对话型AI:Auto Possess Player Auto Possess AI

Auto Possess Player “Auto Possess Player” 是一个常见于游戏开发&#xff0c;尤其是在 Unreal Engine 中的术语。它指的是一个功能或设置&#xff0c;使得一个特定的角色或对象在游戏开始时自动接管玩家的控制权。以下是一些关键点&#xff1a; 含义 自动控制&#xff…

STM32外设之ADC应用--寄存器开发

1.ADC简介 模数转换器&#xff08;Analog-to-Digital Converter&#xff0c;简称ADC&#xff09;是一种重要的电子设备&#xff0c;它能够将模拟信号转换为数字信号。是一种将连续变化的模拟信号转换为离散的数字信号的电子设备。这种转换使得模拟信号可以在数字系统中进行处理…

A-23OH型树脂在汽车涂装行业溶剂回收中的应用

随着汽车制造业的不断发展&#xff0c;市场竞争愈发激烈。为了提升生产柔性、生产效率和成本效益&#xff0c;同时确保喷漆质量并满足日益增长的非标和定制化设计需求&#xff0c;汽车生产商需要寻求更加高效、环保的解决方案。 其中&#xff0c;水性涂料的应用已经成为一种趋势…

Maven 快速入门

Maven 快速入门 一、简介1、概述2、特点3、工作原理4、常用命令5、生命周期6、优缺点&#x1f388; 面试题 二、安装和配置1、安装2、环境配置3、命令测试是否安装成功4、功能配置5、idea配置本地 maven6、maven 工程依赖包查询网站 三、基于IDEA创建Maven工程1、maven 工程中的…

Spring 的依赖注入的最常见方式

在 Spring 中&#xff0c;依赖注入的方式有多种选择。下面我们来逐一分析它们的特点、适用场景和注意事项&#xff1a; 1. 构造函数注入 构造函数注入要求在对象创建时提供所有依赖。这种方式确保依赖在对象创建后不可变&#xff0c;特别适合必须强制存在的依赖。所有依赖在对…

常用代码整理

字符串操作相关函数的实现 gets puts strlen strcat strncat strcpy strncpy strcmp strncmp memcpy 内存大小端判断 类型强制转换 联合 排序 选择排序 冒泡排序 插入排序 快速排序 先选一个基准值&#xff0c;通过双指针扫描并交换元素将数组划分为两部分&#xff0c;左…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

gitee建立/取消关联仓库

目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件&#xff0c;右击&#xff0c;选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…

transformer的基础知识

transformer的基础知识 transformer网络结构图 seq2seq 一般Seq2seq会分成两部分:Encoder、Decoder。 Encoder Transformer 中的 Encoder 就是用的 Self-attention。 encoder的内部结构 补充:block的内部结构主要由self-attention和全连接神经网络所构成。 在原来的论…

TSmaster CAN的E2E检验配置

文章目录 一. 自定义E2E校验算法1. 导入DBC文件2. 模拟报文发送3. 自定义E2E算法 问题&#xff1a;C代码编辑器中 数据库头文件为空问题&#xff1a;C代码编辑器中 程序启动和暂停按钮为灰色 一. 自定义E2E校验算法 1. 导入DBC文件 点击载入CAN数据库&#xff0c;在弹窗中选择…

添加卡巴斯基杀毒软件(KES)的更新源

最近不知道怎么了&#xff0c;家里的电脑卡巴斯基&#xff08;KES&#xff09;怎么更新都更新不了&#xff0c;在网上找到了几个卡巴斯基的服务器: 添加步骤&#xff1a; 1.双击右下角的卡巴斯基图标。 2.依次按如下图示添加&#xff1a; 以下这步是最关键的&#xff0c;一定要…

HDU Ignatius‘s puzzle

题目大意&#xff1a;f&#xff08;x&#xff09;5*x^1313*x^5k*a*x&#xff0c;输入一个无负整数 k&#xff08;k<10000&#xff09;&#xff0c;要找到最小的非负整数 a&#xff0c;将任意整数 x &#xff0c;65|f&#xff08;x&#xff09;&#xff0c;如果不存在该 a&am…

矩阵AB=0

矩阵AB0的性质 一、二的证明 这里还有一种说法 三、四的证明 详情请跳转五

linux环境下的程序设计与git操作

目录 前言&#xff1a; 进度条小程序&#xff1a; 先介绍几个背景知识 代码实现 Git操作 总结 其他指令 前言&#xff1a; 本文将重点介绍1. linux下的程序设计&#xff0c;并使用linux下的几个函数接口。实现一个简单的小程序 2.本着开源精神&#xff0c;进行git操作。…