我的教授表示,快速排序的最佳情况是分割是平衡的(即当枢轴始终是中间的元素时)。
现在可以通过使用循环关系来确定最佳案例快速排序的复杂性,如下所示:
T(n) = 2*T(n/2) + partitioning(n)
在下一步中他说:
因此= ~n * log2(n)
有人可以详细说明你是如何计算出来的。我已经搜索了很多,但所有的解释都是大写的,或者没有真正解释如何解决/计算重现性。
答案 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) = θ(n<sup>log<sub>b</sub>a</sup>), then T(n) = θ(n<sup>log<sub>b</sub>a</sup>lg(n))
&#13;
因此,Quicksort在最佳情况下的时间复杂度降低到
T(n) = Θ(n lg(n))
编辑:
如果你问为什么它用代字符~n * log2(n)
而不是Big-O表示法,那是因为在你的情况下,目标必须是创建一个运行时间的近似模型(如果那里没有忽略常量)是的,而不是发展复杂性的上限。此外,波浪符号对于预测性能非常有用,而Big-O符号则不是。