Algorithm 生成括号的递归实现的时间复杂度分析
当我们使用递归函数生成带有Algorithm 生成括号的递归实现的时间复杂度分析,algorithm,time-complexity,Algorithm,Time Complexity,当我们使用递归函数生成带有N有效括号的括号时,时间复杂度与加泰罗尼亚数相同。这对我来说毫无意义 我对时间复杂性的分析是,递归树的每个节点上都有两个操作。我们可以添加一个右括号或左括号。所以我们做了两个递归调用 T(n) = 2 * T(N - 1) = O(2^N) 我得到的O(2^N)是我的时间复杂性——而不是加泰罗尼亚数字。加泰罗尼亚数字对我来说太武断了——毫无意义。有人能进一步解释一下吗?在您的假设中,您将探索所有可以由字符'(“和”)构成的情况。然而,有可能消除其中一些病例,不是吗?例
N
有效括号的括号时,时间复杂度与加泰罗尼亚数相同。这对我来说毫无意义
我对时间复杂性的分析是,递归树的每个节点上都有两个操作。我们可以添加一个右括号或左括号。所以我们做了两个递归调用
T(n) = 2 * T(N - 1) = O(2^N)
我得到的
O(2^N)
是我的时间复杂性——而不是加泰罗尼亚数字。加泰罗尼亚数字对我来说太武断了——毫无意义。有人能进一步解释一下吗?在您的假设中,您将探索所有可以由字符'(“
和”)构成的情况。然而,有可能消除其中一些病例,不是吗?例如,我们知道对于输入N=4
,”)(“
不是有效的/平衡的字符串。事实上,我们从输入该字符串的第一个字符时就知道这一点。这是Python中的递归实现,以便我们可以通过一个示例来观察它
def generate(index, N, s, depth):
if index == N:
print s
if depth > 0:
generate(index + 1, N, s + ')', depth - 1)
if depth < N:
generate(index + 1, N, s + '(', depth + 1)
def生成(索引、N、s、深度):
如果索引==N:
印刷品
如果深度>0:
生成(索引+1,N,s+'),深度-1)
如果深度
本质上,在递归实现中,您保留当前深度的分数。只要该分数小于0
,您就知道字符串变得不平衡,因此没有必要进一步探索。因此,与您假设的相反,您不会同时探索子问题
如果您仔细考虑一下,问题只是找到N=2*K
不同字符的有效排列数。在第一个(最左侧)位置,您可以放置K
字符。(即,所有'('
)在第二个位置,您可以放置其中一个'))“
字符,或者您可以放置剩余的K-1
”(“
字符)。通过这种方法,使用重复排列,您可以发现您提到的问题的复杂性实际上相当于第K个加泰罗尼亚数
基本上,对于长度为2N
的字符串,你有两个不同的字符,每个字符都有N
。使用,all这个字符串可能的排列方式是(2N)!/(N!N!)
。那么,第N个加泰罗尼亚数字的公式就是这个值除以一个额外的(N+1)如果您考虑的是不处理上面提到的不平衡字符串的情况,您可以看到<代码>(n+1)。
因子是由于没有同时计算两个子问题的情况造成的。Hm,它仍然不符合我的要求。我喜欢有效的置换类比。但我不能从这里转到加泰罗尼亚数字——这对我来说毫无意义。@asndondasdoasndo231213我添加了最后一段来演示重复置换如何给你带来好处一些几乎与第n个加泰罗尼亚数相同的排列。也许这可以帮助你进一步理解界。