JavaScript乱数の組み合わせ問題事例分析


本論文の実例はJavaScriptの乱数の組み合わせ問題を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
乱数の組み合わせの問題は面接の時にいつも試験したので、例えば前から聞かれました。「1-5を生成できる乱数関数があります。どうやって1-7に拡大しますか?」
この問題を解決する前に、まず他の比較的簡単な問題を見てみましょう。「1-7を生成できる関数があります。どうやって1-5に縮小しますか?」以下は1つの生成1-7の関数のrandowm 7です。

function random7() {
  return Math.floor(Math.random() * 7 + 1);
}

これをどのように1-5の関数に変換しますか?これは簡単です。1サイクルの中でランド7を呼び出すと、その値が5以下になるまでループを終了し、乱数を返します。次のようにすればいいです。

function random5() {
  var r = random7();
  while(r > 5) {
    r = random7();
  }
  return r;
}

上の考えは、生成された乱数が5より大きい場合、5以下になるまでランドム7を呼び出し続けるということです。じゃ、本題に戻ります。1-5はどうやって1-7になるかを見てみましょう。以下はランダムに1-5を生成する関数です。

function random5() {
  return Math.floor(Math.random() * 5 + 1);
}

私たちは今の目的は1-7に拡大することです。一つのランク5()から発生する乱数の範囲は1-5です。二つのランク5()が加算される範囲は2-10です。もう1を引くと1-9になります。したがって、上の考え方によって、ランク7の中で循環します。7以下なら循環を終了して戻ってきます。以下のとおりです

function random7() {
  var r = random5() + random5() - 1;
  while(r > 7) {
    r = random5() + random5() - 1;
  }
  return r;
}

これは確かに1-5の範囲を1-7に拡大することができますが、問題が来ました。ランダム関数というのは、発生する各値の確率は同じです。私達は確率論の組合せの知識を使って、背丈を計算します。1つの組み合わせがあります。つまり、ラドム5()+ラドム5()-1です。の2つのロードム5()はいずれも1であり、生成2は2つの組み合わせがあり、1番目のロードム5()は1番目の2つが2であり、または反対である。明らかにその確率は違います。だからこの方法はだめです。
生成を達成するための各値の確率は等しい。つまり、各値の組み合わせ数が等しい。一つの可能な方法は、各値の組み合わせが一つしかないようにすることである。

function random7() {
  var r = (random5() - 1) * 5 + random5(); 
  while(r > 7) {
    r = (random5() - 1) * 5 + random5(); 
  }
  return r;
}

どうしてこのようにして各値の確率が等しくなりますか?まず、(random 5()-1)*5を見てみます。よく計算されます。飧あられの平均値は0、5、10、15、20です。これを使って、random 5()と加算します。random 5()のオプション値は1、2、3、4、5です。両者を合わせたら、1-25の間の乱数しかありません。その確率は同じです。
ここはどうして5をかけるのですか?他ではないです。これは、5を乗じた後にrandowm 5()と加算し、得られた数が連続しており、等確率であるからです。
上で討論したのはすべて特殊な情況の1-5と1-7の間の転換で、その他の普通の情況について、みんなは自分で試してみることができます。
興味のある友達はオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます。http://tools.jb51.net/code/HtmlJsRun上記コードの運行効果をテストします。
もっと多くのJavaScriptに関する内容に興味がある読者は、当駅のテーマを見ることができます。「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScript配列操作技術のまとめ」、「JavaScript数学演算の使い方のまとめ」、「JavaScriptソートアルゴリズムのまとめ」、「JavaScriptはアルゴリズムと技術の総括を遍歴します。」、「JavaScript検索アルゴリズムのテクニックのまとめ」および「JavaScriptエラーとデバッグテクニックのまとめ
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。