完美字母串 python_在python中使用完美压缩存储一个英国英语字母所需的平均位数...

我有一个作业,写在:

如果完美,存储一个英国英语字母的平均位数是多少

是否使用压缩?

因为实验的熵可以解释为存储结果所需的最小位数。我试着做了一个程序,计算所有字母的熵,然后把它们加在一起,得到所有字母的熵。在

这给了我4.17位,但是根据this link

有了完美的压缩算法,每个字符只需要2位!在

那么我该如何实现这个完美的压缩算法呢?在import math

letters=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

sum =0

def find_perc(s):

perc=[0.082,0.015,0.028,0.043,0.127,0.022,0.02,0.061,0.07,0.002,0.008,0.04,0.024,0.067,0.075,0.019,0.001,0.060,0.063,0.091,0.028,0.01,0.023,0.001,0.02,0.001]

letter=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

pos = 0

temp = s.upper()

if temp in letter:

for x in xrange(1,len(letter)):

if temp==letter[x]:

pos = x

return perc[pos]

def calc_ent(s):

P=find_perc(s)

sum=0

#Calculates the Entropy of the current letter

temp = P *(math.log(1/P)/math.log(2))

#Does the same thing just for binary entropy (i think)

#temp = (-P*(math.log(P)/math.log(2)))-((1-P)*(math.log(1-P)/math.log(2)))

sum=temp

return sum

for x in xrange(0,25):

sum=sum+calc_ent(letters[x])

print "The min bit is : %f"%sum

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值