- メールで回答があったのでちょっと補足。肝心なのはこれではないのですが....
zoomのチャットにも送りましたが、問題4-6について質問です。(自分は回答が間に合いませんでしたが)
数字が初めから与えられていて、順番通りになる場合は、自分以外のn-1個の中から自分の次の数字を選ぶので
1 / (n-1)^n
ですが、一つのループになる場合は
(n-1)!
通りあるので、
(n-1)! / (n-1)^n
ではないですか?
n=3 を代入すると 1 / 4 になります。
講義のwebページの乱数で品目数を3にして160回試したところ、39回ループになりました。
n=4 を代入すると 2 / 27 になります。
品目数を4にして270回試したところ、19回ループになりました。
正解でしょう。
n = 3,4,5, … とすると、ループになる確率は
nに比例してさがるのではなく、加速度的にさがります。
すこし大きい規模でかんがえれば、
全体が一つのループになる possibility はあっても probability はない、という話です。
横軸に n 縦軸に (n-1)!/(n-1)^n をとったグラフを考えると
急速にゼロに収束するでしょう。
おばた
- ブラウザーで 全体が一つの大きなサイクルを計算してみよう。
- chrome だったら「表示>開発・管理>javaScript コンソール」, safari だったら「開発>javaScript コンソールを開く」などで開発ツールをひらき、javaScript コンソールの「>」のところに次に二行をコピペしてみてください。
var 階乗 = n => n ? n*階乗(n-1) :1 ; // 階乗を計算する組み込み関数はないようなので自前で定義
Array(100).fill().map((_, n) => {n += 3;console.log(階乗(n-1)/(n-1)**n);}); //[3, 4, 5, ...]の配列をつくって 確率を計算してみよう
- ブラウザーに表示したければ、以下を「>」の後にコピペすればOKです。
var listOfProb =""; // 確率の値をしまう文字列を初期化
var 階乗 = n => n ? n*階乗(n-1) :1 ; // 階乗を計算する組み込み関数はないようなので自前で定義
Array(100).fill().map((_, n) => {n += 3; listOfProb += "<li>"+階乗(n-1)/(n-1)**n +"</li>" ;});
listOfProb = "<ol start=3>" + listOfProb + "</ol>"; // order list のタグで囲って
var expr = document.getElementById("expr"); // 空の element #expr を探して
expr.innerHTML = listOfProb; // 中身を置きかえる