noshi91のメモ

データ構造のある風景

カタラン数を鏡像法で理解する

概要

この記事の内容は [1] の解説の一部を抜き出して説明したものです。 カタラン数  C(N) \displaystyle \binom{2N}{N} - \binom{2N}{N - 1} と等しいことを、鏡像法 *1 で説明します。

本文

 C(N) は、グリッド上を右上方向に、 (0, 0) から  (N, N) まで、 x \geq y を満たすように移動する方法の数と一致します。

f:id:noshi91:20210710163922j:plain

 x \geq y の条件を一旦忘れて、 (0, 0) から  (N, N) までの経路の本数を数えることを考えます。 これは以下のような動的計画法で計算できます。

\begin{align} \mathrm{dp}(i, j) = \begin{cases} 1 &\quad ( (i, j) = (0, 0) ) \cr \mathrm{dp}(i - 1, j) + \mathrm{dp}(i, j - 1) &\quad (\mathrm{otherwise}) \end{cases} \end{align}

f:id:noshi91:20210710164327j:plain

 x \geq y を、 x + 1 = y を通らない、と言い換えます。 するとカタラン数は、先ほどの例において  x + 1 = y 上で  \mathrm{dp} = 0 にするような動的計画法で計算できます。

\begin{align} \mathrm{dp}(i, j) = \begin{cases} 1 &\quad ( (i, j) = (0, 0) ) \cr 0 &\quad ( i + 1 = j ) \cr \mathrm{dp}(i - 1, j) + \mathrm{dp}(i, j - 1) &\quad (\mathrm{otherwise}) \end{cases} \end{align}

f:id:noshi91:20210710164812j:plain

この  x + 1 = y 上で  \mathrm{dp} = 0 にする操作を陽に行わずに表現する方法として、 x + 1 = y に対して  (0, 0) と対称な位置に  -1 の重みをもつスタート地点を置くという方法があります。

\begin{align} \mathrm{dp}(i, j) = \begin{cases} 1 &\quad ( (i, j) = (0, 0) ) \cr -1 &\quad ( (i, j) = (-1, 1) ) \cr \mathrm{dp}(i - 1, j) + \mathrm{dp}(i, j - 1) &\quad (\mathrm{otherwise}) \end{cases} \end{align}

f:id:noshi91:20210710170014j:plain

対称性から、対称軸上では  \mathrm{dp} = 0 となることが分かるので、普通の経路数の動的計画法の更新式で、上手くカタラン数が求まっています。 一方で  (0, 0) を始点とする経路の数と  (-1, 1) を始点とする経路の数は独立ですから、単に足し合わせれば

\begin{align} \text{カタラン数} &= \lbrace (0, 0) \text{から} (N, N) \text{への経路の数} \rbrace + (-1) \cdot \lbrace (-1, 1) \text{から} (N, N) \text{への経路の数} \rbrace \cr C(N) &= \binom{2N}{N} - \binom{2N}{N-1} \end{align}

が従います。

参考文献

  • [1]

    ネタバレ注意

    yukicoder 1241 Eternal Tours

*1:鏡像法は物理学の用語のようですが、発想が非常に似ているので、名前を借りています。