📜  DAA-算法分析

📅  最后修改于: 2021-01-12 03:29:38             🧑  作者: Mango


在算法的理论分析中,通常在渐近意义上估计其复杂度,即,估计任意大输入的复杂度函数。术语“算法分析”由Donald Knuth创造。

算法分析是计算复杂度理论的重要组成部分,它为解决特定计算问题所需的算法资源提供理论估计。大多数算法设计为可使用任意长度的输入。算法分析是确定执行算法所需的时间和空间资源。

通常,算法的效率或运行时间表示为将输入长度与步数相关联的函数,称为时间复杂度,或者称为存储空间量,称为空间复杂度

分析的需要

在本章中,我们将讨论对算法进行分析的必要性,以及如何针对特定问题选择更好的算法,因为一个计算问题可以通过不同的算法来解决。

通过考虑针对特定问题的算法,我们可以开始开发模式识别,以便借助该算法可以解决类似类型的问题。

尽管这些算法的目标是相同的,但它们之间的算法通常往往大不相同。例如,我们知道可以使用不同的算法对一组数字进行排序。对于相同的输入,一种算法执行的比较次数可能会与其他算法不同。因此,那些算法的时间复杂度可能不同。同时,我们需要计算每种算法所需的存储空间。

算法分析是根据所需的时间和大小(实现时用于存储的内存大小)分析算法解决问题的能力的过程。但是,算法分析的主要问题是所需的时间或性能。通常,我们执行以下类型的分析-

  • 最坏情况-在大小为a的任何实例上采取的最大步骤数。

  • 最佳情况-在大小为a的任何实例上执行的最小步骤数。

  • 平均情况-在大小为a的任何实例上采取的平均步骤数。

  • 摊销-施加到大小的输入操作的序列在时间上平均。

为了解决问题,我们需要考虑时间以及空间复杂度,因为程序可能在内存有限但有足够空间可用的系统上运行,或者反之亦然。在这种情况下,如果我们比较冒泡排序合并排序。冒泡排序不需要额外的内存,但合并排序需要额外的空间。尽管气泡排序的时间复杂度比合并排序要高,但是如果程序需要在内存非常有限的环境中运行,我们可能需要应用气泡排序。