Python 计算N个节点的不同BST(二进制搜索树)的数量时,此代码的复杂性是多少?

Python 计算N个节点的不同BST(二进制搜索树)的数量时,此代码的复杂性是多少?,python,algorithm,binary-tree,complexity-theory,time-complexity,Python,Algorithm,Binary Tree,Complexity Theory,Time Complexity,我正在读这篇文章,我想知道 如果n个节点中的不同二叉搜索树没有 (2n)!/((n+1)!*n!) 从邮局 然后 时间复杂度是多少?O(n!) 什么是递归关系 当您调用count(n)时,它会调用count(0)到count(n-1)两次 所以我认为你可以这样写循环: T(n)=2*sum[T(0)到T(n-1)]+nk其中k表示乘法和求和部分 现在考虑: def count(n): if n == 0 or n == 1: return 1 else:

我正在读这篇文章,我想知道 如果n个节点中的不同二叉搜索树没有

(2n)!/((n+1)!*n!)
从邮局

然后

  • 时间复杂度是多少?O(n!)
  • 什么是递归关系
  • 当您调用
    count(n)
    时,它会调用
    count(0)
    count(n-1)
    两次

    所以我认为你可以这样写循环:

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

    现在考虑:

    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
    

    解决这个问题,它似乎具有
    O(3^n)
    复杂性。

    如果你指的是加泰罗尼亚数字的增长,那并不意味着什么。函数本身的增长和如何计算值是两个不同的问题。
    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)