上篇文章中我们对归并排序的时间复杂度使用递归树法进行了简答的分析,并得出了结果归并排序的时间复杂度为,这里将使用代换法再进行一次分析。使用代换法解递归式的时候,主要的步骤有两步:
1)猜测解的结果
2)使用数学归纳法验证猜测结果
由上篇文章的递归树分析中我们得出,我们这里将使用代换法对归并排序的递归式进行求解,下面分别用,,三个证明进行代入分析。
证明1
首先猜测归并排序的时间复杂度为,假设 对于 所有的 ,都满足
,对于所有的
当证明不等式成立时,归并排序的时间复杂度为O(n)成立,但很明显不等式只有当k=0的时候才成立,所以结论归并排序的时间复杂度为O(n)不成立。
证明2
假设归并排序的时间复杂度为,假设对于所有的,都符合
当时不等式均成立,,不等式成立。所以对于c为正常数,时,归并排序的时间复杂度为成立。
证明3
假设归并排序的时间复杂度为,假设对于所有的,都符合
所以当 c,k取任何数值时,不等式均成立,所以对于任意的c,,归并排序的时间复杂为均成立。
经过上面的三次证明后,可以很容易发现代换法的缺点,对解的猜测要求比较高,证明1中由于猜测结果过小无法满足要求,证明2中猜测结果过大又无法获得一个渐进紧确界,所以对于递归式函数的复杂度求解,往往首先由主定理或递归树法求得结果,再由代换法二次证明。