从N个节点计算不同BST(二叉搜索树)数量的代码的复杂性是多少?

时间:2013-09-29 15:49:30

标签: python algorithm binary-tree complexity-theory time-complexity

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!)  来自 this 帖子。

然后

  1. 时间复杂度会是多少?上!) ?
  2. 什么是复发关系?

1 个答案:

答案 0 :(得分:2)

当您致电count(n)时,它会将count(0)分别拨打count(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)复杂度。