組み合わせに関するアルゴリズムの問題
1752 ワード
組み合わせに関するアルゴリズムの問題
一、テーマの内容
余計なことを言わないで、先に問題を出します.
一つあります× mのグリッド、左下の角はAで、右上の角はBで、毎回1歩しか歩くことができないことを規定して、しかも方向は上あるいは右に向かうことしかできなくて、AからBまで全部で何種類の走法があることを求めますか?(たとえば、日の字の格子は2つです.× 1のグリッドは3種類の走法があります.そしてJavascriptでプログラムアルゴリズムを書きます.
まず、どうするかを考えてから、私の方法を見てもいいです.
二、解決方法
この問題は長い間考えました.ずっと回り道をしています.抽象的な数学の方法を使えば、この問題を簡単に解決できます.
右に移動して1つの数字を記録し、上に移動して抽象的に1つの数字0を記録します.これらの数字は順番に並べられます.
ここを見て、頭のいい友達はこの問題をどう解決するかを考えました.
この問題はn個の0とm個の1の異なる配列の総数に抽象化できる.例えば2× 2のグリッドは2つの0と2つの1のすべての異なる配列の数、つまり1100、1010、1001、0110、0101、0011です.
さらに、問題を(m+n)個の0から無作為にm個の0を抜き取って、それを1の異なった方法の数に変えてもいいです.問題がよく知っていると思いますか?間違いないです.高校のランキングです.まず公式を見せます.
三、Javascriptコードの説明
以上の結果をJSで説明しました.
四、並べ合わせ
簡単に並べと組み合わせを説明します.
配置
まず栗(以下のn、mは正の整数)を挙げて、n個の数字の入ったボールを含む袋から順にn個の小さいボールを抜き取って、しかも抜き取った後に袋に入れません.初めて引き出す時、n種類の可能性があります.二回目はn-1種類の可能性があります.これを類推して、n個の小さいボールを全部吸い終えたのは全部違っています.並んだ数はnです.
条件が変わらないなら、抽出したボールの個数だけm(m<=n)個に変えたら、結果は次のようになります.
同じn個のマークの違う数字の小さいボールを一つの袋に入れても、m個を抽出しますが、この場合は抽出の順番は計算されません.つまり並んだ結果をn!/(n-m)m個の小球をランダムに並べた総合法、つまりm!結果は:
以上の知識を使って、次の式をまとめられます.
一、テーマの内容
余計なことを言わないで、先に問題を出します.
一つあります× mのグリッド、左下の角はAで、右上の角はBで、毎回1歩しか歩くことができないことを規定して、しかも方向は上あるいは右に向かうことしかできなくて、AからBまで全部で何種類の走法があることを求めますか?(たとえば、日の字の格子は2つです.× 1のグリッドは3種類の走法があります.そしてJavascriptでプログラムアルゴリズムを書きます.
まず、どうするかを考えてから、私の方法を見てもいいです.
二、解決方法
この問題は長い間考えました.ずっと回り道をしています.抽象的な数学の方法を使えば、この問題を簡単に解決できます.
右に移動して1つの数字を記録し、上に移動して抽象的に1つの数字0を記録します.これらの数字は順番に並べられます.
ここを見て、頭のいい友達はこの問題をどう解決するかを考えました.
この問題はn個の0とm個の1の異なる配列の総数に抽象化できる.例えば2× 2のグリッドは2つの0と2つの1のすべての異なる配列の数、つまり1100、1010、1001、0110、0101、0011です.
さらに、問題を(m+n)個の0から無作為にm個の0を抜き取って、それを1の異なった方法の数に変えてもいいです.問題がよく知っていると思いますか?間違いないです.高校のランキングです.まず公式を見せます.
C(m, n + m) = (n + m)!/(m! * n!)
まず復習したいです.組み合わせの知識を持つ学生は次のセクションを参照してください.三、Javascriptコードの説明
以上の結果をJSで説明しました.
function getMethods(n, m) {
//
function factorial(x) {
if (x === 0) {
return 1
} else {
return factorial(x -1) * x
}
}
return factorial(m + n)/(factorial(m) * factorial(n))
}
もし子供に良いアルゴリズムがあれば、メッセージ交換ができます.四、並べ合わせ
簡単に並べと組み合わせを説明します.
配置
まず栗(以下のn、mは正の整数)を挙げて、n個の数字の入ったボールを含む袋から順にn個の小さいボールを抜き取って、しかも抜き取った後に袋に入れません.初めて引き出す時、n種類の可能性があります.二回目はn-1種類の可能性があります.これを類推して、n個の小さいボールを全部吸い終えたのは全部違っています.並んだ数はnです.
条件が変わらないなら、抽出したボールの個数だけm(m<=n)個に変えたら、結果は次のようになります.
n × (n - 1) × (n - 2) × ... × (n - m + 1)
:
A(m, n) = n! / (n - m)!
組み合わせ同じn個のマークの違う数字の小さいボールを一つの袋に入れても、m個を抽出しますが、この場合は抽出の順番は計算されません.つまり並んだ結果をn!/(n-m)m個の小球をランダムに並べた総合法、つまりm!結果は:
C(m, n) = A(m, n) / m! = n! / ( (n - m)! × m! )
どうやって前の公式を出しますか?以上の知識を使って、次の式をまとめられます.
C(m, n + m) = A(m, n + m) / m!
= (n + m)! / ( n! × m! )