• ベストアンサー

乱数と配列

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

専門家に質問してみよう