01串的熵(蓝桥杯)

文章目录

  • 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出现的占比。

比如,对于 S=100 来说,信息熵 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,所以上式中的求和是对i=0和i=1的情况。

题目给出了一个具体的例子,对于字符串S=100,其信息熵计算如下:
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))

由于字符串S=100中,0出现了两次,1出现了一次,所以p(0)=2/3,p(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的次数为x,1的次数为23333333-x。

暴力枚举

这段代码是用C++编写的,目的是计算在一个给定长度和信息熵的01串中0出现的次数。下面我会逐行进行注释:

#include<bits/stdc++.h>  // 引入几乎所有的C++标准库
using namespace std;  // 使用标准命名空间int main()  // 程序的主函数
{int n=23333333;  // 01串的长度double m=11625907.5798;  // 给定的信息熵// 从0试探到n,找出0的出现次数for(int ling=0; ling<=n; ling++)  {int yi=n-ling;  // 1出现的次数为总长度减去0出现的次数double p_ling=1.0*ling/n;  // 计算0出现的概率double p_yi=1.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 h=h_ling+h_yi;  // 计算总熵// 检查当前总熵h是否接近给定的信息熵m,1e-4为容差值if(fabs(h-m)<1e-4){cout<<ling;  // 如果是,输出0出现的次数break;  // 找到答案后结束循环}}return 0;  // 程序正常结束
}

这个程序会枚举0出现的次数从0到n(串的总长度),对于每一个可能的出现次数,计算出相应的信息熵,然后与给定的信息熵m进行比较。如果计算出的信息熵与给定的信息熵在一定的误差范围内(小于 ( 1 × 1 0 − 4 ) (1 \times 10^{-4}) (1×104)),程序就会输出当前枚举的0的出现次数,并结束循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…

STM32 H7系列学习笔记

必备的API知识 第 1 步&#xff1a;系统上电复位&#xff0c;进入启动文件 startup_stm32h743xx.s&#xff0c;在这个文件里面执行复位中断服务程序。 在复位中断服务程序里面执行函数 SystemInit&#xff0c;在system_stm32h7xx.c 里面。*之后是调用编译器封装好的函数&…

Socket 通信机制详解

Socket 是网络编程中一种重要的通信机制&#xff0c;它允许不同的计算机通过网络进行数据交换。 一、 Socket 的概念 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;它提供了在网络上进行通信的接口。 Socket 本质上是一种通信的端点&#…

Vue3 ts环境下的PropType

简介 在Typscript中&#xff0c;我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景&#xff1a; 我们通过request请求从服务端获取了一条数据&#xff0c;数据是个Array的格式&#xff0c;Array中的每个元素又是一个对象&#xff0c;像下…

坚持十天做完Python入门编程100题第三天加班

坚持十天做完Python入门编程100题第三天加班 第24题 扫描文件列表第25题 如何将字典转换成JSON并写入json文件&#xff1f;第26题 JSON转换成字典 第24题 扫描文件列表 如何扫描当前目录下的文件列表&#xff1f;解析&#xff1a;可以使用python内置的glob模块&#xff0c;用法…

Golang | Leetcode Golang题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; func mergeTwoLists(list1, list2 *ListNode) *ListNode {if list1 nil {return list2 // 注&#xff1a;如果都为空则返回空}if list2 nil {return list1}if list1.Val < list2.Val {list1.Next mergeTwoLists(list1.Next, list2)re…

项目管理工具——使用甘特图制定项目计划的详细步骤

甘特图是一种直观的项目管理工具&#xff0c;它有助于我们清晰地展示任务安排、时间管理和项目的进度。以下是使用甘特图制定项目计划的详细步骤&#xff1a; 1、创建项目&#xff1a;首先&#xff0c;在进度猫中创建新的项目&#xff0c;并设置项目的时间、工作日等参数。根据…

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度&#xff0c;构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示&#xff1a; 单体架构 在单体架构中&#xff…

乐得瑞LDR6020 Type-C 一拖二/一拖三快充线方案介绍

随着移动设备的普及和功能的日益增强&#xff0c;电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求&#xff0c;各大厂商纷纷推出了各种快充技术和产品。在这个背景下&#xff0c;乐得瑞公司推出了一款名为LDR6020的一分二PD快充线方案&#xff0c;该方案采用…

算法练习第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 买卖股票的最佳时机 class Solution {// public int maxProfit(int[] prices) {// int result 0;// for(int i 0;i<prices.length;i){// for(int j i1;j<prices.length;j){// result …

[蓝桥杯 2023 省 B] 冶炼金属(c++)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

Unity 九宫格

1. 把图片拖拽进资源文件夹 2.选中图片&#xff0c;然后设置图片 3.设置九宫格 4.使用图片&#xff0c;在界面上创建2个相同的Image,然后使用图片&#xff0c;修改Image Type 为Sliced

Nodejs 第六十二章(短链接)

短链接介绍 短链接是一种缩短长网址的方法&#xff0c;将原始的长网址转换为更短的形式。它通常由一系列的字母、数字和特殊字符组成&#xff0c;比起原始的长网址&#xff0c;短链接更加简洁、易于记忆和分享。 短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些…

C++之g++编译

/usr/bin/g -I/usr/include/eigen3 -fdiagnostics-coloralways -g /home/local/EUROPRO/guoliang.wang/Desktop/eigen_learn.cpp -o /home/local/EUROPRO/guoliang.wang/Desktop/eigen_learn下面是解读&#xff1a; 这个 g 编译命令是用于编译你的 eigen_learn.cpp 程序&#…

配置及第三方授权申请教程

项目需要配置的地方不多&#xff0c;主要就两个地方需要注意&#xff1a;邮箱授权和第三方授权需要提前申请 1.基本设置 1.1 打开application.yml&#xff0c;修改数据库ip等基本信息 这些基本的配置就不多说了&#xff0c;基本就是改下服务器ip和账号密码什么的 1.2 获取QQ…

RX4901CE自带SPI接口,适合用在需高精度和快速响应的设备

传统的模拟温度补偿晶振采用热敏电阻等元器件来检测环境温度&#xff0c;将温度信息做相应变换后控制晶振的输出频率用来实现稳定输出&#xff0c;但是这种做法频率补偿精度有限。伴随目前电路计算频率越来越高&#xff0c;更多工业级的高时间精度和快速时间响应的应用出现&…

MLeaksFinder报错

1.报错&#xff1a;FBClassStrongLayout.mm 文件&#xff1a;layoutCache[currentClass] ivars; 解决&#xff1a;替换为layoutCache[(id)currentClass] ivars; 2.编译正常但运行时出现crash indirect_symbol_bindings[i] cur->rebinding FBRetainCycleDetector iOS15 …

Mybatis分页查询用PageHelper插件

首先看接口文档需求 看响应数据样例&#xff0c;那么咱们先自定义一个bean来满足这个需求&#xff0c;这里定义PageBean实体类 package com.itheima.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;//分…

Ubuntu-22.04安装Virtualbox并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Virtualbox是什么&#xff1f;二、安装Virtualbox1.关闭Secure Boot2.安装 三、安装Windows101.新装虚拟机基本配置2.新装虚拟机核心配置 总结 前言 虚拟机…

Harmony鸿蒙南向驱动开发-UART

UART指异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;是通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输。 两个UART设备的连接示意图如下&#xff0c;UART与其他模块一般用2线&a…