組合せ論の教科書を開くと,いきなり順列P(n,r)や組合せ(rn)の公式が出てきます.しかし,そもそも「数える」とはどういうことかを考えたことがあるでしょうか? この記事では,数え上げの本質が集合の濃度であることを出発点に,加法原理・乗法原理・順列・組合せを統一的に理解します.
1 「数える」=集合の濃度
有限集合 S の数え上げとは,∣S∣(S の濃度,つまり要素数)を求めることです.
一見当たり前ですが,これは非常に重要な視点です.「サイコロの目の出方は何通り?」という問いは,「出目の集合{1,2,3,4,5,6}の濃度はいくつ?」と言い換えることで数学の対象になります.
2 加法原理 ― 直和は足し算
有限集合 A と B が互いに素(A∩B=∅)のとき, ∣A∪B∣=∣A∣+∣B∣
が成り立ちます.より一般に,A1,A2,…,Ak が互いに素ならば, ∣A1∪A2∪⋯∪Ak∣=∣A1∣+∣A2∣+⋯+∣Ak∣
です.
52枚のトランプからハートまたはスペードのカードを引く場合の数は,ハートの集合(13枚)とスペードの集合(13枚)は互いに素なので,13+13=26 通りです.
3 乗法原理 ― 直積は掛け算
有限集合 A と B の直積A×B={(a,b)∣a∈A,b∈B} について, ∣A×B∣=∣A∣⋅∣B∣
が成り立ちます.
英大文字26文字と数字10文字を使って,「英字2文字 + 数字3桁」のパスワードを作る方法は,262×103=676,000 通りです.各文字の選択が独立なので乗法原理が適用できます.
4 順列と組合せ ― 直積の変形
n 個の異なるものから r 個を選んで並べる方法の数を P(n,r) と書き, P(n,r)=n(n−1)(n−2)⋯(n−r+1)=(n−r)!n!
です.
これは乗法原理の自然な応用です.1番目の選択肢はn通り,2番目は(1番目と異なるので)n−1通り,…,r番目はn−r+1通りです.
n 個の異なるものから r 個を選ぶ(順序を区別しない)方法の数を (rn) と書き, (rn)=r!P(n,r)=r!(n−r)!n!
です.
5 全射の数え上げ ― 包除原理への伏線
n 元集合 X から m 元集合 Y(n≥m)への全射(surjection)の個数を S(n,m) とおくと, S(n,m)=k=0∑m(−1)k(km)(m−k)n
です.
AtCoder の数え上げ問題を解くとき,最初にやるべきことは何を数えているのかを集合として定式化することです.「N 個のボールを M 個の箱にすべての箱が非空になるように入れる方法」は,集合 {1,…,N} から集合 {1,…,M} への全射の数そのものです.
6 まとめ
数え上げとは集合の濃度を求めることです
加法原理は直和(互いに素な和集合)に対応します
乗法原理は直積(独立な選択の組合せ)に対応します
順列・組合せは乗法原理の自然な帰結です
全射の数え上げは包除原理への入口です
次の記事では,組合せ(rn)(二項係数)がなぜこんなにも多くの場面に現れるのか,その秘密に迫ります.