트라이앵귤레이션 문제로 살펴보는 카탈란 넘버

삼각형 카운팅에서 카탈란 넘버까지

카탈란 넘버의 역사적 배경에 중요한 문제가 있습니다. 볼록 다각형 트라이앵귤레이션triangulation이라고 부르는 이 문제는 볼록 다각형을 삼각형으로 나누는 방법이 몇 가지인지 물어봅니다. 예를 들어, 오각형은 다음과 같이 다섯 가지 방법이 있습니다.

Pentagon triangulation
그림 1. 오각형 트라이앵귤레이션. 삼각형으로 나누는 방법이 다섯 가지 존재합니다.

나아가 nn각형에 대해 풀면 여지없이 카탈란 넘버를 발견하게 됩니다. 나중에 보겠지만 여기서 다음 카탈란 점화식을 이끌어낼 수 있습니다.

Cn=4n2(n+1Cn1C_n = \frac{4n-2\mathstrut}{n+1} C_{n-1}

또한 점화식과 달리 연쇄적인 계산이 필요 없는 클로즈드 폼closed-form을 얻을 수 있습니다.

Cn=1n+1(2nn)C_n = \frac{1}{n+1} {2n \choose n}

여기서 (2nn){2n \choose n}이항 계수binomial coefficient입니다.

이 글에서는 트라이앵귤레이션 문제를 통해 위 관계식을 어떻게 유도해낼 수 있는지 소개할 것입니다. 즉 주로 수학적인 내용이 관심사가 될 것입니다. 이항 계수와 간단한 미적분을 배경 지식으로 전제하고 진행하겠습니다.

다각형을 삼각형으로 나누기

트라이앵귤레이션 문제의 답이 왜 카탈란 넘버가 되는지 보겠습니다.

간단한 예로 오각형을 나눠봅시다. 여기서 첫 번째 꼭지점과 다섯 번째 꼭지점을 주목해봅시다. 다른 꼭지점을 고르면 삼각형을 만들 수 있는데요. 이 경우에는 세 가지 방법이 있습니다.

Three cases for a given vertex
그림 2. 한 모서리에 대한 세 가지 케이스. 1번과 5번 꼭지점이 어디와 삼각형을 이루는 지에 따라 케이스가 나눠집니다.

이 삼각형은 양 옆에 두 다각형을 만듭니다. 이렇게 작은 두 문제를 만드는 패턴은 이전글에서도 똑같이 보였던 패턴입니다. 따라서 삼각형으로 나누는 방법의 수는, 양쪽 다각형의 답을 곱한 것이 됩니다.

nn각형을 삼각형으로 나눌 수 있는 방법의 개수를 TnT_n이라고 해봅시다. 그러면 오각형을 나누는 방법의 수 T5T_5는 다음과 같습니다.

T5=T2T4+(T3)2+T4T2T_5 = T_2 T_4 + (T_3)^2 + T_4 T_2

그런데 오각형에서 멈출 필요는 없습니다. nn각형으로 일반화하기 위해, 첫 번째 꼭지점과 nn번째 꼭지점을 잇는 모서리를 봅시다. kk번째 꼭지점과 삼각형을 만들면, 양 옆에 kk각형과 (nk+1)(n-k+1)각형이 만들어집니다.

General cases for a given vertex
그림 3. 오각형의 경우에서 일반적인 경우로 확장할 수 있습니다.

꼭지점의 범위 2k(n1)2 \le k \le (n-1)에 따라서 전부 더하게 되면, 트라이앵귤레이션의 답이 됩니다.

Tn=T2Tn1+T3Tn2++Tn1T2T_n = T_2 T_{n-1} + T_3 T_{n-2} + \cdots + T_{n-1} T_2

여기서 Cn=Tn+2C_n = T_{n+2}라고 둔다면, 카탈란 점화식을 얻게 됩니다.

Cn=C0Cn1+C1Cn2++Cn1C0(Eq.1)\tag{Eq.1} C_n = C_0 C_{n-1} + C_1 C_{n-2} + \cdots + C_{n-1} C_0

따라서 nn각형을 삼각형으로 나누는 방법은 Cn2C_{n-2}가지, 즉 카탈란 넘버가 됩니다.

삼각형 대신 선으로 나누기

다른 방법으로 케이스를 나눈다면 또다른 카탈란 점화식인 Cn=4n2n+1Cn1C_n = \frac{4n-2}{n+1} C_{n-1}을 얻을 수 있습니다. 이 식을 얻으려고 하는 이유는, 이로부터 클로즈드 폼인 Cn=1n+1(2nn)C_n = \frac{1}{n+1} {2n \choose n}이 바로 유도되기 때문입니다.

이번에는 삼각형 대신 대각선으로 나눠보겠습니다. 첫 번째 꼭지점에서 kk번째 꼭지점까지 대각선을 긋는다고 생각해봅시다.

Polygon divided
그림 4. 대각선으로 나눠진 다각형. 1번 꼭지점에서 어디로 대각선을 긋는지에 따라 나눕니다. 이 대각선은 삼각형의 한 변으로 쓸 것입니다.

그러면 두 개의 다각형으로 나뉘게 됩니다. 이때 kk는 범위를 3k(n1)3 \le k \le (n-1)으로 가지고요. 모든 kk의 범위에 대해 더하게 되면 k=3n1TkTnk+2\sum_{k=3}^{n-1} T_k T_{n-k+2}를 얻게 됩니다.

하지만 첫번째 꼭지점 말고 다른 꼭지점들도 생각할 필요가 있습니다. 일단 중복이 되는 경우를 감수하고, 모든 꼭지점에 대해 똑같이 생각해서 전부 더해봅시다. 그러면 단순히 nn을 곱한 nk=3n1TkTnk+2n \sum_{k=3}^{n-1} T_k T_{n-k+2}개가 됩니다.

그리고 중복이 되는 경우를 생각해본다면, 하나의 트라이앵귤레이션에 대해서 2(n3)2(n-3)번 센 셈이 됩니다. 왜일까요?

Duplicate cases
그림 5. 하나의 트라이앵귤레이션에 대한 중복 케이스들. 오각형의 경우 하나의 트라이앵귤레이션마다 네 가지의 중복된 경우가 존재합니다.

먼저, 삼각형을 이루는 두 대각선 중 하나를 고른 경우에 대해 중복이 생기기 때문에, 대각선의 개수인 (n3)(n-3)으로 나눠야 하고요. 한 대각선은 반대쪽 꼭지점에서 시작해 그을 수 있기 때문에, 여기에 둘로 나눠야하기 때문입니다. 따라서 2(n3)2(n-3)번 중복이 있게 됩니다.

이 중복을 없애면 답은 이렇게 됩니다.

Tn=n2(n3)k=3n1TkTnk+2T_n = \frac{n}{2(n-3)} \sum_{k=3}^{n-1} T_k T_{n-k+2}

여기서 Cn=Tn+2C_n = T_{n+2}로 둔다면, 다음과 같은 식을 얻습니다.

Cn=n+2(2(n1)(C1Cn1+C2Cn2++Cn1C1)C_n = \frac{n+2\mathstrut}{2(n-1)} (C_1 C_{n-1} + C_2 C_{n-2} + \cdots + C_{n-1} C_1)

기존에 얻었던 카탈란 점화식 Eq.1\textrm{Eq.1}을 이용하면 Cn+1=2Cn+4n+2n+2CnC_{n+1} = 2 C_n + \frac{4n+2}{n+2} C_n을 얻습니다. (직접 해보세요.) 여기서 nnn1n-1을 대입하면 원하는 결과가 나오게 됩니다.

Cn=4n2(n+1Cn1(Eq.2)\tag{Eq.2} C_n = \frac{4n-2\mathstrut}{n+1} C_{n-1}

이 식 덕분에 카탈란 넘버를 O(n)O(n)의 시간 복잡도로 계산할 수 있게 됐습니다.

클로즈드 폼 구하기

위의 결과 Eq.2\textrm{Eq.2}를 이용해봅시다. 그러면 점화식 대신 클로즈드 폼을 얻습니다.

Cn=4n2(n+14n6n6322C0=2n(n+1)!(2n1)(2n3)31=2n(n+1)!(2n)!2nn!=1n+1(2nn)\begin{align*} C_n &= \frac{4n-2\mathstrut}{n+1} \frac{4n-6}{n} \cdots \frac{6}{3} \frac{2}{2} C_0 \\ &= \frac{2^n}{(n+1)!} (2n-1)(2n-3) \cdots 3 \cdot 1 \\ &= \frac{2^n}{(n+1)!} \frac{(2n)!}{2^n n!} \\ &= \frac{1}{n+1} {2n \choose n} \end{align*}

이제 nn이 아무리 크더라도 카탈란 넘버를 바로 구할 수 있게 되었습니다.

같은 결과를 미적분으로 해내기

위의 증명은 트라이앵귤레이션, 즉 기하학적인 해석으로부터 카탈란 넘버를 유도하고 있습니다. 그런데 미적분을 이용해 같은 결론을 이끌어 낼 수도 있습니다.

먼저, 계수가 카탈란 넘버 CnC_n인, 제너레이팅 함수generating function라고도 부르는 다음 함수를 생각합니다.

C(x)=n=0CnxnC(x) = \sum_{n=0}^{\infty} C_n x^n

그러면 다음과 같이 이차방정식으로부터 이 함수의 다른 표현을 얻게 됩니다.

(C(x))2(=(C0)2+(C0C1+C1C0)x+(C0C2+(C1)2+C2C0)x2+=C1+C2x+C3x2+=(C(x)C0)/xx(C(x))2C(x)+1=0C(x)=114x2x\begin{align*} & \begin{aligned} (C(x))^{2\mathstrut} &= (C_0)^2 + (C_0 C_1 + C_1 C_0) x + (C_0 C_2 + (C_1)^2 + C_2 C_0) x^2 + \cdots \\ &= C_1 + C_2 x + C_3 x^2 + \cdots \\ &= (C(x) - C_0) / x \end{aligned} \\ & \Rightarrow x(C(x))^2 - C(x) + 1 = 0 \\ \tag{Eq.3} & \Rightarrow C(x) = \frac{1 - \sqrt{1 - 4x}}{2x} \end{align*}

근의 공식 결과에서 양의 부호는 버립니다. 테일러 전개Taylor expansion를 해보면, 14x=12x+\sqrt{1-4x} = 1 - 2x + \cdots 로부터, 1+14x2x=1x1+\frac{1 + \sqrt{1 - 4x}}{2x} = \frac{1}{x} - 1 + \cdots 이므로 1x\frac{1}{x}이 나오기 때문입니다.

먼저, 다음 식은 나중에 증명하기로 합니다.

114x2x=n=01n+1(2nn)xn(Eq.4)\tag{Eq.4} \frac{1 - \sqrt{1 - 4x}}{2x} = \sum_{n=0}^{\infty} \frac{1}{n+1} {2n \choose n} x^n

이 식을 이용하면 Eq.3\textrm{Eq.3}으로부터 다음을 얻습니다.

C(x)=n=0Cnxn=n=01n+1(2nn)xnC(x) = \sum_{n=0}^{\infty} C_n x^n = \sum_{n=0}^{\infty} \frac{1}{n+1} {2n \choose n} x^n

여기서 각 항의 계수가 같아야 하므로, 카탈란 넘버의 클로즈드 폼 Cn=1n+1(2nn)C_n = \frac{1}{n+1} {2n \choose n}을 얻습니다.

미뤘던 증명 끝내기

한편, 방금 사용했던 Eq.4\textrm{Eq.4}의 증명은 다음과 같습니다. 먼저 An=(2nn)A_n = {2n \choose n}이라고 하고, 이를 계수로 갖는 함수 f(x)=n=0Anxnf(x) = \sum_{n=0}^{\infty} A_n x^n을 생각해봅시다. xx로 미분하면 다음을 얻습니다.

xf(x)=x(n=1nAnxn1)=n=0nAnxnx f'(x) = x \left( \sum_{n=1}^{\infty} n A_n x^{n-1} \right) = \sum_{n=0}^{\infty} n A_n x^n

그런데 이항 계수의 정의를 이용하면 (n+1)An+1=(4n+2)An(n+1) A_{n+1} = (4n+2) A_n을 얻을 수 있습니다. (직접 해보세요.) 이제 미분한 A(x)A'(x)에 이 식을 이용해 다음을 얻습니다.

f(x)=n=0(n+1)An+1xn=n=0(4n+2)Anxn=4n=0nAnxn+2n=0Anxn=4xf(x)+2f(x)f(x)f(x)=214x\begin{align*} & \begin{aligned} f'(x) &= \sum_{n=0}^{\infty} (n+1) A_{n+1} x^n = \sum_{n=0}^{\infty} (4n+2) A_n x^n \\ &= 4 \sum_{n=0}^{\infty} n A_n x^n + 2 \sum_{n=0}^{\infty} A_n x^n \\ &= 4xf'(x) + 2f(x) \end{aligned} \\ & \Rightarrow \frac{f'(x)}{f(x)} = \frac{2}{1-4x} \end{align*}

양변을 적분하면 f(x)=1/14xf(x) = 1/\sqrt{1-4x}을 얻고, f(x)f(x)의 정의로부터 다음을 얻습니다.

n=0(2nn)xn=114x\sum_{n=0}^{\infty} {2n \choose n} x^n = \frac{1}{\sqrt{1-4x}}

그 다음 양변을 적분하고 정리하면 Eq.4\textrm{Eq.4}를 얻습니다. (이것도 직접 해보세요.)

카탈란 넘버의 모습

여기까지 긴 글이었습니다. 결국 카탈란 넘버는 Cn=1n+1(2nn)C_n = \frac{1}{n+1} {2n \choose n}이 된다는 결론까지의 여정이었습니다. 그런데 여기서 카탈란 넘버의 근사값을 구할 수 있습니다.

Cn=1n+1(2n)!(n!)24nnπn=O(4nn3/2)C_n = \frac{1}{n+1} \frac{(2n)!}{(n!)^2} \approx \frac{4^n}{n \sqrt{\pi n}} = O(4^n n^{-3/2})

스털링 근사Stirling’s approximation를 이용하면 이 식을 얻습니다. 이로부터 빅오 표기법big-O notation으로 카탈란 넘버의 어퍼 바운드upper bound까지 얻게 됐습니다.

1,1,2,5,14,42,132,429,1430,4862,16796,58786,1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, \dots

여기서 카탈란 넘버는 네 배에 가까운 비율로 커지는 걸 볼 수 있습니다. (처음 글에서 대략 네 배씩 커진다고 언급했던 적이 있습니다.)

마치며

카탈란 넘버의 또 다른 점화식과 클로즈드 폼을 유도했고, 카탈란 넘버가 커지는 속도 또한 어퍼 바운드로 구해보았습니다.

첫 글에서 살펴봤던 것처럼, 바이너리 트리는 카탈란 넘버만큼 존재합니다. 이로부터 바이너리 트리 또한 지수 함수만큼 매우 가파르게 개수가 늘어남을 알 수 있습니다. 따라서 노드가 조금만 많아져도 일일이 세기에는 사실상 불가능한 문제였습니다.

레퍼런스

  • Catalan Numbers (Richard Stanley, 2015)

  • Catalan Numbers with Applications (Thomas Koshy, 2008)

  • oeis.org/A000108/list: 미리 계산된 카탈란 넘버입니다.