我遇到了一个关于快速排序算法的问题。这是来自中国大学CS 234数据结构的2010年中期考试。
假设在快速排序中,分区过程需要C次,(消耗恒定时间)。如果我们使用随机数据作为输入,那么Randomized-Quick Sort的顺序(时间复杂度)是什么?
任何人都可以用这种方式描述时间的复杂性吗?
编辑:
我计算这些关系。我的工作是对的?谁能澄清我?
Best Case: T(n)=2T(n/2)+C= Theta (n)
Worst Case: T(n)=2T(n-1)+C= Theta (n)
答案 0 :(得分:0)
您正在寻找预期的运行时间:T(n)
的预期值。所以让T(n)
成为运行时的随机变量。有n
个可能的结果,每个结果对应一个分区:
T(0) + T(n-1) + c
T(1) + T(n-2) + c
...
T(n-1) + T(0) + c
其中一个将被挑选,选择X(i) = 1 if T(i) + T(n - i - 1) + c
,否则0
。 T(n)
的重复可以写成:
T(n) = X(0)(T(0) + T(n-1) + c) + ... + X(n-1)(T(n-1) + T(0) + c)
现在计算期望值,我们写道:
E( T(n) ) = E( X(0)(T(0) + T(n-1) + c) + ... + X(n-1)(T(n-1) + T(0) + c) )
= (1/n)E(2T(0) + 2T(1) + ... + 2T(n-1) + cn)
= (2/n)(E((T(0)) + ... + E(T(n-1))) + c.
通过期望的线性获得第三条线。在这一点上,我们将猜测E( T(i) )
的答案并使用归纳来证明它。这种技术称为替代。
E( T(i) ) <= Ai
,A > 0
和1 <= i < n
。E( T(n) ) <= (2A/n)(n(n-1)/2) = A(n-1) <= An
。所以声明适用于n。预计运行时间为O(n)
。