体系结构 通过python实现 哈夫曼编码 扩展编码 等长编码
来源:互联网 发布:ai软件描边 编辑:程序博客网 时间:2024/06/05 14:16
#!usr/bin/env python# -*- coding: utf-8 -*-def fun(): Q = x # 通过队列进行处理 while len(Q) > 1: Q.sort(key=lambda xx: xx.prob)# 根据使用频度排序 # for i in Q: # print i.prob l = Q.pop(0) r = Q.pop(0) if l.name is not None: newQ.append(l) if r.name is not None: newQ.append(r) # 左1右0左小右大 l.codeword = '0' r.codeword = '1' fa = hafnode(prob=l.prob+r.prob) fa.l = l fa.r = r l.fa = fa r.fa = fa Q.append(fa) Q[0].fa = None return Q[0]def hufdeal(): root = fun() pro = [] codes = [''] * len(newQ) symbol = [] for i in range(len(newQ)): tmp = newQ[i] while tmp.fa != None: codes[i] = tmp.codeword + codes[i] tmp = tmp.fa newQ[i].codeword = codes[i]class hafnode(): def __init__(self, name=None, prob=None, codeword='', procode=None): self.name = name self.prob = prob self.codeword = codeword self.procode = procode self.fa = None self.l = None self.codeword = None# ----------------------------------哈夫曼编码-----------------------------------------------------class dengchang(): def __init__(self, name=None, prob=None, codeword=''): self.name = name self.prob = prob self.codewode = codeworddef dcdeal(): n = 0 for i in range(1, 10): if 2**i >= len(y): n = i break for i in range(len(y)): y[i].codeword = str(bin(i))[2:].zfill(n) print y[i].codeword# ------------------------------------等长编码-----------------------------------def extend(n): # x = input("请输入需要几种编码长度?") # len = [] # for i in range(0,10): # len[i] = (2**i)-1 print '3-5编码的结果是:\n' z.sort(key=lambda xx: xx.prob, reverse=True) cnt = 0 for i in range(len(z)): if cnt == 7: break if i <= len(z)-2: tmp = z[i].prob/z[i+1].prob if int(tmp*1000000+5) >= int(3.0*1000000): break cnt += 1 cnt+=1 for i in range(cnt): z[i].codeword = str(bin(i))[2:].zfill(3) print z[i].codeword for i in range(cnt, len(z)): z[i].codeword = str(bin(i-cnt))[2:].rjust(3, '0').rjust(5, '1') print z[i].codewordx = []y = []z = []newQ = [] # 保存使用过的节点def main(): n = input("请输入个数:") for i in range(n): rate = input("请输入第%d的频率:" % i) x.append(hafnode(i, rate, '')) y.append(dengchang(i, rate)) z.append(dengchang(i,rate)) hufdeal() print '输出哈夫曼编码:\n' for i in newQ: print i.name, i.codeword print '输出等长编码:\n' dcdeal() extend(n) len1 = 0 len2 = 0 len3 = 0 for i in range(len(z)): len1 += len(newQ[i].codeword) len2 += len(y[i].codeword) len3 += len(z[i].codeword) len1 = float(1.0*len1/n) len2 = float(1.0*len2/n) len3 = float(1.0*len3/n) print "哈夫曼编码平均码长为%.2f,等长编码平均码长为%.2f,扩展编码平均码长为%.2f" % (len1,len2,len3)if __name__ == '__main__': main()
阅读全文
0 0
- 体系结构 通过python实现 哈夫曼编码 扩展编码 等长编码
- python实现哈夫曼编码
- Python语言实现哈夫曼编码
- python 实现base64编码
- 系统编码 python编码
- 【编码】Python编码
- matlab实现DPCM编码和游长编码
- 扩展spring编码过滤器,实现接收不同页面编码
- PYTHON 编码
- python 编码
- python 编码
- python 编码
- python 编码
- Python 编码
- python编码
- python 编码
- Python编码
- python编码
- 数据分析
- SWPU CTF 2017 Web WriteUp
- ros机器人开发概述
- PAT (Basic Level) Practise (中文)1002
- 第十周——项目一(1)(2)
- 体系结构 通过python实现 哈夫曼编码 扩展编码 等长编码
- 计算机常用的存储单位
- 爬虫系列4查看网站所有者
- 水一个博客能不能得积分啊……
- JPA--增加删除
- mac下配置apache虚拟主机
- Air800连接阿里云物联网
- STM32时钟配置
- 类的加载、连接与初始化过程的详细分析(上)