組み合わせの数の計算

  1. 組み合わせ数の性質


    1. 性質1

      Cr = C n-r

      Cr
      = n!/ ((n-r) ! ・ r !) ですから、r と n-r を交換しても同じです。

    2. 性質2:二項定理


       (a+b)n = Σ(r = 0..n) Cr an-r ・ br 

      (a+b) を n 回かけるとき、a を n-r 回選び、b を r 回選ぶと an-r ・ br の項となります。この項が現れる組み合わせの数は、Cr です。


       (a + b)2 = 2C0 a2b0 + 2C1 a1b1 + 2C2 a0b2

       (a + b)3 = 3C0 a3b0 + 3C1 a1b2 + 3C2 a2b1 + 3C3 a0b3

      二項定理で、a,b を1とすると、

       2n = Σ(r = 0..n) Cr

      となります。したがって、nを固定して Cr をすべてのr(0,1,..n)について加えると、2n になります。

    3. 性質3


      n-1rn-1r-1  (ただし n > 1)

      右辺を展開して計算すれば簡単に証明できます。また次のように解釈できます。
      「 n 個を n-1 個と 1個のグループに分割します。n から r を取り出す方法は n-1のグループ から r を取り出す場合と、1個 のグループから1つとり、残りの r-1 個を n-1 のグループから取り出す方法の和になる」
       この式より、下のように、n-1r より、 が計算できます。この計算法をパスカルの三角形と呼びます。



       (図は http://www004.upp.so-net.ne.jp/s_honma/pascal/pascal.htm より引用)
      パスカルの三角形で、各行の値をすべて加えてください。2n になります。

  2. 順列、組み合わせの計算(Java)


    1. 組み合わせの数(Java Applet)

       n と k を設定し、「階乗」ボタンを押すと、階乗の値が表示されます。「組み合わせ」ボタンを押すと組み合わせの数 PkCk が表示されます。



    2. 階乗の計算

       階乗の計算は、関数 fact で行います。これは、1から 引数 num までの値を変数 rs に掛け算します。rs の初期値は1にします。 for (int i=1;i<=num;i++) { } の意味は、変数 i の値を1からnumまで、i を1づつ増しながら { } の中を実行します。記述の形式は言語Cと全く同じです。
       return rs は rs の値を関数の値として、戻る(関数の実行を終了する)ことでしたね。
        int fact(int num){
          int rs=1;
          for (int i=1;i<=num;i++){
            rs = rs*i;
          }
          return rs;
        }

    3. 順列の数の計算

       順列ボタンを押したとき、組み合わせの数を計算する関数 permbutton_actionPerformed() は次のようになります。先頭で、入力枠から k と r の値を変数 nnum と knum に読み出します。nField.getText() は nField の数値を文字として読み込む関数です。また、 Integer.parseInt( 文字 ) は文字を整数に変換する関数です。次に、fact() を利用して順列の値を計算し、rField に表示します。Integer.toString(数値 ) は数値を文字列に変換する関数、rField.setText(文字) は、文字を rField に表示する関数です。

        void permbutton_actionPerformed(ActionEvent e) {
              int rs=1;
              int nnum=Integer.parseInt(nField.getText());
              int knum=Integer.parseInt(kField.getText());
      
              rField.setText(Integer.toString(fact(nnum)/fact(nnum-knum)));
        }

  3. Excellで計算する


    1. パスカルの三角形の利用

      パスカルの三角形の利用すると、Excellを利用して加算のみで組み合わせ数の表を作成できます。

    2. 行列に1

      A3からA12まで、縦に1を入れます(コピー)。
      A3からJ3まで横に1を入れます。
      この1は、パスカルの三角形の左右両端の1になります。

    3. 計算式

      B4に 式 =B3+A4 を入れます。
       この式が n-1rn-1r-1 に相当します。

      B4をクリックし、右下のドラッグマークをクリックし、B12までドラッグして式をコピーます。
      B3..B12の領域を選択状態にしたまま、B12 の右下のドラッグマークを J12 までドラッグします。
       これで、2次元のコピーができます。

    4. 結果

      右上から左下の斜め方向に、パスカルの三角形の値が表示されます。各数字は左の数字と上の数字の和になっています。
      コピーをするときの、座標の自動増加機能が有効に働いています。

    5. Excelのウインドウ




    6. 組み合わせ関数を利用する


      1. COMBIN関数
         Excelには、組み合わせ数を計算する関数 COMBIN が内蔵されています。

      2. 関数表を作成

        C15から横に、0,1,2..10 を入力します。
        B16から縦に、0,1,..10 を入力します。
         0,1を入力し、二つを選択してからドラッグコピーします。

        C16 に 式 =COMBIN($B16,C$15) を入力します。
         $B16がn 、C$15 が k に相当します。$はコピー時に自動変更されないためのおまじない(絶対参照)です。
         これを、下方向にコピーし、コピーした列全体を横方向にコピーします。
        横方向に nCk (k=0..10) が現れます。

      3. Excelウインドウ



    7. 組み合わせ数をグラフ表示します

      C26..M26 を選択します。これは、10Ck (k=0..10) の値です。
       挿入>グラフを選択します。
       縦棒グラフを選択し、次へをクリック

       系列をクリックし、「項目軸に使用」の入力欄のマークをクリックし、B16からB26をドラッグして選択します。これで、水平軸の値を設定できます。

       「完了」をクリックします。

      このままでも良いのですが、お好みでグラフの幅(間隔)を調整します。
       棒グラフの棒の部分をクリックし、棒を選択します。ここで、右クリックしてメニューを出します。「データ要素の書式設定」を選択し、「オプション」から棒の間隔を0にします。



      こんなグラフになります。

  4. アンケート・演習


    1. 演習/演習

      パスカルの三角形を利用して、5C2 を求めてください。

      (a+b)5 の展開式を求めてください。

      EXcellで 10C4 を求めてください。
    2. アンケート

      パスカルの三角形による組み合わせ数の計算法は理解できました?
       1.よくわかった  2.だいたいわかった 3.理解できていない

      Excell演習
      パスカルの三角形の計算はできました?
       1.できた  2.なんとなくできた 3.できない