[Algo]組合せの数(nCm)の算出 [Programming Algorithm]
[はじめに]
・n個の中からm個を選ぶ組合せの数(nCm)を算出するプログラムです。
例:a、b、cの3個の中から2個を選ぶ組合せは、
ab、ac、bcの3通りであり、その数を数学的表記で『3C2』と表現します。
.NETのクラスライブラリには算出するメソッドがないようなので作ってみました。
・nCmを算出する公式はいくつかありますが、
代表的な公式と各々の特徴について、以下にまとめます。
・参考文献
『Javaによるはじめてのアルゴリズム入門』
以下に、算出方法に対するプログラム例を示します。
(1)階乗による算出
公式:nCm=n!/{m!×(n-m)!}
(2)漸化式による算出
一般的に、漸化式の計算は再帰処理で実装できます。
公式:
(i)m=0の場合
nCm=1
(ii)m>0の場合
nCm=nCm-1×(n-m+1)/m
(3)Π(パイ)による算出
「(2)漸化式による算出」の公式は、
総乗(掛け算を集約したもの)と解釈できるので、
以下の公式でも表現できます。
公式:nCm=Π{(n-k+1)/k} (※1≦k≦M)
・n個の中からm個を選ぶ組合せの数(nCm)を算出するプログラムです。
例:a、b、cの3個の中から2個を選ぶ組合せは、
ab、ac、bcの3通りであり、その数を数学的表記で『3C2』と表現します。
.NETのクラスライブラリには算出するメソッドがないようなので作ってみました。
・nCmを算出する公式はいくつかありますが、
代表的な公式と各々の特徴について、以下にまとめます。
・参考文献
『Javaによるはじめてのアルゴリズム入門』
以下に、算出方法に対するプログラム例を示します。
(1)階乗による算出
公式:nCm=n!/{m!×(n-m)!}
| |
[C#][階乗による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
(2)漸化式による算出
一般的に、漸化式の計算は再帰処理で実装できます。
公式:
(i)m=0の場合
nCm=1
(ii)m>0の場合
nCm=nCm-1×(n-m+1)/m
| |
[C#][漸化式による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
(3)Π(パイ)による算出
「(2)漸化式による算出」の公式は、
総乗(掛け算を集約したもの)と解釈できるので、
以下の公式でも表現できます。
公式:nCm=Π{(n-k+1)/k} (※1≦k≦M)
| |
[C#][Π(パイ)による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
コメント 0