算法导论(d4)

第二章 算法入门

2.3 算法设计

2.3.2 分治法分析

       一个算法的优劣还是需要通过计算时间复杂度来比较,之前插入排序的算法复杂度为O(n^2), 那么下面介绍如何计算分治算法的时间复杂度该如何计算。

       还是我们之前提到的三个步骤,分解,解决和合并。

       分解:把原问题分解为a个子问题(据情况而定不一定为2),设为Dn

       解决:  每一个问题的大小为原问题的1/b(对于同一个算法来说,n决定解决问题所需的时间).

       合并:设为Cn

算法导论(d4)

这里 算法导论(d4)  c的大小与代码相关可以理解为停止分解的条件。

合并排序算法的分析

这里主要提一下合并排序算法的合并过程是一个大小为O(n)的算法,大家可以回过头看我上一章的内容,循环次数是n(r-p+1),那么时间复杂度是一个n的函数,那么近似为O(n)

算法导论(d4)

这里给出的递归式中,n大于1的情况原式本该

                                                                                   算法导论(d4)

这里把O(n)和O(1) 合并为O(n) ~ cn 的函数。

算法导论(d4)

那么究竟如何计算T(n)呢?

                       算法导论(d4)

图d很好地解释了Tn的大小如何计算,递归树总层数tn是lgn+1,可以简单的推一下,lg1=0,tn = 1, lg2 = 1, tn = 2, ...,

最后忽略常数c和低阶项cn得到最后的O(n) = nlgn

算法导论(d4)

算法导论(d4)