给定f(x, y)
和g(n)
:
def f(x, y):
if x < 1 or y < 1:
return 1
return f(x - 1, y - 1) + f(x - 1, y - 1)
def g(n):
return f(n, n)
g(n)
的大Theta界限是什么?
我推断,因为x == y,f(x, y)
中的条件永远不会成立,所以2次递归调用将决定复杂性。
仅考虑f(x - 1, y - 1)
:它需要n个递归调用才能到达基本情况,每个调用分支到另一个f(x - 1, y - 1)
。在这一点上,我不知道如何继续。
(答案是Θ(2 n )。)
答案 0 :(得分:1)
解决此问题的一种方法是为问题编写递归关系。如果您注意到,f的参数总是彼此相等(您可以看到这一点,因为它们在对g(n)的调用中起始相同,并且此时始终相等)。因此,我们可以编写一个递归关系T(n)来确定f(n,n)的运行时间。
那么T(n)会是什么?好吧,作为基本情况,T(0)将为1,因为只要n下降到0,函数就会执行一定量的工作。否则,函数会执行一定量的工作,然后对问题进行两次递归调用大小为n - 1.因此,我们得到这种复发:
T(0)= 1
T(n + 1)= 2T(n)+ 1
看一下复发的条件,我们看到了一种模式:
如果您愿意,可以使用归纳法正式证明这一点。由于T(n)由2 n + 1 - 1给出,因此运行时间为Θ(2 n )。
希望这有帮助!