首先画出递归树,每一层的节点数是上一层的 1/2 和 1/4 之和,即 1/2n 和 1/4n,因此可以得到递归树的深度为 log(n)。

每个节点的代价都是 cn,因此每层的代价是 cn 乘以该层的节点数,即 cn(1/2n+1/4n)。将所有层的代价加起来就是总代价。

总代价 T(n) = cn(1/2n+1/4n) + cn(1/4n+1/8n) + ... + cn(1/2^k n + 1/4^k n)

因为递归树的深度是 log(n),所以 k=log(n),代入上式得到:

T(n) = cn(1/2n+1/4n) + cn(1/4n+1/8n) + ... + cn(1/2^log(n) n + 1/4^log(n) n)

T(n) = cn(1/2n+1/4n+...+1/2^log(n) n) + cn(1/4n+1/8n+...+1/4^log(n) n)

这里需要用到一个公式:

1 + 1/2 + 1/4 + ... + 1/2^k = 2 - 1/2^k

将其代入上式得到:

T(n) = cn(2-1/2^log(n)) + cn(2-1/4^log(n))

T(n) = 2cn - cn/2^log(n) + 2cn - cn/4^log(n)

T(n) = 4cn - cn/2^log(n) - cn/4^log(n)

由于 log(n) 是整数,所以可以将 cn/2^log(n) 和 cn/4^log(n) 分别写成 cn/n 和 cn/n^2,得到:

T(n) = 4cn - cn/n - cn/n^2

T(n) = 4cn(1 - 1/n - 1/n^2)

因此,递推公式 T(n) 的解为 T(n) = 4cn(1 - 1/n - 1/n^2)。

递归树方法求解递推公式 T(n)=T(n/2)+T(n/4)+cn

原文地址: https://www.cveoy.top/t/topic/m63f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录