快速排序的最佳案例表现(代字符号)

时间:2015-06-11 06:12:00

标签: algorithm sorting time-complexity quicksort

我的教授表示,快速排序的最佳情况是分割是平衡的(即当枢轴始终是中间的元素时)。

现在可以通过使用循环关系来确定最佳案例快速排序的复杂性,如下所示:

T(n) = 2*T(n/2) + partitioning(n)

在下一步中他说:

因此= ~n * log2(n)

有人可以详细说明你是如何计算出来的。我已经搜索了很多,但所有的解释都是大写的,或者没有真正解释如何解决/计算重现性。

2 个答案:

答案 0 :(得分:0)

我将在这个答案中解决Tilde Notation,假设partitioning(n)本身就是~n,这意味着它会及时运行G(n) = n + C

在这种情况下,最佳案例的复杂性函数是:

使用T(1) = 1+C

的基本子句
T(n) = 2T(n/2) + (n+C)

声明:适用于所有n>0

T(n) = n(1+logn) + (2n-1)C

通过归纳证明。
基本条款:对于T(1),索赔作为基础。

T(n) = 2T(n/2) + (n + C)
T(n) = 2(n/2 log(n/2) + n/2 + (n-1)C) +(n + C) //induction hypothesis
T(n) = nlog(n/2) + n + (2n-2)C + n  + C
T(n) = nlog(n/2) + nlog(2) + n + (2n-2)C + C
T(n) = nlog(n/2 * 2) + n +(2n-2+1)C
T(n) = n(logn+1) + (2n-1)C

T(n) = nlogn + (2C+1)n - C以来,我们可以得出结论:~nlogn

答案 1 :(得分:0)

答案来自Master Theorem

Quicksort最佳运行时间的递归关系是:

T(n) = 2T(n/2) + Θ(n)

主定理推广了与形式的递归关系:

T(n) = aT(n/b) + f(n)

比较两个方程:

a = 2

b = 2

f(n) = Θ(n)

f(n) = Θ(n)起,来自Master定理的案例2:



If f(n) = &theta;(n<sup>log<sub>b</sub>a</sup>), then T(n) = &theta;(n<sup>log<sub>b</sub>a</sup>lg(n))
&#13;
&#13;
&#13;

因此,Quicksort在最佳情况下的时间复杂度降低到

T(n) = Θ(n lg(n))

编辑: 如果你问为什么它用代字符~n * log2(n)而不是Big-O表示法,那是因为在你的情况下,目标必须是创建一个运行时间的近似模型(如果那里没有忽略常量)是的,而不是发展复杂性的上限。此外,波浪符号对于预测性能非常有用,而Big-O符号则不是。