: n deep - n-1 ( n-1 ).
. X[n] - n , Y[n] - , n, :
X[n] = \( (Y[n-2] X[n-1])+ Y[n-2] \)
Y[n] = [^()]* ( \( Y[n-1] \) [^()]* )*
Y[0] = X[0] = [^()]* ( ) X[1] = \([^()]*\). ( , .., .)
, , .
( -) ( , ).
l[n] - X[n], l[n] - Y[n], ( ):
L[n] = 19 + L[n-1] = 19*n + L[0] = 19*n + 6
l[n] = 3 + L[n-2] + l[n-1] + 2 + L[n-2] + 2
= 7 + 2 * L[n-2] + l[n-1]
= -57 + 38 * n + l[n-1]
l[0] l[1]. , O(n^2). .
( Y[n] Y[n] = Y[n-1] | X[n], , X O(2.41^n), .)
( Y - , X, n. , X , .)
Python, , javascript .
np = "[^()]*"
def next_y(y_n1):
return np + "(?:\(" + y_n1 + "\)" + np + ")*"
def next_x(x_n1, y_n2):
return "\((?:" + y_n2 + x_n1 + ")+" + y_n2 + "\)"
def XY(n):
if n == 0:
return [np,
np,
""]
elif n == 1:
return ["\([^()]*\)",
next_y(np),
np]
x_n1, y_n1, y_n2 = XY(n-1)
return [next_x(x_n1, y_n2),
next_y(y_n1),
y_n1]
def X(n):
return XY(n)[0]
def Y(n):
return XY(n)[1]