算法导论(d4)
第二章 算法入门
2.3 算法设计
2.3.2 分治法分析
一个算法的优劣还是需要通过计算时间复杂度来比较,之前插入排序的算法复杂度为O(n^2), 那么下面介绍如何计算分治算法的时间复杂度该如何计算。
还是我们之前提到的三个步骤,分解,解决和合并。
分解:把原问题分解为a个子问题(据情况而定不一定为2),设为Dn
解决: 每一个问题的大小为原问题的1/b(对于同一个算法来说,n决定解决问题所需的时间).
合并:设为Cn
这里
c的大小与代码相关可以理解为停止分解的条件。
合并排序算法的分析
这里主要提一下合并排序算法的合并过程是一个大小为O(n)的算法,大家可以回过头看我上一章的内容,循环次数是n(r-p+1),那么时间复杂度是一个n的函数,那么近似为O(n)
这里给出的递归式中,n大于1的情况原式本该
这里把O(n)和O(1) 合并为O(n) ~ cn 的函数。
那么究竟如何计算T(n)呢?
图d很好地解释了Tn的大小如何计算,递归树总层数tn是lgn+1,可以简单的推一下,lg1=0,tn = 1, lg2 = 1, tn = 2, ...,
最后忽略常数c和低阶项cn得到最后的O(n) = nlgn