我们使用常规的快速排序算法。选择的枢轴是中位数,但是为了找到最小值Theta(n^{2006/2005})
最差的中位数。
为什么算法的最差情况等于Theta(n^{2006/2005})
而不是 Theta(n^{2006/2005} * logn)
?
答案 0 :(得分:3)
首先,您需要了解每个"迭代"事实上,N^2006/2005
不是N
,其中n^2006/2005
是ORIGINAL数组的大小 - 因为这是一个超线性函数,在数组的两半中找到中位数比在大数组中找到它更容易
为了正式证明它,我们首先要定义递归复杂度公式:(为简单起见,我们假设中位数恰好是C*n^2006/2005
,但很容易将其修改为T(n) = n^2006/2005 + 2T(n/2)
的上限。 )
T(n) <= 2* n^2006/2005
现在,我们可以通过证明来证明
n
这里的基本子句对于k<n
足够小的值来说是微不足道的。
假设每个T(k) <= 2*(n/2)^2006/2005
假设T(n) = n^2006/2005 + 2T(n/2) <= (i.h.)
<= n^2006/2005 + 2*(2*(n/2)^2006/2005) =
= n^2006/2005 + 4 * (n/2)^2006/2005 =
= (*) 2^(2004/2005) *n^(2006/2005) + n^(2006/2005)
<= 2*n^(2006/2005)
成立。
Omega(nlogn)
(*)相等来自wolfram alpha,您也可以使用公式上的某些代数来推导它。
另请注意,这与排序为n^(1+epsilon) > nlogn
这一事实并不矛盾,因为每epsilon>0
n
,{{1}}的值足够大。