🐓 算法
算法是对特定问题求解步骤的一种描述,算法是指令的有限序列。其中每一条指令表示一个或者多个操作。
🐓 算法的5种属性
有穷性
一个算法必须总是在执行有穷的步骤后,且在每个步骤执行的过程中时间是有限的
1.有穷性意味着算法必须在执行有限步骤后结束。
2.这意味着算法不会陷入无限循环或需要无限长的时间来执行。
3.同时,每个步骤都应该在可接受的时间内完成,以确保算法的效率。
确定性
算法中每一条指令必须要有准确的含义,不存在其他的含义。
1.确定性意味着算法的每一步都应该明确、无歧义地定义。
2.对于算法中的每一种情况,需要执行的动作都应该严格、清晰地规定,不应有模糊或不确定的地方。
3.这有助于确保算法的正确性和可预测性。
可行性
一个算法是可行的就是算法描述的操作是可以通过已经执行的基本运算有限次数实现
1.可行性意味着算法的每一步都应该是可执行的。
2.这意味着算法中描述的操作应该是可以通过已经实现的基本运算来完成的。
3.此外,可行性还涉及到算法所需的资源(如时间、存储空间等)是否在实际应用中是可接受的。
输入
一个算法有零个或多个输入,这些输入取自于某个特定对象的集合
1.输入是算法开始运算前给予算法的量。
2.一个算法可以没有输入(例如,某些随机生成数字或图案的算法),也可以有多个输入。
3.输入可以来自外部提供,例如用户输入,也可以是算法内部给定的,例如通过赋值语句。
4.输入的量通常与特定的问题或应用场景相关。
输出
一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
1.输出是算法计算的结果。
2.每个算法至少应该有一个输出,因为算法的目的是为了解决问题或完成某项任务,而这些任务的结果通常需要被返回或展示。
3.输出可以是数字、文本、图像或其他形式的数据,具体取决于算法的应用场景。
🐓 算法的要求
正确性
算法可以正确的满足具体问题的需求
无歧义性
算法的行为应该是明确的,对于任何给定的输入,都应该只有一个明确的输出。
满足需求
算法应该能够准确地解决所设计的问题,满足所有指定的需求。
正确性层次
1.语法正确:算法的代码应该符合编程语言的语法规则。
2.合法输入的正确性:对于所有合法的输入,算法应该产生正确的输出。
3.非法输入的处理:算法应该能够处理非法的输入,并给出适当的错误消息或处理结果。
4.健壮性测试:算法应该能够通过一系列精心设计的测试,包括边界条件和异常情况
可读性
算法要保证其他读者对程序的理解难度
代码清晰:算法的代码应该简洁明了,易于理解。
变量和函数命名:使用有意义的变量和函数名,有助于增强代码的可读性。
注释:适当的注释可以解释代码的工作原理和目的,提高可读性。
健壮性
算法要保证有容错的处理,当输入错误或者非法的数据时后,算法可以对其做出相对应的反应,而不是出现莫名其妙的错误。
异常处理:算法应该能够处理异常情况,如输入错误、数据丢失等,并给出适当的错误消息或处理结果。
容错性:算法应该具有一定的容错性,即使输入数据存在轻微的错误或不一致,也能产生合理的结果。
可扩展性
算法应该易于扩展以适应未来的需求。这意味着算法应该设计成模块化结构,以便在需要时添加新功能或修改现有功能。
模块化设计:算法应该设计成模块化结构,方便添加新功能或修改现有功能。
接口设计:提供清晰的接口,方便与其他模块或系统进行集成。
可维护性
算法应该易于修改和维护。随着需求的变化,算法可能需要进行修改。一个好的算法应该设计成易于修改,同时保持其原有的正确性和效率。
文档:提供详细的文档,解释算法的工作原理、输入要求、输出格式等。
测试:编写测试用例,确保算法的正确性和稳定性。
代码审查:定期进行代码审查,确保代码质量和可维护性。
可重用性
算法应该具有高度的可重用性,这意味着它可以在不同的场景和问题中重复使用。通过设计通用的算法和数据结构,可以提高代码的重用性。
通用性:设计通用的算法和数据结构,使其可以在不同的场景和问题中重复使用。
抽象和封装:使用抽象和封装技术,隐藏不必要的细节,提高算法的重用性。
效率和存储要求
效率就是算法所指的时间复杂度,存储要求就是算法所致的空间复杂度,一般情况这两个要求会和问题的复杂性和算法的代码有所关联。
接下来就需要展开去说说时间复杂度和空间复杂度了,不管时考研还是计算机的算法学习,甚至一个程序员应该知道的内容就是时间复杂度了。