【算法设计与分析】10 差消法化简高阶递推方程

上一篇文章使用递推方程的方法求解了插入排序和二分归并的时间复杂度,本文来求解快速排序的时间复杂度,同样是利用了递推方程法,但是求解该递推方程的方法与以前不一样:差消法

1. 快速排序的时间复杂度求解

这里求解的是快速排序的平均时间复杂度,并非求解的是最坏情况时间复杂度,为什么?

想想上一篇文章,都是可以很容易的列出求解时间复杂度的递推式子。而在求解快速排序的平均情况时间复杂度时,有一些不太一样。

假设A[p,…,r] 的元素都不相等,以首元素A[1]对数组划分,使得:

  • 小于x的元素被放在A[p,…,q-1]
  • 大于x的元素被放在A[q+1,…,r]

然后递归的对A[p,…,q-1]和A[q+1,…,r]进行快速排序的过程。

那么上述的工作量就是:子问题工作量+划分问题的工作量

上述过程的输入情况如下:

  • 有n种可能的输入
    在这里插入图片描述

对上面的每种输入,划分的比较次数都是n-1

那么由此可以计算出工作量总和:

在这里插入图片描述
那么假设首元素排好序在每个位置的概率都是相等的,则可求出快速排序的平均工作量(总工作量/元素个数):

在这里插入图片描述

  • 可以看出,上述的递推方程式是关于全部历史的递推方程,很难通过迭代法进行求解。

对于高阶的地拖方程,一般使用差消法,进行求解。利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。

在这里插入图片描述

  • 差消化简
    在这里插入图片描述

  • 迭代求解

在这里插入图片描述

可以看出,最终求解的快速排序的平均情况下的时间复杂度是 n l o g n nlogn nlogn级别的。这一结果,正是我们所熟悉的结果。

2. 总结

  • 对于高阶递推方程的求解,要先用差消发进行化简为一阶递推方程,然后再使用迭代法进行计算。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值