【第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;
}

答案:

相关推荐
全栈小精灵1 分钟前
Winform入门
开发语言·机器学习·c#
心静财富之门1 分钟前
退出 for 循环,break和continue 语句
开发语言·python
txinyu的博客3 分钟前
map和unordered_map的性能对比
开发语言·数据结构·c++·算法·哈希算法·散列表
搞笑症患者18 分钟前
压缩感知(Compressed Sensing, CS)
算法·最小二乘法·压缩感知·正交匹配追踪omp·迭代阈值it算法
Mr -老鬼19 分钟前
Rust适合干什么?为什么需要Rust?
开发语言·后端·rust
im_AMBER22 分钟前
Leetcode 101 对链表进行插入排序
数据结构·笔记·学习·算法·leetcode·排序算法
予枫的编程笔记22 分钟前
【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路
java·开发语言·数据结构·人工智能·链表·哈希算法
ohoy28 分钟前
RedisTemplate 使用之Set
java·开发语言·redis
mjhcsp28 分钟前
C++ 后缀数组(SA):原理、实现与应用全解析
java·开发语言·c++·后缀数组sa
hui函数29 分钟前
如何解决 pip install 编译报错 ‘cl.exe’ not found(缺少 VS C++ 工具集)问题
开发语言·c++·pip