介绍数据结构和算法的算法基础:确定性、鲁棒性、最终性、正确性
1。算法的特点
1) 输入和输出
算法有零个或多个输入,同时算法有至少一个输出。
打印到“Hello World”屏幕时,可以直接输出结果,无需任何输入,但不输出,算法没有任何意义。
2)确定性
算法的每一步都有明确的含义,没有歧义。对于每一种条件,算法只有一条执行路径,即对于相同的输入只能得到相同的输出。
注意,如果算法的目标是生成随机数,则每次运行都会产生不同的结果,这似乎违反了算法的确定性原则,但计算机也使用一种(或多种)方法来生成随机数。 。算法解决方案(例如,采用线性同余来生成随机数)使用不同的 CPU 时间来产生不同的结果。如果CPU时间完全相同,就会得到相同的结果,但人类将无法检测到如此精确的时间。区别。
3)最终性
算法必须始终以有限步数终止(如果输入合法),即每个算法必须在有限时间内完成。
这是算法和程序之间的主要区别。程序可以无限循环运行。对此,你明白了,算法必须有一个“边界”。即使算法要求计算机连续工作50年,它仍然是最终的,但这个算法的重要性已经不再很大。
4) 可行性
算法可以执行,即通过执行已实现的基本操作,每个算法操作可以执行有限次数。
虽然目前有极其复杂的算法尚未在计算机解决方案中成功实现,但这并不意味着它们不可能实现。它只是受到当前工具和人脑的限制。它属于理论研究的框架。
2。算法设计要求
1)正确性
正确性是指算法满足预先确定的功能和性能要求,即得到正确答案的能力。
大致可以分为四点:
a) 该算法不存在语法错误。
b) 程序可以产生满足多组输入数据需求的结果。
c) 程序也可能收到满足非法输入要求的结果(例如抛出异常)。
d) 该程序仍可能产生满足精心选择的准确数据需求的结果。
2)可靠性
可靠性是指如果输入数据不合法,算法能够进行适当的处理,而不是产生不可预测的效果。
3) 可读性
可读性是指算法可以被阅读、理解和交流。
4) 低时间消耗和更少空间
工作时间和存储空间概念。在设计算法时,我们总是希望用更少的时间和空间来实现我们的目标。
我们的算法和数据结构研究重点是使程序能够以块的形式运行并且占用很少的空间。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网