JavaScript乱数の組み合わせ問題事例分析
2390 ワード
本論文の実例はJavaScriptの乱数の組み合わせ問題を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
乱数の組み合わせの問題は面接の時にいつも試験したので、例えば前から聞かれました.「1-5を生成できる乱数関数があります.どうやって1-7に拡大しますか?」
この問題を解決する前に、まず他の比較的簡単な問題を見てみましょう.「1-7を生成できる関数があります.どうやって1-5に縮小しますか?」
生成を達成するための各値の確率は等しい.つまり、各値の組み合わせ数が等しい.一つの可能な方法は、各値の組み合わせが一つしかないようにすることである.
ここはどうして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プログラムの設計に役に立ちます.
乱数の組み合わせの問題は面接の時にいつも試験したので、例えば前から聞かれました.「1-5を生成できる乱数関数があります.どうやって1-7に拡大しますか?」
この問題を解決する前に、まず他の比較的簡単な問題を見てみましょう.「1-7を生成できる関数があります.どうやって1-5に縮小しますか?」
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;
}
どうしてこのようにして各値の確率が等しくなりますか?まず、この表式で生成されたオプション値は0、5、10、15、20で、それを用いてラド5()に加算します.ラド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プログラムの設計に役に立ちます.