修改后的快速排序算法的时间复杂度是多少?

时间:2015-02-19 10:45:14

标签: arrays algorithm sorting big-o time-complexity

我们使用常规的快速排序算法。选择的枢轴是中位数,但是为了找到最小值Theta(n^{2006/2005})最差的中位数。

为什么算法的最差情况等于Theta(n^{2006/2005}) 而不是 Theta(n^{2006/2005} * logn)

1 个答案:

答案 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}}的值足够大。