組み合わせを計算するJavaScriptを作ったケロ [ひとこと言わねば]
そして、Bloggerの方にアップしておいたケロ。
上記urlにアクセスし、nとrに値を入れて、計算ボタンをクリックすると、を計算してくれる。ただし、エラーチェック機能は含んでいないので、n、rに変な値を入れないように。
// 再帰処理で計算
int Combi(int n, int r) {
if(r==0 || r==n) {
return 1;
} else {
return Combi(n-1,r)+Combi(n-1,r-1);
}
}
main() {
int n,r;
for (n=0; n<=9; n++) {
for (r=0; r <=n; r++) {
printf("%dC%d=%d ", n,r,Combi(n,r));
}
printf("\n");
}
}
他に手段がない場合や再帰処理を用いないとプログラムが冗漫になる場合などはしょうがないけれど、
プログラムが自分自身を呼ぶ、このような再帰プログラムは作らないほうがいい。
ddt³さんが解説してくださるに違いない!!
問題 次の関係
を利用し、n!を求めるプログラムを作りなさい。
できたら、再帰処理を利用したプログラムを作れ。
(ヒント)
とおくと、
したがって、
f(n) {
if(n==0) {
return 1;
else {
return n*f(n-1);
}
}
お前等に質問 確率・統計の検定の問題 (2月24日) [お前らに質問]
お前らに確率・統計の検定の問題を一つ出すにゃ。解けるかな。
問題 コインを10回投げたところ、表が8回出た。
このことから、このコインは表が裏よりも出やすいと言えるか。危険率5%で判定せよ。
表が9回出たら、どうか。
計算しなくても、問題の問い方を見ただけで、
表が8回のときは「表が裏より出やすい」と結論できないこと、そして、表が9回ならば「表が裏より出やすい」と言えることがわかるが・・・。
なんだかわからない、このグラフをサービスしてやろう。
ここまでサービスしたんだから、この問題を解けよな!!
ところで、この問題を解くためには、組み合わせ、すなわち、
の計算が必要になる。
表計算ソフトには、組み合わせの関数COMBINというものがあり、これを使えば、COMBIN(n,r)と計算することができるが、C言語などのプログラム言語の関数には、組み合わせを計算する組み込み関数は存在しない。
で、組み合わせ(1)の値を求めるプログラムを自作しないといけないのだが、たとえば、
などと計算すると、20!というのはトンデモなくデカイ数字(約2.432902008×10¹⁸)なので、オーバーフローしてしまう。
ということで、プログラムを作れる環境を持っている奴は、組み合わせを求める関数を自作し、の値を求めよ。
そして、この記事のコメント欄にその自作プログラムを書き、送信するように。
ただし、使用していい言語は、(十進)BASIC、Fortran、C/C++、JAVA、JavaScript、情報技術者の試験で使われるアセンブラCASLなどとする。COBOLは駄目だケロよ。
某計算サイトによると、
らしいね。
ネムネコ、コイン投げをコンピュータでシミュレートする [ひとこと言わねば]
昨日、コンピュータの乱数を使って、二項分布を求めたのだけれど、試行回数をトンデモなく大きくとらないと数学的確率の値に近づかないことに気がついて、コンピュータを使って、コインを10回投げて何回表が出るかシミュレーションしてみた。
コインを10回投げて表が出る回数をrとすると、その確率は
になる。
これは数学的な確率だにゃ。
コンピュータを使って、コインを10回投げて表が何回出るかという試行をn=10、100、1000、10000、100000回行うと、これは次のような分布になる。
このグラフを見ると、コインを10回投げることを100回、1000回くらい行っても、(1)式で与えられる二項分布B(10,1/2)は得られないことがわかる。
1000回位じゃ、誤差が大きすぎて、信用できない。
コインを10回投げることを1万回、できたら10万回回くらいやらないと、使い物にならない。
そして、この結果に正直強い衝撃を受けている。
だって、1000回も繰り返せば、かなり良く近似できると思っていたんだもん。
それと同時に、「数学的確率っていったい何なんだ」という、確率に対する不信感を募らせた。
では、ここで問題を一つ。
問題1 1枚のコインを1000回投げたところ、表が493回出た。信頼度95%で、このコインの表が出る確率を推定せよ。
【解答例】
表が出る確率をpとすると、
(解答終)
この実験からわかるのは、
「信頼度95%で、このコインの表の出る確率は0.462以上かつ0.524以下である」ということ。
これ以上のことは言えない。
不思議なもので、コンピュータの乱数を使って、コインを10000回投げると、表が4913回という結果が出てしまった。コインを10000回投げて測定された表のが出る確率が0.4913なのに対し、コインを1000回投げたときに測定された表が出る確率0.493より悪化してしまったケロ。
ではあるが、95%の信頼度でこのコインの表が出る確率を推定すると、
となるので、「このコインの表の出る確率は、信頼度95%で、0.4913以上で0.5011以下である」となり、10000回投げた確率の推定値のほうが信頼できる。