kit84 talks

社会人 / AtCoder 緑 / くBC 水

緑コーダーが「数え上げPDF」の行間に挑む(第 1 回)

DEGwer氏による「数え上げPDF」、競プロer の間では知らない者はないほど有名…

しかし、対象読者層が青上位赤下位と非常に高度な内容です。緑コーダーの私にとっては、正直言って行間が多すぎます。

…行間があるなら、埋めればいいじゃない?

ということで、数え上げPDFの中でも特に有名な、 「(p.30) 二項係数のテクニック 14.1 頻出公式集」 に書かれている 6 つの公式 について、解釈と導出を考えてみたいと思います。

とりあえず全体像

まずは数え上げPDFの公式を眺めましょう。

頻出公式?(原文まま)

  • \(\sum_{i=0}^n \binom ni = 2^n\)

  • \(\sum_{i=0}^{\left\lfloor \frac n2 \right\rfloor} \binom n{2i} = 2^{n-1}\)

  • \(\sum_{i=0}^k \binom{n +i}i = \binom{n +i+1}i\)

  • \(\sum_{i=0}^k \sum_{j=0}^l \binom{i+j}i = \binom{k+l+2}{k+1}\)

  • \(\sum_{i=0}^k \binom ni \binom m{k-i} = \binom{n+m}k\)

  • \(\sum_{i=0}^k \binom{n +i}i \binom{m-i}{k-i} = \binom{n+m+1}k\)

前情報として、この中には「誤植があるかもしれない」と言われています。 (※上記は原文ままなので、信用しないように)

正直なところ、上記の式がどういうことを示しているのか、緑コーダーの私には全くイメージが湧きません。

第 1 回では、これらの公式が本当に成り立つのか確認するところから、ゆっくり見ていくことにしましょう。

公式成立の確認

公式 1

公式 1 \[\displaystyle\sum_{i=0}^N \binom Ni = 2^N\]

では 1 つ目から見ていきます。
(数式中の文字は、プログラマが(私が)見やすいように多少改変しています。)

ここで使う図がこちら。

公式1_1

出ました。パスカルの三角形
これは分かりやすくて、この図でいう \(N\) 行目の合計が \(2^N\) になっています。
どの \(N\) をとっても、そうなっていますね。

これを応用すると、\(N\) 行目より上の三角形全体の合計も分かりますね。

公式1_2

そうですね。 \[\sum_{i=0}^N \sum_{j=0}^i \binom ij = 2^{N+1} -1\] で求まります。

公式 2

公式 2 \[\sum_{i=0}^{\left\lfloor N/2 \right\rfloor} \binom N{2i} = 2^{N-1} \qquad (N\ge 1)\]

まだ穏便です。
\(N\) 行目の偶数番目の数を拾ってきて合計すると、 \(2^{N-1}\) となります。

公式2_1

えっ、待って、なんでですか?
こんなバラバラの数を 1 つおきに足したら、1 行分のちょうど半分になるんですか?
この時点で、かなり非直感的な気がします。

あと、奇数番目を足したものも \(2^{N-1}\) で等しくなりますね。

公式2_2

何故そうなるかは全く分かりません… が、そうなっています。
あっ、でも \(N=0\) では成り立たないようです。

証明とかは次回に回すとして、次に進みましょう。

公式 3

公式 3 \[\sum_{i=0}^K \binom{N +i}i = \binom{N+K+1}K\]

一気に雲行きが怪しくなりました。
しかも、オリジナルの数式には誤植がありますね。
(右辺に \(i\) が出てくるのは、明らかに変です。)

公式3_1

\(N\) 行目の左端からスタートして、\((K+1)\) 個だけ斜めに足していく訳ですね。
これは、ホッケースティック恒等式というそうです。

さらに、 \(\binom {A+B}A = \binom {A+B}B\) であることを用いると、次のように変形できます。 \[\sum_{i=0}^K \binom{N +i}N = \binom{N+K+1}{N+1}\]

公式3_2

実用上は、こちらの方が便利そうな雰囲気がありますね。(本当に?)

公式 4

この式、またしても誤植でした!!! (→その 指摘の様子
正しいものは下記となります。

公式 4 \[\sum_ {i=0}^K \sum_{j=0}^L \binom{i+j}i = \binom{K+L+2}{K+1} - 1\]

最後に \(-1\) が必要となります。

公式4

図で見ると、公式 3 との関係が分かりやすいですね。

公式 5

公式 5 \[\sum_{i=0}^K \binom Ni \binom M{K-i} = \binom{N+M}K\]

ここからは積和が絡んできます。
\(N\) 行目と \(M\) 行目の要素を逆順にかけて、その合計をとりましょう。

公式5_1

答えが \((N+M)\) 行目に出てきました。
ここで、ちょっと意地悪して「\(K\) が大きいとき」も見てみます。

公式5_2

成り立ちました。マジかよ… 超強力じゃん…

公式 6

公式 6 \[\begin{split} \sum_{i=0}^K \binom{N +i}i \binom{M-i}{K-i} &= \binom{N+M+1}K \cr &\qquad\qquad (M\ge K) \end{split}\]

今度は斜めバージョンです。

公式6_1

ここで \(M=K\) とすると、公式 3 が出てきます。
また、\(M\lt K\) では図の外にはみ出るので、困ってしまいます。

また、これも線対称で変形できて、

公式6_2

\[\sum_{i=0}^K \binom{N +i}N \binom{M-i}{M-K} = \binom{N+M+1}{N+M-K+1}\] こういう見方もできますね。(右辺は、\(\binom{N+M+1}K\) でいいですよ?)
でもこれ、どういう場面で使うのでしょうか。

結論

数え上げ頻出公式について、ちゃんと成り立つ(?)ことをビジュアルに確認しました。
と同時に、誤植を修正してまとめ直すと次のようになります。

頻出公式(修正版)

  • \(\displaystyle\sum_{i=0}^N \binom Ni = 2^N\)

  • \(\displaystyle\sum_{i=0}^{\left\lfloor N/2 \right\rfloor} \binom N{2i} = 2^{N-1} \quad\) \((N\ge 1)\)

  • \(\displaystyle\sum_{i=0}^K \binom{N +i}i = \binom{N+K+1}K\)

  • \(\displaystyle\sum_ {i=0}^K \sum_{j=0}^L \binom{i+j}i = \binom{K+L+2}{K+1} - 1\)

  • \(\displaystyle\sum_{i=0}^K \binom Ni \binom M{K-i} = \binom{N+M}K\)

  • \(\displaystyle\sum_{i=0}^K \binom{N +i}i \binom{M-i}{K-i} = \binom{N+M+1}K \quad\) \((M\ge K)\)

※特に断りがない場合、変数は非負整数です。

これで、だいぶ読みやすくなりました。

次回以降、いよいよ導出にチャレンジしていきたいと思います。