小编Frz*_*zzy的帖子

非常复杂的递归代码的时间复杂度

我在尝试计算此代码的时间复杂度时遇到了一些问题:

function foo (int a):
    if a < 1: 
        return 1
    else:
        for i = 1 to 4:
            foo(a - 3)
        for i = 1 to 4:
            foo(a / 2)
end function
Run Code Online (Sandbox Code Playgroud)

据我所知:

T(n) = 1 if n<1

T(n) = 4T(n-3) + 4T(n/2)     if n>=1

     = 4(4T(n-6) + 4T((n-3)/2))  +  4(4T(n/2 - 3) + 4T(n/4))

     ~ 4^2 (T(n-6) + T((n-3)/2) + T(n/2-3) + T(n/4))
Run Code Online (Sandbox Code Playgroud)

现在,它非常复杂,因为下一个T的数量增加了2 ^ n,而且孩子也很复杂.

有没有其他方法可以解决这个问题?

language-agnostic algorithm complexity-theory recurrence time-complexity

15
推荐指数
2
解决办法
708
查看次数