小言_互联网的博客

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

409人阅读  评论(0)

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

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. 总结

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

转载:https://blog.csdn.net/qq_37375427/article/details/100863667
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场