信息论与编码 python实现 费诺编码 代码详解

本文介绍了如何使用Python实现费诺编码,首先对输入消息进行排序并计算概率,接着详细阐述了从大到小排序和递归生成码表的过程。虽然尝试用循环实现但最终选择了递归方法,期待能有大佬分享循环实现的代码。同时,文章还涉及编码效率和平均码长的计算。
摘要由CSDN通过智能技术生成

先给出整体代码 要copy的朋友可以拿去
下面给出

from math import *
class FanoCod: #费诺编码
    code_dict = {
   }
    x_p = {
   }
    x_plist = []
    AvgCodeLength = 0
    CodingEfficiency = 0

    def sort(self,data:str):
        # 统计信源中各个概率
        self.x_p = {
   }  # 一个信源和概率对应的字典
        x_list = []
        for i in data:
            if i not in x_list:
                x_list.append(i)
        length = len(data)
        for i in x_list:
            self.x_p[i] = data.count(i) / length
        # 对概率进行降序排序 并返回一个列表
        self.x_plist = sorted(self.x_p.items(), key=lambda kv: (kv[1], kv[0]))  # 直接百度找来的字典跟据值进行排序
        self.x_plist=self.x_plist[::-1]
        # 更新码字表的字典值
        for i in self.x_plist:
            self.code_dict[i[0]]=''
        # 返回一个列表 列表元素是一个元组 元组有两个东西组成,分别是字符和概率

        return self.x_plist

    def GeneratedCodeWord(self,list1):
        if len(list1)!=1:
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值