- ベストアンサー
乱数と配列
0から99までの整数の乱数を1000個発生させ,各整数の確率(出現確率=出現回数/1000)を計算し、エントロピーを求め表示するプログラムを作成したいのですが、どういったソースコードになるのか教えていただけませんか。
- みんなの回答 (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; }
その他の回答 (1)
- Yune-Kichi
- ベストアンサー率74% (465/626)
0~99の乱数を1000個発生させて個数を調べる ↓ 確率を計算する ↓ エントロピーを計算する ↓ 表示する という内容のソースコードになると思うのですが。
お礼
すみませんが、具体的に教えていただきたいのですが
お礼
どうもありがとうございます。 参考にさせていただきます。