0
def count(n):
    if n == 0 or n == 1:
        return 1
    else:
        sum = 0 
        left = 0        
        right = 0
        for x in range(1,n+1):
            left = count(x-1)
            right = count(n-x)
            sum +=  left * right
    return sum

我正在阅读这篇文章,我想知道是否没有来自 n 个节点的不同二叉搜索树

(2n)! / ((n+1)! * n!)这篇文章。

然后

  1. 时间复杂度是多少?上!) ?
  2. 什么是递归关系?
4

1 回答 1

2

当您调用时count(n),它会调用每个count(0)tocount(n-1) 两次

所以我认为你可以这样写重复:

T(n) = 2 * sum[T(0) upto T(n-1)] + nk其中k代表乘法和求和部分。

现在考虑:

T(n+1) = 2 * sum[T(0) upto T(n)] + (n+1)k
       = 2 * sum[T(0) upto T(n-1)] + 2T(n) + nk + k
       = T(n) + 2T(n) + k
       = 3T(n) + O(1)

解决这个问题似乎很O(3^n)复杂。

于 2013-09-29T16:34:04.607 回答