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.mzph.cn/bicheng/56540.shtml

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

相关文章

力姆泰克DMB系列伺服电动缸

力姆泰克DMB系列伺服电动缸 高精度运动,运动平稳,低噪音,高速度 向下翻动查看更多 力姆泰克DMB系列伺服电动缸采用瑞士先进的伺服缸结构设计和进口散件国内组装, 保证力姆泰克伺服电动缸在国内的领先地位. 轧制滚珠丝杠保证伺服…

Google Ads API v18 发布,开发者迎来全新功能与优化

Google 发布了 Google Ads API 第 18 版,为开发者引入了多项新功能和改进。 Google 发布的 Google Ads API 第 18 版引入了增强的工具和功能,使广告主在广告活动优化和性能跟踪方面拥有更多控制权。 主要更新包括: 预算优化建议:新…

解决UNSPSC商品分类的层级不足的方法

《联合国标准产品和服务守则》(UNSPSC)是一个分层框架,旨在对产品和服务进行分类。其主要目标是通过提供统一的方法来对产品和服务进行分类,从而简化采购和供应链管理。 虽然 UNSPSC 有效地将产品分为各种商品类别,但…

06-ArcGIS For JavaScript-requestAnimationFrame动画渲染

文章目录 概述setInterval()与setTimeout()requestAnimationFrame()requestAnimationFrame在ArcGIS For JavaScript的应用结果 概述 本节主要讲解与时间相关的三个方法setTimeout()、setInterval()和requestAnimationFrame(),这三个方法都属…

弹性力学试题解答答案

一、名词解释 圣维南原理:分布于弹性体上一小块面积(或体积)内的荷载所引起的物体中的应力,在离荷载作用区稍远的地方,基本上只同荷载的合力和合力矩有关;荷载的具体分布只影响荷载作用区附近的应力分布。…

基于springboot学生成绩管理系统

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…

CPO:隐含于CoT与ToT两者间的推理平衡

自OpenAI推出o1以来,随着reasoning scaling law的大行其道‌,很多研究者都将目光聚焦在“reasoning”之上,而在仅reasoning维度上,确实存在着非常深邃且让人着迷的可探索空间,毕竟这意味着围绕system2展开的下一轮认知…

利用Excel数据合并到Word功能,官方名为“Word邮件合并”

### 利用Excel数据合并到Word功能,官方名为“Word邮件合并”简介 #### 引言 在日常办公场景中,我们经常需要将Excel中的数据批量插入到Word文档中,比如制作员工工资条、邀请函或是客户信息表等。传统的手工操作不仅耗时耗力,还容易…

Javascript 构造http请求

构造HTTP请求有多种方式,此种为使用javascript 构造http请求的方法 构造HTTP请求_vscode post 请求-CSDN博客 web/static/js/user/login.js ; var user_login_ops {init:function(){this.eventBind();},eventBind:function(){$(".login_wrap .do-login"…

博科测试IPO上市丨为行业提供智能测试综合解决方案

近年来,汽车制造、大型基础设施建设以及新能源开发等领域,对高精度、高效率的测试解决方案需求迫切。为推动行业发展,博科测试通过多年的技术积累以及自主创新,围绕伺服液压测试和汽车测试试验领域,积累了多项核心技术…

Java枚举封装状态值与类型转换

前言 在许多应用中,我们需要处理具有固定数量的状态或选项的数据。例如,在库存管理系统中,产品可以有不同的状态,如“入库”、“出库”等。通过使用 Java 的枚举(enum),我们可以有效地表示这些…

Golang | Leetcode Golang题解之第486题预测赢家

题目: 题解: func PredictTheWinner(nums []int) bool {return total(nums, 0, len(nums) - 1, 1) > 0 }func total(nums []int, start, end int, turn int) int {if start end {return nums[start] * turn}scoreStart : nums[start] * turn total…

AI 视频工具合集

🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: ​ 前言: AI 视频,科技与艺术的精彩融合。它借助先进的人工智能技术,为影像创…

SLAM评估工具evo学习

参考链接 官方github:https://github.com/MichaelGrupp/evo 一、 指令分析 1.1 tum数据集,evo_ape指令 evo_ape {kitti,tum,euroc,bag} -h evo_ape tum -h(1) 终端输入: evo_ape tum -h (2) 终端打印: usage: evo_ape tum …

Android Framework AMS(07)service组件启动分析-1(APP到AMS流程解读)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读应用层service组件启动的2种方式startService和bindService,以及从APP层到AMS调用之间的打通。关注思维导图中左侧部分即…

ISO 21434标准下汽车软件开发的网络安全核心要求

ISO 21434《道路车辆——汽车网络安全工程》是一个针对汽车网络安全的国际标准,它对汽车软件开发提出了明确的要求,以确保车辆在整个生命周期内的网络安全。 以下是ISO 21434网络安全标准对汽车软件开发的主要共同要求: 1. 安全意识与设计 …

microsoft edge浏览器卡死问题

win11经常遇到microsoft edge浏览器卡死的情况,有时候是一会没用浏览器就全部卡死,有时候是锁屏或者电脑休眠浏览器就不能用,找了很多的办法都没好使,用以下方法好使了: edge浏览器中打开 edge://settings/system 把 …

Cornerstone3D Tools对影像进行交互(中篇)-注释类工具使用

🏄‍♀️ 前言 这里是关于Cornerstone3D Tools对影像进行交互(中篇 )- 注释类工具的使用介绍。在 Cornerstone3D Tools对影像进行交互(上篇)-基础交互工具及同步器 一文中主要介绍了一下基础交互类工具的使用,感兴趣的小伙伴可以…

【优先算法】--双指针1

“一念既出,万山无阻。”加油陌生人! 目录 1.双指针--移动零 2.双指针-复写零 ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有…

Linux系统移植

目录 一、简介 嵌入式Linux系统移植组成部分: 二、搭建交叉开发环境 选择交叉开发环境的原因: 1.Ubuntu和Windows下的文件互传 2.Ubuntu 下 NFS和 SSH服务开启 3.Ubuntu 交叉编译工具链安装 3.1修改环境变量 3.2安装相关库 三、bootloader的选择和移植 编译U-boot 总…