【第14届蓝桥杯C/C++B组省赛】01串的熵

问题描述

算法思想

首先分析题目中给出的公式

S = 100时,其信息熵为

H(S)=−p(0)log2​(p(0)) − p(0)log2​(p(0)) − p(1)log2​(p(1))

继续化简公式得

设0出现的次数为x,1出现的次数为3-x

H(S)=−x * p(0) * log2​(p(0)) − (3-x) * p(1) * log2​(p(1))

现在,我们有一个长度为23333333的01串,其信息熵已知为11625907.5798。题目还告诉我们,0出现的次数比1少。我们的任务是计算出0出现的次数。

为了解决这个问题,我们只需暴力枚举01串,计算出相应的信息熵和已知条件对比,由于0出现的次数比1少,我们只需遍历到数组的一半位置即可

参考代码

cs 复制代码
#include<stdio.h>
#include<math.h>
int main(int argc,char *argv[])
{
	double n = 23333333;
	double zeroSum = 0;
	int zero,one;
	for(zero = 0; zero <= n / 2;++zero)
	{
		one = n - zero;
		zeroSum = -zero * (zero / n) * log2(zero / n) - one * (one / n) * log2(one / n);
		if(zeroSum > 11625907.5 && zeroSum < 11625907.6)
		{
			printf("%d",zero);
			break;
		}
	}
	return 0;
}

答案:

相关推荐
冷雨夜中漫步5 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
HABuo6 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
颜酱6 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919107 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878387 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
2501_944934737 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
DuHz7 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女7 小时前
TRSV优化2
算法
黎雁·泠崖7 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
代码游侠8 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法