对于一个长度为 n 的 01 串 S = x1x2x3...xn.
香农信息熵的定义为:
。
其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。
比如,对于S = 100 来说,信息熵 H(S ) = - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) = 1.3083。
对于一个长度为23333333 的 01 串,如果其信息熵为 11625907.5798,且 0 出现次数比 1 少,那么这个01 串中 0 出现了多少次?
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。
代码如下:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;int main() {int all = 23333333;for (int i = 0; i < 23333333; i ++) {double p1 = 1.0 * i / all;double p2 = 1.0 * (1 - p1);double ans = -p1 * log2(p1) * i - p2 * log2(p2) * (all - i);if (ans >= 11625907.5798 && ans <= 11625907.5799) {cout << i << endl;break;}}cout << 11027421;//0出现的个数 return 0;
}