91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 1.63KB
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發布日期: 2024-05-11
  • 語言: Python
  • 標簽: python??實現??py??編碼??

資源簡介

【運行截圖】

【核心代碼】


from math import *
class Shannon:
    code_dict={}
    code_length_list=[]
    CumulativeProbabilityList=[]
    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])  # 直接百度找來的字典跟據值進行排序
        # 返回一個列表 列表元素是一個元組 元組有兩個東西組成,分別是字符和概率
        self.x_plist= self.x_plist[::-1]
        return self.x_plist
    def ShannonCoding(self):  # 香農編碼
        self.code_length_list = []  # 存放各個碼的碼長
        for i in self.x_plist:  # 生成碼長列表
            self.code_length_list.append(int(1 - (log(i[1], 2))))
        self.CumulativeProbabilityList = []  # 存放累加概率
        # 第一位直接存0
        self.CumulativeProbabilityList.append(0)
        for i in range(1, len(self.x_plist)):
            sum = 0
            for j in range(0, i):
                sum = self.x_plist[j][1]
            self.CumulativeProbabilityList.append(sum)
        self.code_dict = {}  # 碼字列表
        for i in range(0, len(self.CumulativeProbabilityList)):
            self.code_dict[self.x_plist[i][0]] = self.float2bin(self.CumulativeProbabilityList[i], self.code_length_list[i])

#計算平均碼長
        avg = 0
        for i in range(0, len(self.code_length_list)):
            avg = self.code_length_list[i] * self.x_plist[i][1]
        self.AvgCodeLength=avg
        #計算編碼效率
        Hx = 0
        for i in range(0,len(self.code_length_list)):
            Hx =-(self.x_plist[i][1]*log(self.x_plist[i][1],2))
        self.CodingEfficiency=Hx/self.AvgCodeLength
        return self.code_dict


    # 計算小數二進制
    def  float2bin(self,float, len=10):
        res = ''
        for i in range(0, len):
            float = float * 2
            if float >= 1:
                res = '1'
                float -= 1
            else:
                res = '0'
        return res


資源截圖

代碼片段和文件信息

import?math

p?=?[0.4?0.3?0.2?0.1]????????#?信源符號概率遞減排列
p_next?=?[0?0.4?0.7?0.9]?????#?概率累加和
k?=?[]??????????#?對應碼長
length_k?=?0????#?平均碼長
H?=?0???????????#?信源熵

def?code_length():
????for?i?in?range(len(p)):
????????k.append(int(math.log(p[i]?2)?*?(-1)?+?0.99))
????print(‘碼長:{}‘.format(k))

def?average_length():
????global??length_k
????for?i?in?range(len(p)):
????????length_k?+=?k[i]?*?p[i]
????#?print(round(length_k?1))
????print(“平均碼長為:{:.3}(bit/sign)“.format(length_k))


#?將十進制小數轉為二進制小數
def?int_to_bin(px):
????b?=?[]
????while?True:
????????px?*=?2
????????b.append(1?if?px>=1?else?0)
????????px?-=?int(px)
????????if?px?==?0:
????????????for?i?in?range(len(p)):
????????????????if?len(b)?!=?k[i]:

評論

共有 條評論