【软件设计师】通俗易懂的去了解算法的特性和要求

 🐓 算法

算法是对特定问题求解步骤的一种描述,算法是指令的有限序列。其中每一条指令表示一个或者多个操作。

 🐓 算法的5种属性

有穷性

一个算法必须总是在执行有穷的步骤后,且在每个步骤执行的过程中时间是有限的

1.有穷性意味着算法必须在执行有限步骤后结束。

2.这意味着算法不会陷入无限循环或需要无限长的时间来执行。

3.同时,每个步骤都应该在可接受的时间内完成,以确保算法的效率。

确定性

算法中每一条指令必须要有准确的含义,不存在其他的含义。

1.确定性意味着算法的每一步都应该明确、无歧义地定义。

2.对于算法中的每一种情况,需要执行的动作都应该严格、清晰地规定,不应有模糊或不确定的地方。

3.这有助于确保算法的正确性和可预测性。

可行性

一个算法是可行的就是算法描述的操作是可以通过已经执行的基本运算有限次数实现

1.可行性意味着算法的每一步都应该是可执行的。

2.这意味着算法中描述的操作应该是可以通过已经实现的基本运算来完成的。

3.此外,可行性还涉及到算法所需的资源(如时间、存储空间等)是否在实际应用中是可接受的。

输入

一个算法有零个或多个输入,这些输入取自于某个特定对象的集合

1.输入是算法开始运算前给予算法的量。

2.一个算法可以没有输入(例如,某些随机生成数字或图案的算法),也可以有多个输入。

3.输入可以来自外部提供,例如用户输入,也可以是算法内部给定的,例如通过赋值语句。

4.输入的量通常与特定的问题或应用场景相关。

输出

一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

1.输出是算法计算的结果。

2.每个算法至少应该有一个输出,因为算法的目的是为了解决问题或完成某项任务,而这些任务的结果通常需要被返回或展示。

3.输出可以是数字、文本、图像或其他形式的数据,具体取决于算法的应用场景。

 🐓 算法的要求

正确性

算法可以正确的满足具体问题的需求

无歧义性

算法的行为应该是明确的,对于任何给定的输入,都应该只有一个明确的输出。

满足需求

算法应该能够准确地解决所设计的问题,满足所有指定的需求。

正确性层次

1.语法正确:算法的代码应该符合编程语言的语法规则。

2.合法输入的正确性:对于所有合法的输入,算法应该产生正确的输出。

3.非法输入的处理:算法应该能够处理非法的输入,并给出适当的错误消息或处理结果。

4.健壮性测试:算法应该能够通过一系列精心设计的测试,包括边界条件和异常情况

可读性

算法要保证其他读者对程序的理解难度

代码清晰:算法的代码应该简洁明了,易于理解。

变量和函数命名:使用有意义的变量和函数名,有助于增强代码的可读性。

注释:适当的注释可以解释代码的工作原理和目的,提高可读性。

健壮性

算法要保证有容错的处理,当输入错误或者非法的数据时后,算法可以对其做出相对应的反应,而不是出现莫名其妙的错误。

异常处理:算法应该能够处理异常情况,如输入错误、数据丢失等,并给出适当的错误消息或处理结果。

容错性:算法应该具有一定的容错性,即使输入数据存在轻微的错误或不一致,也能产生合理的结果。

可扩展性

算法应该易于扩展以适应未来的需求。这意味着算法应该设计成模块化结构,以便在需要时添加新功能或修改现有功能。

模块化设计:算法应该设计成模块化结构,方便添加新功能或修改现有功能。

接口设计:提供清晰的接口,方便与其他模块或系统进行集成。

可维护性

算法应该易于修改和维护。随着需求的变化,算法可能需要进行修改。一个好的算法应该设计成易于修改,同时保持其原有的正确性和效率。

文档:提供详细的文档,解释算法的工作原理、输入要求、输出格式等。

测试:编写测试用例,确保算法的正确性和稳定性。

代码审查:定期进行代码审查,确保代码质量和可维护性。

可重用性

算法应该具有高度的可重用性,这意味着它可以在不同的场景和问题中重复使用。通过设计通用的算法和数据结构,可以提高代码的重用性。

通用性:设计通用的算法和数据结构,使其可以在不同的场景和问题中重复使用。

抽象和封装:使用抽象和封装技术,隐藏不必要的细节,提高算法的重用性。

效率和存储要求

效率就是算法所指的时间复杂度,存储要求就是算法所致的空间复杂度,一般情况这两个要求会和问题的复杂性和算法的代码有所关联。 

接下来就需要展开去说说时间复杂度空间复杂度了,不管时考研还是计算机的算法学习,甚至一个程序员应该知道的内容就是时间复杂度了。

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

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

相关文章

深度学习 精选笔记(7)前向传播、反向传播和计算图

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

蓝桥杯:单词分析

题目 题目描述 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。 请计算及格率和优秀率,用百分数表…

Rstudio-深度学习执行代码

RStudio是一个开源的集成开发环境(IDE),专门用于R编程语言的开发和数据分析。R语言是一种流行的统计计算和数据可视化语言,广泛用于数据科学、统计学和机器学习领域。 RStudio提供了许多功能强大的工具,包括代码编辑器…

SQL 基本条件查询DQL 练习

DQL DQL(Data Query Language)是SQL语言中的一种类型,用于执行数据查询操作。它是SQL的一部分,用于从数据库中检索数据。DQL语句用于从一个或多个表中选择、过滤和排序数据。常见的DQL查询语句包括SELECT、FROM、WHERE、GROUP BY…

U盘无法读取?轻松掌握正确解决方法!

“为什么我的u盘插入电脑后会显示无法读取呢?想查看一些比较重要的文件,但就是无法读取U盘,想问问大家,我应该怎么操作呢?” U盘作为一种便捷的数据存储设备,广泛应用于我们的日常生活和工作中。然而&#…

独立游戏《星尘异变》UE5 C++程序开发日志2——创建并编写一个C++类

在本篇日志中,我们将要用一个C类来实现一个游戏内的物品,同时介绍UCLASS、USTRUCT、UPROPERTY的使用 一、创建一个C类 我们在UE5的"内容侧滑菜单"中,在右侧空白中右键选择"新建C类",然后可以选择一个想要的…

python70-Python的函数入门,了解下函数

函数是执行特定任务的一段代码,程序通过将一段代码定义成函数,并为该函数指定一个函数名,这样即可在需要的时候多次调用这段代码。因此,函数是代码复用的重要手段。学习函数需要重点掌握定义函数、调用函数的方法。 与函数紧密相关的另一个知识点是lambda表达式。lamda表达…

Spring AOP(Aspect-Oriented Programming,面向切面编程)介绍

Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它提供了一种强大的方式来帮助开发者实现横切关注点(cross-cutting concerns)的模块化。横切关注点是指那些影响多个模块…

Linux设备模型(十一) - platform设备

一,platform device概述 在Linux2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候, 会寻找与之匹配的驱动;相反的,在系统每注册一个设备的时…

【Redis】实际应用 - 缓存

文章目录 1. 缓存的基本概念2. Redis作为缓存的优势2.1 内存存储2.2 持久性选项2.3 数据结构丰富 3. Redis缓存的使用3.1 安装和配置Redis3.2 连接到Redis3.3 存储和获取数据3.4 设置过期时间 4. 缓存策略4.1 LRU(最近最少使用)4.2 数据失效4.3 主动刷新…

可让照片人物“开口说话”阿里图生视频模型EMO,高启强普法

3 月 1 日消息,阿里巴巴研究团队近日发布了一款名为“EMO(Emote Portrait Alive)”的 AI 框架,该框架号称可以用于“对口型”,只需要输入人物照片及音频,模型就能够让照片中的人物开口说出相关音频&#xf…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

Vulnhub靶机:Bellatrix

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Bellatrix(10.0.2.9) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/hogwa…

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解题思路2. 代码实现 题目链接:3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解题思路 这一题就是一个二维的累积数组的问题,我们直接求一…

网络学习:MPLS技术基础知识

目录 一、MPLS技术产生背景 二、MPLS网络组成(基本概念) 1、MPLS技术简介:Multiprotocol Lable Switching,多协议标签交换技术 2、MPLS网络组成 三、MPLS的优势 四、MPLS的实际应用 一、MPLS技术产生背景 1、IP采用最长掩码…

Power BI vs Superset BI 调研报告

调研结论 SupersetPower BI价格开源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 权限基于角色的访问控制,支持细粒度的访问: 表级别、库级别、图表级别,看板级别,用户级别 基于角色…

每天一个数据分析题(一百八十五)

给定下述Python代码段,试问哪个选项正确描述了该代码段的功能? data_raw[‘gender’] data_raw[‘gender’].map({‘Male’: 1, ‘Female’: 0}) A. 代码中对gender变量进行了独热编码(One-Hot Encoding),并将gender中的缺失值填充为类别平…

深度学习API——keras初学

keras定义: Keras是一个深度学习API(人工神经网络库),使用Python语言编写的github开源项目,主要开发者为谷歌工程师。Keras底层可调用不同的机器学习平台,如TensorFlow、Theano或micsoft-CNTK。 作用&…

Tomcat的配置文件

Tomcat的配置文件详解 一.Tomcat的配置文件 Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,主要有以下几个: 1.server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息&#x…

【推荐】免费AI论文写作神器-「智元兔 AI」

还在为写论文焦虑?免费AI写作大师来帮你三步搞定! 智元兔AI是ChatGPT的人工智能助手,并且具有出色的论文写作能力。它能够根据用户提供的题目或要求,自动生成高质量的论文。 不论是论文、毕业论文、散文、科普文章、新闻稿件&…