我们是否需要了解/查找/分析算法的每个案例{Best,Average和Worst ... all}场景?

时间:2011-07-17 03:54:40

标签: algorithm complexity-theory

在关于数据结构和算法的书中,我们经常看到他们没有分析所有算法的每个案例场景。

一些算法与平均情况一起讨论,一些是平均和最差情况,另一些是最好的,平均的和最差的。

为什么他们倾向于这样做?

为什么我们不需要知道所有算法的所有情况?

2 个答案:

答案 0 :(得分:3)

最糟糕的案例分析通常是花费大量精力分析算法的最有用方法。平均情况更复杂,因为平均情况通常取决于不同输入的可能性,因此您必须根据不同输入的概率来说明平均情况。最好的情况不是很有用,因为希望我的程序可以在1秒内完成,这不允许我计划一些如果我的程序实际需要3个小时就会花费太长时间的活动。知道,无论如何,它将在五分钟内完成,更有用。

最佳情况也存在存储少量预先准备好的输入和输出的程序的问题,然后检查它们对预先准备好的输入所得到的输入。如果他们得到一个匹配,那么他们用预先准备的输出做出回应而不做任何其他事情,因此得到很好 - 但没有意义 - 最好的案例行为。

在某些情况下,最坏情况分析不是您想要的。设计加密算法的人可能希望保证在不到10年的时间内没有人可以破解它(不幸的是,通常这种保证不存在)。

答案 1 :(得分:3)

除非您控制输入,否则最佳情况通常无用。 (即最好的情况通常是异常情况)。除非它易于计算,否则不值得浪费你的时间。

平均情况:一般来说,这是你能想到的。假设您使用大量输入,这通常是最有用的考虑因素。

最糟糕的情况:对于具有相同平均情况的两种算法,如果你处理任意输入(特别是如果它们是不可信的 - 即你接受来自网络上的人的输入),那么它是一个不错的判断器。在设计中也需要考虑一些事项 - 偶尔会出现这种情况。一般来说,如果你有两个算法是O(n)平均情况,但一个是O(n lg n)最坏情况,一个是O(n ^ 2) - 它可能会影响你决定使用哪个。或者它可能会影响您的算法设计。

示例:快速排序v。合并排序。两者都是O(n lg n)Quicksort的最坏情况是O(n ^ 2),合并排序是(IIRC)仍然是O(n lg n) - 但是一般来说,如果数据适合内存,Quicksort往往会更快。即使它有一个更昂贵的最坏情况,因为我们知道它有一个更昂贵的最坏情况,我们可以尝试缓解它(三个中间而不是一个随机分区等)并利用它通常的事实比mergesort快。