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

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

🐓 算法

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


🐓 算法的5种属性

有穷性

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

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

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

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


确定性

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

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

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

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


可行性

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

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

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

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


输入

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

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

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

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

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


输出

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

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

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

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


🐓 算法的要求

正确性

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

无歧义性

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

满足需求

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

正确性层次

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

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

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

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


可读性

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

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

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

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


健壮性

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

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

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


可扩展性

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

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

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


可维护性

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

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

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

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


可重用性

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

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

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


效率和存储要求

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

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

相关文章
|
1月前
|
算法 数据处理 C++
【C++ 20 新特性 算法和迭代器库的扩展和泛化 Ranges】深入浅出C++ Ranges库 (Exploring the C++ Ranges Library)
【C++ 20 新特性 算法和迭代器库的扩展和泛化 Ranges】深入浅出C++ Ranges库 (Exploring the C++ Ranges Library)
212 1
|
1月前
|
存储 算法
【软件设计师】常见的算法设计方法——递推法
【软件设计师】常见的算法设计方法——递推法
|
1月前
|
机器学习/深度学习 算法
【软件设计师】通俗易懂的去了解算法的时间复杂度
【软件设计师】通俗易懂的去了解算法的时间复杂度
|
1月前
|
算法 网络协议
【计网·湖科大·思科】实验三 总线型以太网的特性、集线器和交换机的区别、交换机的自学习算法
【计网·湖科大·思科】实验三 总线型以太网的特性、集线器和交换机的区别、交换机的自学习算法
30 1
|
1月前
|
算法
【软件设计师】常见的算法设计方法——穷举搜索法
【软件设计师】常见的算法设计方法——穷举搜索法
|
1月前
|
机器学习/深度学习 监控 算法
【软件设计师】常见的算法设计方法——迭代法
【软件设计师】常见的算法设计方法——迭代法
|
1月前
|
算法
【软件设计师—基础精讲笔记9】第九章 算法设计与分析
【软件设计师—基础精讲笔记9】第九章 算法设计与分析
28 1
|
1月前
|
机器学习/深度学习 搜索推荐 算法
实现手机 app 千人千面的特性,背后有哪些机器学习算法
实现手机 app 千人千面的特性,背后有哪些机器学习算法
|
1月前
|
存储 算法
【软件设计师备考 专题 】算法探索:排序、查找、数值计算和字符串处理(三)
【软件设计师备考 专题 】算法探索:排序、查找、数值计算和字符串处理
37 0
|
3天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
18 6