最佳,最差和平均的运行时间

时间:2012-03-05 03:20:35

标签: algorithm data-structures computer-science

任何人都可以简单地解释一下算法的最佳,最差和平均案例运行时间是什么意思

6 个答案:

答案 0 :(得分:25)

用最简单的术语来说,对于输入大小 n 的问题:

  • 最佳情况 =最快的完成时间,选择最佳输入 例如,排序算法的最佳情况是已经排序的数据。

  • 最糟糕的情况 =完成的最慢时间,选择了pessimal输入。
    例如,排序算法的最坏情况可能是按相反顺序排序的数据(但它取决于特定的算法)。

  • 平均情况 =算术平均值。使用许多不同的输入大小 n 运行算法多次,这些输入来自生成这些输入的某个分布(在最简单的情况下,所有可能的输入同样可能),计算总运行时间(通过添加个别时间),并除以试验次数。您可能还需要根据输入集的大小对结果进行标准化。

复杂性和运行时间通常以“Big O表示法”表示,用于根据输入的大小描述算法完成所需的大致时间量。 Rob Bell写了一篇excellent overview,其中有非常明确的例子。

最常用的Big O说明是

    无论输入大小如何,
  • O(1)始终会在大约相同的时间内终止。
  • 每次输入大小加倍时,
  • O(logN)会花费额外的固定时间。
  • 如果输入大小加倍,
  • O(N)需要两倍的时间才能完成。
  • 如果输入大小加倍,
  • O(N 2 需要四倍。
  • O(2 N 随着输入大小的增加呈指数增长。

从下表中可以看出,对于小输入尺寸,差异很小,但随着输入尺寸的增加,它会变得很大。

Input Size              Time to Complete
               O(1)  O(logN)   O(N)   O(N2)   O(2N)
     1           1       1      1       1       1
     2           1       2      2       4       4
     4           1       3      4      16      16
     8           1       4      8      64     256
    16           1       5     16     254   65536

答案 1 :(得分:3)

最差案例分析(通常已完成) 在最坏的情况分析中,我们计算算法运行时间的上限。我们必须知道导致执行最大操作数的情况。对于线性搜索,最坏的情况发生在数组中不存在要搜索的元素(上面代码中的x)时。当x不存在时,search()函数将它与arr []的所有元素逐一进行比较。因此,线性搜索的最坏情况时间复杂度将为Θ(n)。

平均案例分析(有时完成) 在平均案例分析中,我们采用所有可能的输入并计算所有输入的计算时间。对所有计算值求和,并将总和除以输入总数。我们必须知道(或预测)案件的分配。对于线性搜索问题,让我们假设所有情况都是均匀分布的(包括x不存在于数组中的情况)。因此,我们总结所有情况并将总和除以(n + 1)。以下是平均案例时间复杂度的值。

最佳案例分析(虚假) 在最佳案例分析中,我们计算算法运行时间的下限。我们必须知道导致执行最少操作数的情况。在线性搜索问题中,当x出现在第一个位置时,会出现最好的情况。最佳情况下的操作数是恒定的(不依赖于n)。因此,最佳情况下的时间复杂度将为Θ(1)

答案 2 :(得分:2)

将算法视为程序。这个程序需要一些数据,暂停一段时间,然后吐出一个答案。当然,我们关心程序在给出答案之前会对数据进行多长时间的研究。

但是有一个问题:对于许多算法,运行时间取决于数据本身。例如,对于已排序的数据,许多排序算法更快,而对于按相反顺序排序的数据,有些排序算法最慢。

让我们考虑数据的来源。也许你最好的朋友可以选择数据。你的朋友挑选导致你的程序快速运行的数据,我们称这个运行时是最好的情况,因为算法永远不会做得更好。也许你最大的敌人(在教科书中,这被称为对手)可以选择数据。你最大的敌人选择导致你的程序运行缓慢的数据,我们称这个运行时是最糟糕的情况,因为算法永远不会比这更糟糕。也许一个巨大的轮盘赌轮可以挑选你的数据。然后,您可以在一堆轮盘赌数据上运行您的算法,并平均所有运行时间以获得平均案例时间。

答案 3 :(得分:1)

最好的时间就像某件东西已经排序一样,那么就不需要做任何工作了。 最糟糕的情况(取决于您的算法),但考虑一下会导致您的算法花费最长时间的原因。

答案 4 :(得分:1)

算法的运行时间取决于输入的大小和“复杂性”。

例如最佳情况对某个大小 n 的输入的插入排序运行时间与 n 成比例,即 c * n 某些常量 c 的时间单位,这取决于计算模型的比较,算术等的成本(时间)。此算法的最差情况运行时间(插入排序)与 n * n 成比例。要对平均时间进行声明,我们需要对输入数据的分布进行一些假设:例如。如果输入是随机数据(因此可能没有排序),则平均运行时间再次与n * n成比例。

如果您对输入数据有更多了解,例如它是按递减值排序的(并且我们按递增值排序)平均运行时间是nti n的比例,但是常数因子更高(因为平均搜索时间最小(将插入到排序子列表的结尾需要更长的时间)。

另一个更复杂的例子是quicksort:随机数据的平均和最佳运行时间与 n * log n 成正比。最差的种姓时间仍然是 n * n (通常用于已经排序的输入,但这取决于在除法步骤中找到枢轴元素的算法)。

答案 5 :(得分:1)

最坏的情况通常用渐近符号表示,即大(O)

最佳情况用渐近符号表示,即大(OMEGA)