问题描述
对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次?
#include<iostream>
#include<cmath>
using namespace std;
int n = 23333333;
int main()
{
//枚举 0 出现的次数
//因为 0的个数比 1的个数少,所以一定不会超过 n的一半
for(int i=1; i<=n/2; ++i)
{
int j = n-i; //1 出现的次数
double a = 1.0*i/n;
double b = 1.0*j/n;
double ans = i*-1.0 * a*log2(a) + j*-1.0 * b*log2(b); //i, j为次数
//不能直接判断相等,控制精度是 4 位
if(ans>11625907.5 && ans<11625907.6)
{
cout<<i;
return 0;
}
}
return 0;
}