algorithm - 如何计算这个函数的增长率 : T(n) = 2T(n^(1/2)) + 2(n^(1/2))

标签 algorithm big-o

我的作业需要计算这个函数的增长率:

T(n) = 2T( n^(1/2) ) + 2( n^(1/2) )

换句话说:

T(n) = 2T( sqrt(n) ) + 2( sqrt(n) )

改变变量可能会有帮助(比如 n = 2^m)

我找到的答案是 log(n)*log(log(n)),但我知道这是不正确的。

最佳答案

n = 2^m 确实是要使用的正确变量替换。定义一个函数S(m):

S(m) = T(n) = T(2^m)

T(sqrt(n)) = T(2^[m/2]) = S(m/2)

S(m) = 2S(m/2) + 2^[m/2+1]

扩展:

S(m) =  4*S(m/4)  + 2*2^[m/4+1]  + 2^[m/2+1]
     =  8*S(m/8)  + 4*2^[m/8+1]  + 2^[m/4+2] + 2^[m/2+1]
     = 16*S(m/16) + 8*2^[m/16+1] + 2^[m/8+3] + 2^[m/4+2] + 2^[m/2+1]
     = ...

2^[m/2] 将支配所有其他项,因此:

S(m) = O(2^[m/2])

*********************
*                   *
* T(n) = O(sqrt(n)) *
*                   *
*********************

以上也可以使用Master Theorem推导出来(案例 3)。

关于algorithm - 如何计算这个函数的增长率 : T(n) = 2T(n^(1/2)) + 2(n^(1/2)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849167/

相关文章:

java - 打印字符串排列的算法 - 运行时间分析

java - 我们可以在LinkedHashSet中的固定点插入元素吗?

c++ - 在运行时求解 y 立方方程

algorithm - 通过位操作处理负数

algorithm - 时间复杂度分析。 while 循环与内部 for 循环

time-complexity - for循环内递归函数的时间复杂度

java - 在实例中运行并在再次运行前停止 5 分钟的代码

algorithm - 了解 Big-Ω (Big-Omega) 符号

c++ - 通过计算步数计算算法复杂度

algorithm - 算法的时间复杂度