Python 计算N个节点的不同BST(二进制搜索树)的数量时,此代码的复杂性是多少?
我正在读这篇文章,我想知道 如果n个节点中的不同二叉搜索树没有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:
(2n)!/((n+1)!*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)