• ベストアンサー

乱数と配列

0から99までの整数の乱数を1000個発生させ,各整数の確率(出現確率=出現回数/1000)を計算し、エントロピーを求め表示するプログラムを作成したいのですが、どういったソースコードになるのか教えていただけませんか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

とりあえず書いてみました。 U+3000→U+0009 or U+0020をやらないとコンパイルを通らないと思いますが。 #include <algorithm> #include <cmath> #include <cstdlib> #include <ctime> #include <functional> #include <iostream> #include <numeric> const int MAX_VALUE = 99; const int TRY_COUNT = 1000; struct calc_entropy : std::unary_function<int, double> {  double operator() (int count) const  {   double p = (double)count / TRY_COUNT;   return -p * std::log(p) / std::log(2.0);  } }; int main (void) {  std::srand(static_cast<unsigned int>(std::time(0)));  int count[MAX_VALUE + 1] = { 0 };  for (int i = 0; i < TRY_COUNT; ++i) {   ++count[std::rand() % (MAX_VALUE + 1)];  }  double entropies[MAX_VALUE + 1];  std::transform(count + 0, count + MAX_VALUE, entropies + 0, calc_entropy());  std::cout << "Entropy : " << std::accumulate(entropies + 0, entropies + MAX_VALUE, 0.0) << std::endl;  return 0; }

mugimnr17
質問者

お礼

どうもありがとうございます。 参考にさせていただきます。

その他の回答 (1)

回答No.1

0~99の乱数を1000個発生させて個数を調べる ↓ 確率を計算する ↓ エントロピーを計算する ↓ 表示する という内容のソースコードになると思うのですが。

mugimnr17
質問者

お礼

すみませんが、具体的に教えていただきたいのですが

関連するQ&A

  • エクセルの乱数関数で乱数を作成する。

    エクセルの乱数関数で乱数を作成する。 たとえば1~100までの乱数を作成する時、 1,2,3,・・・・,99,100の整数を複数発生させずに1個ずつ発生させることができますか? VBAとかプログラムを作らないとダメでしょうか?

  • 配列の乱数と平均値、個数表示

    0から9までの整数乱数を100個発生させ、100個の乱数の平均値も合わせて出力し、0から9それぞれの個数を数えるための変数に必ず配列を用いるプログラムを下記に作成したんですけども、出現個数カウント用の変数を10個用意していけないという条件で出現個数カウント用の配列を用意し、 結果が、 7 7 1 7 3 9 1 2 5 0 0 3 6 8 4 9 1 4 2 4 8 2 4 2 6 0 9 3 5 8 6 6 6 2 0 9 5 2 6 9 5 0 5 3 9 2 6 7 0 6 1 4 1 1 1 9 7 0 5 0 6 9 7 4 9 9 7 5 3 6 1 9 6 6 6 7 1 2 6 1 4 9 1 3 1 3 7 0 0 8 1 9 3 2 9 4 4 5 4 0 0 *********** 11 1 ************* 13 2 ********* 9 3 ******** 8 4 ********** 10 5 ******** 8 6 ************** 14 7 ********* 9 8 **** 4 9 ************** 14 平均 4.4 に表示されるプログラムがわかりません、Java初心者なので作ったプログラムのどこを直せばいいのか教えてください。 class Kadai06_5 { public static void main(String args[]) { int n=10; int a[] = new int[n]; int i; int sum=0; double avg=0; for(i=0; i<100; i++){ System.out.print((int)(Math.random()*10)); sum +=(int)(Math.random()*10); } for(i=0; i<n; i++){ System.out.println(); } avg=(double)sum/100; System.out.println("平均"+avg); } }

    • ベストアンサー
    • Java
  • 規則に従った乱数

    一様乱数を発生させるプログラムはネット上でも入手できます。ある種の確率密度分布に従った乱数を発生させるにはどうしたらいいでしょうか。 例えば0から1の乱数ですが、平均が0.5で分散が0.2のガウス分布に従った乱数を発生させるとしたら0.5に近いところの値が多く出て、0.9のあたりはあまり出ないということになります。そういう乱数です。 そういうものを乱数というのかどうかわかりませんが。 しかし、物理現象は何らかの分布に従う乱数のようなものと考えることができるのではないでしょうか。 よろしくお願いします。

  • 乱数の発生確率(c++)

    0,1の2値の乱数を発生させるとき、1の発生確率を例えば20%にするにはどのようにすればよいのでしょうか。 発生乱数を除算して余りを求めて・・・・の方法など試したのですが、うまいこといきませんでした。(プログラムが動かないのではなく結果が) 私の確率の認識が間違っているのかもしれませんが、この場合、1000個発生させた場合、300近く1が出れば良いということですよね。

  • C++ による指数乱数発生プログラムを書きたいのですが。。。

    平均値(期待値)が、例えば30の指数乱数発生プログラムを、C++を使って書いてみたいのですが、どうやったらいいのかよく分かりません。いろいろなサイトを見て回ったのですが、これといったものが見付かりませんでした。 どなたか、大変申し訳ありませんが、ソースコードをご存知の方がいましたら教えていただけないでしょうか?

  • 乱数について

    トト何かでもそうだと思うけど、乱数使っていると思うんですよ どんな仕組みで乱数と言うのを発生させる事が出来るのですか それは確率とどんな関係が有りますか、 分かる方、教えて下さい

  • 乱数とは?

    乱数について、いくつか疑問に思っていることがあります。 乱数の定義は? 辞書には、 0から9までの一〇種類の数字が、それぞれ同じ確率で現れるように並べられた数字の列。 と、書いてあります。 と言うことは、各数字の現れる確率は10%です。 大量にDATAを取れば限りなく10%に近づくと言うことです。 そこで、 DATAが少ないと乱数にも偏った値が出て各数字10%にはなりません。 と言うことは、 各数字の発生確率が偏っている段階では、 次に現れる数字の予測がある程度可能だと思っていいのでしょうか? 確率の低い数字が出る確率が高い? そうなると、 予測が可能だと乱数とは言えないのではないでしょうか? 結果として確率が均等になればいいのであって、予測が出来る出来ないは関係ない?

  • 配列と乱数を使ったプログラム

    配列と乱数を使ったプログラムについて 今年からプログラミングについて勉強する事になったのですが、 配列と乱数を上手く使うことができません。やりたいと思っていることが おみくじのプログラムで 大吉 中吉 小吉 という3つの配列からウィンドウ上にランダムで 一つ表示するというプログラムです。 【おみくじの結果は *** です。】 ←***の部分がランダムに配列から表示される結果です。(分かりづらなかったら、ごめんなさい) 病欠で2週ほど授業に出席する事が出来なかったので、配列と乱数についてよく分かりません。 PENというソフトで学習しているので、出来るならPENにそって教えてもらえると、嬉しいです。 宜しくお願いしますm(_ _)m

  • 乱数について

    こんばんは。 何度も申し訳ありませんが、今回は乱数について教えてください。 LinuxでCを勉強しているんですが、 randで乱数を発生させることはできたんですが、 そのプログラムを何度実行させても 出てきた乱数は同じ値なんです。 プログラム内で例えば10こ乱数を発生させたとすると 違うものが出ます。 しかし、もう一度そのプログラムをはしらせると 前回と全く同じ並びで同じ数が出るのはどうしてでしょうか? 言ってる意味わかっていただけましたでしょうか? 宜しくお願いします。

  • 乱数

    ・1~50の乱数を昇順で6個表示。しかし各数字には表示させる確率を設定してあります。 単純に乱数を昇順で6個表示させることは出来ますが、確率を元に表示させる方法がわかりません。 ご教授おねがいします。 環境 php + Mysql

    • ベストアンサー
    • PHP

専門家に質問してみよう