《大话数据结构》读书笔记2——算法

237 阅读4分钟

算法的定义

算法是一种用于解决特定问题的求解步骤的描述。在计算机中,算法表现为一系列有限的指令,每个指令表示一个或多个操作,通过执行这些操作,问题得以解决。

算法的基本特性

1. 输入输出

算法可以有零个或多个输入,用于提供问题的初始数据。同时,它也可以产生一个或多个输出,这些输出是问题的解或结果。

2. 有穷性

算法必须是有穷的,即在执行有限步骤之后自动结束。这意味着算法不能陷入无限循环,每一步的执行都必须在可接受的时间内完成。

3. 确定性

算法的每一步都必须具有明确定义的含义,不存在二义性。对于相同的输入,算法的执行顺序和结果必须是确定的。

4. 可行性

算法的每一步必须是可行的,也就是说,每一步都可以通过执行有限次数的基本操作来完成。算法不能包含无法实现的操作或步骤。

算法设计的要求

1. 正确性

算法的正确性是指算法至少应该满足以下要求:

  • 算法应具有输入、输出和加工处理无歧义性,以反映问题的需求。
  • 算法应能够得到问题的正确答案。

2. 可读性

算法设计的另一个重要目标是便于阅读、理解和交流。可读性是评估算法优劣的标志之一。编写代码的目的之一是为了计算机执行,但另一个同样重要的目的是为了使他人能够轻松阅读和理解代码。

3. 健壮性

算法应具备健壮性,即在面对不合法的输入数据时,也能够做出相关处理,而不是产生异常或不合理的结果。健壮的算法能够容忍不完美的输入,从而提高系统的稳定性。

4. 时间效率和存储量

好的算法应该具备高效率和低存储量的特点。它们应能够在合理的时间内完成任务,同时占用较少的内存空间。时间效率和存储效率通常是算法设计中需要权衡的因素。

算法效率的度量方法

1. 事后统计方法

事后统计方法是一种不科学且不准确的方法,它通过实际运行算法并记录运行时间来评估算法的效率。这种方法不适用于算法设计的初期阶段,因为它无法提前预测算法的性能。

2. 事前分析估算方法

事前分析估算方法是一种更科学、更可靠的方法,它在算法设计的早期阶段就可以进行。其中包括以下重要的度量方法:

最坏情况运行时间

最坏情况运行时间是一种保证,它指的是算法在任何输入情况下都不会比最坏情况下的运行时间更差。在实际应用中,最坏情况运行时间是一种重要的性能保证要求,因为它确保算法在任何情况下都能够在有限时间内完成任务。

平均情况运行时间

平均情况运行时间是算法在所有可能输入情况下的平均运行时间。虽然最坏情况运行时间提供了保证,但平均情况运行时间更能反映算法在实际应用中的性能。然而,计算平均情况运行时间通常更为复杂。

空间复杂度

空间复杂度衡量算法在执行过程中所需的内存空间。好的算法应该具有较低的空间复杂度,以减少对系统资源的需求。

总结

算法是计算机科学的基础,它是问题求解的关键。一个好的算法必须具备正确性、可读性、健壮性、高效率和低存储量的特征。为了评估算法的性能,我们可以使用事前分析估算方法,包括最坏情况运行时间、平均情况运行时间、空间复杂度等。这些方法帮助我们在算法设计的早期阶段就能够估计算法的性能,并选择最适合解决特定问题的算法。