信息的熵
信息的熵
题目描述
给定一个字符串仅由 \(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\) 仅由大小写字母和数字组成