【算法笔记】差消法化简高阶递推方程示例:计算快速排序平均时间复杂度

快速排序代码如下:

void quickSort(int a*, int p, int r)
{
    if(p < r)
    {
        int q = partition(a, p, r); //划分
        quickSort(a, p, q-1);
        quickSort(a, q+1, r);
    }
}

每一趟的工作量 = 子问题的工作量 + 划分的工作量(即划分的比较次数)
下图展示了n种可能的输入:

【算法笔记】差消法化简高阶递推方程示例:计算快速排序平均时间复杂度_第1张图片

每一次划分的比较次数为 n-1,则工作量总和有:

【算法笔记】差消法化简高阶递推方程示例:计算快速排序平均时间复杂度_第2张图片

上述工作量总和可简写为

假设首元素排好序在每个位置是等概率的,则有:


下面利用差消法化简上述递推方程,即

首先,两边同时乘n,有

将带入,得:

为了灭掉,得:

也就是:

对两边同时除以得

对向下写出所有等式:

迭代求解,将这些等式带回去得:

因为,

所以,

综上,


参考资料:https://www.icourse163.org/course/PKU-1002525003

你可能感兴趣的:(【算法笔记】差消法化简高阶递推方程示例:计算快速排序平均时间复杂度)