第十四届蓝桥杯大赛软件赛省赛Python 《01串的熵》

问题描述

问题类型

暴力,枚举

问题分析

由例题知对于一个长度为L的01串,设0出现的次数为x,则1出现的次数为L-x,其信息熵整理后可表示为:

基于此,我们可以给出当长度L = 23333333的01串,其信息熵为11625907.5798时,该字符串中0和1的个数分别为多少。
题目限制0出现的次数比1少,可以通过得出的结果进行判断,且由于信息熵公式具有对称性,我们只需求出得出结果中0次数少的那一个(少于L/2)即可。

代码实现

import math

L = 23333333
Hs = 11625907.5798
for x in range(1, (L + 1) // 2)):
    if round(x * x / L * math.log2(x / L) +#由于题干给出的信息熵其实是保留了小数点后的四位,如果不使用round函数将始终无法匹配到结果
             (L - x) * (L - x) / L * math.log2((L - x) / L), 4) == -Hs:
        print(x)
posted @ 2024-03-23 11:20  Nhwite  阅读(87)  评论(0编辑  收藏  举报