プロが教えるわが家の防犯対策術!

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

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/11 18:54

0~99の乱数を1000個発生させて個数を調べる



確率を計算する

エントロピーを計算する

表示する

という内容のソースコードになると思うのですが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/09 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!