使用最差/平均/最佳情况进行渐近分析

时间:2013-08-11 21:14:32

标签: algorithm complexity-theory big-o analysis asymptotic-complexity

我理解最差/平均/最佳情况用于确定算法进入函数的复杂性时间,但是如何用于渐近分析?我理解上/下/下限(大O,大欧米茄,大theta)用于比较两个函数,并且当n增加时看到它的限制(增长)是对另一个的透视,但是我很难看到最差/平均/最佳案例大O与渐近分析之间的差异。我们究竟究竟将最差/平均/最佳情况大O归入渐近分析和测量边界?我们是否会使用渐近分析来专门比较最差/平均/最佳情况大O的两种算法?如果是这样,我们对算法1使用函数f(n),对算法2使用g(n),或者我们对算法1为f(n)的每个算法进行单独的渐近分析,我们尝试找到一些c * g(n)这样=> f(n)和c * g(n)< = f(n)然后对算法2做同样的事情。我在这里看不到大图。

3 个答案:

答案 0 :(得分:4)

既然你想要全局,那么让我试着给你一样。

渐近分析用于研究运算时间随着输入大小的增加而增长。这种增长是根据输入大小进行研究的。输入大小通常表示为 N M ,它可能意味着从数字的数量(如排序),节点的数量(如图中)或偶数位数(如两个数字的乘法)。

在处理渐近分析的过程中,我们的目标是找出哪种算法在特定情况下的表现更好。即使对于相同大小的输入,算法也会在相当不同的时间运行。要理解这一点,请考虑您是一台分拣机。您将成为给出一组数字,你需要对它们进行排序。如果我给你一个排序的数字列表,你将没有工作,你已经完成了。如果我给你一个反向排序的数字列表,想象操作的数量你需要做的是使列表排序。现在你看到了这一点,意识到我们需要一种方法来了解输入的情况是什么?这是最好的情况吗?我会得到最坏的情况输入吗?要回答这个问题,我们需要一些关于输入分布的知识。这一切都是最坏的情况吗?还是平均情况?还是最好是最好的情况?

在大多数情况下,很难确定输入分布的知识。然后我们有两个选项。我们可以一直假设平均情况并分析我们的算法,或者我们可以得到运行情况的保证不管输入分布如何。前者被称为平均案例分析,并且做这样的分析需要对平均情况的正式定义。有时这很难定义并且需要很多数学见解。所有问题都是值得一提的是,当您知道某些算法在平均情况下运行速度要快得多,与最差情况下的运行时间相比。有几种随机算法可以证明这一点。在这种情况下,进行平均案例分析可以发现它的实际适用性。 后者,最坏情况分析更经常使用,因为它提供了运行时间的良好保证。在实践中提出最坏的情况通常是相当直观的。你是排序机,最坏的情况就像反向排序数组。平均情况是什么? 是的,你在想,对吧?不那么直观。

最好的案例分析很少使用,因为并不总能得到最好的案例。但是,人们可以进行这样的分析并找到有趣的行为。

总之,当我们遇到一个我们想要解决的问题时,我们会提出算法。一旦我们有算法,我们需要决定它是否对我们的情况有任何实际用途。如果我们继续并将其列入候选名单。可以应用的算法,并根据它们的时间和空间复杂度进行比较。可以有更多的比较指标,但这两个是基本的。一个这样的指标可以很容易实现。并且根据手头的情况,你将采用无论是最坏情况分析还是平均案例分析都是最好的案例分析。例如,如果您很少遇到最坏情况,那么进行平均案例分析会更有意义。但是,如果我们的代码性能具有关键性,我们需要为了在严格的时间限制内提供输出,那么看待最坏情况分析就更加谨慎。因此,你所做的分析取决于手头的情况,随着时间的推移,应用哪种分析的直觉成为第二天性

请询问您是否还有其他问题。

要了解有关大哦和其他符号的更多信息,请阅读我的答案herehere

答案 1 :(得分:1)

Wikipedia article on quicksort提供了一个很好的例子,说明如何在最佳/平均/最差情况下使用渐近分析:它有一个O(n ^ 2)的最坏情况,平均情况为O(n log n) ,以及O(n log n)的最佳情况,如果你将它与另一种算法(比如heapsort)进行比较,你会比较苹果和苹果,例如你要比较quicksort的最坏情况的big-theta到heapsort的最坏情况的big-theta,或者quicksort的空间大哦 - 到heapsort的空间大哦。

如果你对上限感兴趣,你也可以将big-theta与big-theta进行比较,如果你对下界感兴趣,你可以比较big-theta到big-ome。

Big-omega通常只是理论上的兴趣 - 你更有可能看到大喔或大analysis的分析。

答案 2 :(得分:0)

我们究竟究竟将最差/平均/最佳案例大O归入渐近分析和测量边界?

它只是在您比较某些问题的不同方法时给出了一个想法。这将有助于您比较不同的方法。

我们是否会使用渐近分析来专门比较最差/平均/最佳情况大O的两种算法?

与Big Omega和theta相比,通常只有更糟糕的情况会更受关注。 是的,我们对算法1使用函数f(n),对算法使用g(n)。这些函数是各自算法的大O.