算法导论(d4)

第二章 算法入门

2.3 算法设计

2.3.2 分治法分析

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

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

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

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

       合并:设为Cn

这里 n\leq c,  c的大小与代码相关可以理解为停止分解的条件。

合并排序算法的分析

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

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

                                                                                   2T(n/2)+O(n)+O(1)

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

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

                       T(n) = 2T(n/2)+cn =2(2T(n/4)+cn/2+cn/2)+cn=4T(n/4)+2cn, ...

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值