问题描述:
枚举
理清题目的逻辑,将公式描述出来就行了
由于Xᵢ只会有0,1两种情况,所以有
H(S) = -0的个数 * (0的个数/字符串长度) * log2(0的个数/字符串长度)
-1的个数 * (1的个数/字符串长度) * log2(1的个数/字符串长度)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
double n = 23333333, h = 11625907.5798;
// 0的数量比1少,所以只需要遍历到n/2
for (int i = 0; i <= n / 2; i++)
{
double s = 0, p = i / n;
s -= i * p * log2(p) + (n - i) * (1 - p) * log2(1 - p);
// double不能直接用等于
if (fabs(s - h) < 1e-4)
{
cout << i;
break;
}
}
return 0;
}