淘宝网站建设的详细策划,lumen wordpress 下载,做印章网站,西安网站建设那家伙文章目录 01串的熵问题描述答案#xff1a;11027421题意解释暴力枚举 01串的熵
问题描述
对于一个长度为n的01串 S x 1 x 2 x 3 x_{1}x_{2}x_{3} x1x2x3… x n x_{n} xn#xff0c;香农信息熵的定义为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1… 文章目录 01串的熵问题描述答案11027421题意解释暴力枚举 01串的熵
问题描述
对于一个长度为n的01串 S x 1 x 2 x 3 x_{1}x_{2}x_{3} x1x2x3… x n x_{n} xn香农信息熵的定义为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1}^{n}p(x_{i})log_{2}(p(x_{i})) −∑1np(xi)log2(p(xi))其中 p(0), p(1) 表示在这个01串中0和1出现的占比。
比如对于 S100 来说信息熵 H(S) − 1 3 l o g 2 ( 1 3 ) − 2 3 l o g 2 ( 2 3 ) − 2 3 l o g 2 ( 2 3 ) -\frac{1}{3}log_{2}(\frac{1}{3})-\frac{2}{3}log_{2}(\frac{2}{3})-\frac{2}{3}log_{2}(\frac{2}{3}) −31log2(31)−32log2(32)−32log2(32) 1.3083
对于一个长度为23333333的01串如果其信息熵为11625907.5798且0出现次数比1少那么这个01串中0出现了多少次
答案提交 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填与这个整数填与多余的内容将无法得分。
答案11027421
题意解释
这道题目是关于香农信息熵的计算问题。香农信息熵是信息论中用来量化信息预期值的一个概念通常用于衡量信息的不确定性。在这个问题中我们需要根据给定的信息熵值和一些条件来计算一个长度为23333333的01串中0出现的次数。
题目描述了一个长度为n的二进制字符串S由0和1组成。香农信息熵H(S)的计算公式为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1}^{n}p(x_{i})log_{2}(p(x_{i})) −∑1np(xi)log2(p(xi))
其中 p(xi) 表示在字符串中字符i出现的相对频率。对于二进制字符串i只能是0或1所以上式中的求和是对i0和i1的情况。
题目给出了一个具体的例子对于字符串S100其信息熵计算如下 H ( S ) − p ( 0 ) log 2 ( p ( 0 ) ) − p ( 0 ) log 2 ( p ( 0 ) ) − p ( 1 ) log 2 ( p ( 1 ) ) H(S) -p(0) \log_2(p(0)) -p(0) \log_2(p(0))- p(1) \log_2(p(1)) H(S)−p(0)log2(p(0))−p(0)log2(p(0))−p(1)log2(p(1))
由于字符串S100中0出现了两次1出现了一次所以p(0)2/3p(1)1/3代入公式得到 H ( S ) − 2 3 log 2 ( 2 3 ) − 2 3 log 2 ( 2 3 ) − 1 3 log 2 ( 1 3 ) H(S) -\frac{2}{3} \log_2\left(\frac{2}{3}\right) -\frac{2}{3} \log_2\left(\frac{2}{3}\right)- \frac{1}{3} \log_2\left(\frac{1}{3}\right) H(S)−32log2(32)−32log2(32)−31log2(31)
现在我们有一个长度为23333333的01串其信息熵已知为11625907.5798。题目还告诉我们这个字符串中0出现的次数比1少。我们的任务是计算出0出现的次数。
为了解决这个问题我们需要设置两个变量分别表示0和1出现的次数然后根据信息熵的定义和给定的条件建立方程求解这个方程即可得到0出现的次数。需要注意的是由于0出现的次数比1少我们可以设0的次数为x1的次数为23333333-x。
暴力枚举
这段代码是用C编写的目的是计算在一个给定长度和信息熵的01串中0出现的次数。下面我会逐行进行注释
#includebits/stdc.h // 引入几乎所有的C标准库
using namespace std; // 使用标准命名空间int main() // 程序的主函数
{int n23333333; // 01串的长度double m11625907.5798; // 给定的信息熵// 从0试探到n找出0的出现次数for(int ling0; lingn; ling) {int yin-ling; // 1出现的次数为总长度减去0出现的次数double p_ling1.0*ling/n; // 计算0出现的概率double p_yi1.0*yi/n; // 计算1出现的概率// 计算以0出现的概率为基础的熵部分double h_ling - ling * p_ling *log2(p_ling);// 计算以1出现的概率为基础的熵部分double h_yi - yi * p_yi * log2(p_yi);double hh_lingh_yi; // 计算总熵// 检查当前总熵h是否接近给定的信息熵m1e-4为容差值if(fabs(h-m)1e-4){coutling; // 如果是输出0出现的次数break; // 找到答案后结束循环}}return 0; // 程序正常结束
}这个程序会枚举0出现的次数从0到n串的总长度对于每一个可能的出现次数计算出相应的信息熵然后与给定的信息熵m进行比较。如果计算出的信息熵与给定的信息熵在一定的误差范围内小于 ( 1 × 1 0 − 4 ) (1 \times 10^{-4}) (1×10−4)程序就会输出当前枚举的0的出现次数并结束循环。