信息的熵

信息的熵

信息的熵

题目描述

给定一个字符串仅由 \(ASCII\) 可见字符组成的字符串 \(S\)

将 \(S\) 各字符转为 \(8\) 位二进制形式拼接得到一个新的字符串 \(S’\)

定义字符串 \(S\) 的信息熵为 \(H(S)\)

\[H(S)=-\sum_{\mathclap{i=1}}^{|S'|} (P_{S'_i} \space× log_2\space P_{S'_i})\]

其中 \(P_{S'_i}\) 为 \(S'_i\) 在 \(S'\) 中的占比

请你计算 \(H(S)\)

\(C++\)可使用 double log2(double) 进行计算

输入格式

输入字符串 \(S\)

输出格式

输出一个实数表示 \(H(S)\)

输出保留\(5\)位小数
为避免精度误差请使用 printf("%.5lf" , ans); 的方式进行输出

样例 #1

样例输入 #1

a

样例输出 #1

3.71089

样例 #2

样例输入 #2

abcdefghijklmnopqrstuvwxyz

样例输出 #2

103.28410

提示

对于 \(50\%\)的数据\(1≤|S|≤5000\)

对于 \(100\%\)的数据\(1≤|S|≤10^5\)

保证 \(S\) 仅由大小写字母和数字组成

信息

ID
1005
难度
2
分类
数学字符串 点击显示
标签
递交数
2
已通过
1
通过率
50%
被复制
1
上传者

相关

在下列训练计划中:

初试

在下列比赛中:

ACM测试赛