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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37375427/article/details/100863667

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

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 级别的。这一结果,正是我们所熟悉的结果。

2. 总结

  • 对于高阶递推方程的求解,要先用差消发进行化简为一阶递推方程,然后再使用迭代法进行计算。

猜你喜欢

转载自blog.csdn.net/qq_37375427/article/details/100863667