具有以下递归关系的递归函数的时间复杂度是多少?
T(n) = T(n-1) + T(n-2) + T(n-3), T(0) = T(1) = 1 and T(2) = 2
我知道具有两个递归调用的函数将给我们指数时间复杂度为 O(2 ^ n),这意味着具有上述递归关系的函数将具有时间复杂度是 O(3 ^ n)?
感谢您的帮助。
答案 0 :(得分:2)
更具体地说,假设您具有以下功能:
T(n) = T(n-1) + T(n-1) + T(n-1), T(0) = 1
这写的方式时间复杂度恰好是O(3 ^ n)。
您的函数比该函数要好一些,但时间复杂度仍然相同 O(3 ^ n)
现在,如果我们像这样重写我建议的代码
T(n) = 3 * T(n-1), T(0) = 1
复杂度仅为O(n)!因为先前调用的结果被重用而无需再次调用。
因此,在您的实现中,如果您可以有不调用的缓冲区而仅使用先前调用的值(某些语言实际上可以支持此值),那么复杂度将降低为O(n)。