剪开黑夜

In the twilight of every early morning

导航

算法分析基础——差消法求解高阶递推方程

Posted on 2019-01-22 00:15  剪开黑夜  阅读(965)  评论(0编辑  收藏  举报

差消法,简单来讲,就是对高阶的递推方程作差,转化为一阶方程后再运用迭代法。有了迭代法的基础后,差消法理解起来就很容易了。这里举出对快速排序的分析加以说明。

对于快排,我们知道选择不同的轴值,会导致不同的算法效率。最坏的情况下,选取的轴值恰好是待排序数组的最值,那么排序的效率就会退化为线性时间。现在我们来估算平均情况下快速排序的时间复杂度。

设T(n)为待排序数组长度为n时,快速排序算法需要的比较次数。那么T(1) = 0,而T(n)的递推方程相对于轴值的选取有如下n种情况:

T(n) = T(0) + T(n - 1) + n - 1

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

...

T(n) = T (n - 1) + T(0) + n - 1

假定选取的轴值在排序后的数组中的每个位置出现的概率相等。那么平均情况下,就可以计算得到T(n)的递推表达式为

这是n阶的递推方程,不适合直接采用迭代法。接下来即运用差消法来求解:将O(n)用cn来表达,得到

两式相减得

再同除以n(n+1),得到熟悉的一阶递推方程

于是我们得出T(n) = Θ(nlogn)。