組合せとは
組合せ(くみあわせ)とは、いくつかある要素の中からいくつかの要素を選ぶとき、選ぶ順番や並び方は気にせず、「どのメンバーが選ばれたか」という集まりのパターンだけを数える方法です。数学ではアルファベットの「C(Combination)」を使って表現します。先ほどの「順列」は並び順を気にするのに対し、組合せでは順番を無視するため、数え上げるパターンの数は少なくなります。プログラミングにおいて、複数のアイテムの中から重複なくグループを作る処理や、ネットワーク通信で総当たりで接続テストを行う際に、無駄な重複テストを省くためのパターン数を計算するときなどに広く応用されています。
具体例
「A」「B」「C」の3人の中から、掃除当番を2人選ぶ方法が何通りあるかを考えてみましょう。
選ばれたメンバーのペアだけを考えるため、順番は無視します。
1. 「A と B」
2. 「A と C」
3. 「B と C」
計算式: (3 × 2) ÷ (2 × 1) = 3通り(3C2)
この場合、「AとB」が選ばれるのと「BとA」が選ばれるのは当番メンバーとして全く同じであるため、1つのパターンとしてカウントし、答えは「3通り」となります。
もう少し詳しく
組合せは、順列と並んでデータ処理やアルゴリズム設計における基礎的な数学概念です。n個の中からr個を選ぶ組合せの数は「n C r」と表記され、計算式としては「(n P r) ÷ (r!)」、つまり「順列の総数を、選んだr個の並び替えの総数で割る」ことで求められます。これは「順番の違いによる重複分を打ち消す」という数学的な操作を意味しています。ITの現場では、テストケースの設計やネットワークのトポロジー(接続形態)を考える際によく使われます。例えば、10台のパソコンがすべて互いに直接LANケーブルで繋がっているネットワーク(フルメッシュ型)を構築する場合、必要なケーブルの総数は「10台から2台を選ぶ組合せ」の計算になります。10 C 2 = (10 × 9) ÷ (2 × 1) = 45本と即座に算出でき、無駄のない資材調達やコスト計算に役立てることができます。
また、ソフトウェアのテスト工程において、膨大な設定パラメータの全パターンをテストすることが時間的に不可能な場合、「ペアワイズ法(オールペア法)」と呼ばれるテスト手法が用いられます。これは「すべての2つの変数の組合せ」が最低1回は現れるようにテストケースを絞り込む手法であり、ここでも組合せの数学的な考え方がバグの検出効率を高めるために活用されています。このように、限られたリソース(時間やコスト)の中で、漏れなく重複なく効率的な処理を行うために、組合せの理論は不可欠です。
試験でのポイント
資格試験においては、確率の問題を解くための途中計算として組合せ(C)を使用するパターンが非常に多く見られます。「袋の中から赤玉と白玉を同時に取り出す」「不良品が混ざっているロットから製品を抜き取り検査する」といったシチュエーションが定番です。これらの問題では、「同時に取り出す」「順番を問わないグループを作る」といったキーワードがあれば、直ちに「組合せ」の計算式を使うと判断しなければなりません。
計算のテクニックとして、組合せ特ুকেの性質である「n C r = n C (n-r)」を覚えておくと、試験時間を大幅に短縮できます。例えば、「100個のデータから98個を選ぶ組合せ(100 C 98)」を計算する場合、まともに計算すると分子も分母も98個の数字を掛け合わせる膨大な式になりますが、この性質を使えば「100個の中から選ばない2個を選ぶ組合せ(100 C 2)」と全く同じ結果になるため、(100 × 99) ÷ (2 × 1) = 4950通りと、暗算レベルで瞬時に答えを出すことができます。試験ではあえてこのような大きな数字を出して、性質を理解しているかを試す問題が出題されるため、このショートカット計算術は必ず身につけておきましょう。
関連する用語
順列、確率、テストケース設計