资源简介
1、对文本信源,寻求最佳压缩方案,现完整的无失真压缩的编译码算法,完成对文本文件的压缩及解压。
2、构建性能分析模块,实现对信源熵的统计、压缩后的传输率(bits/symbol),以及恢复文本的完整情况进行分析。
代码片段和文件信息
import operator
import six
import sys
import time
import numpy as np
import math
class HuffNode(object):
# 定义一个霍夫曼虚类,里面包含两个虚方法
# 1.获取节点的权重函数
# 2.获取此节点是否是叶节点的函数
def get_weight(self):
raise NotImplementedError(
“The Abstract Node Class doesn‘t define ‘get_wieght‘“)
def isleaf(self):
raise NotImplementedError(
“The Abstract Node Class doesn‘t define ‘isleaf‘“)
class LeafNode():
# 定义叶节点类
def __init__(self value=0 freq=0):
# value:表示存储的字符
# freq:表示存储的字符出现的频率
super(LeafNode self).__init__()
# 节点的值
self.value = value
self.weight = freq
def isleaf(self):
# 基类的方法,返回True,代表是叶节点
return True
def get_weight(self):
# 基类的方法,返回对象属性weight,表示对象的权重
return self.weight
def get_value(self):
# 获取叶子节点的字符的值
return self.value
class IntlNode(HuffNode):
# 中间节点类
def __init__(self left_child=None right_child=None):
# left_child:左节点
# right_child:右节点
# weight:权重
super(IntlNode self).__init__()
# 节点的值
self.weight = left_child.get_weight() + right_child.get_weight()
# 节点的左右子节点
self.left_child = left_child
self.right_child = right_child
def isleaf(self):
# 基类的方法,返回False,表示是中间节点
return False
def get_weight(self):
# 基类的方法,返回对象属性weight,表示对象的权重
return self.weight
def get_left(self):
# 获取左子节点
return self.left_child
def get_right(self):
# 获取右子节点
return self.right_child
class HuffTree(object):
# Huffman树
def __init__(self flag value=0 freq=0 left_tree=None right_tree=None):
super(HuffTree self).__init__()
if flag == 0:
self.root = LeafNode(value freq)
else:
self.root = IntlNode(left_tree.get_root() right_tree.get_root())
def get_root(self):
# 获取Huffman的根节点
return self.root
def get_weight(self):
# 获取HUffman树的根节点的权重
return self.root.get_weight()
def traverse_huffman_tree(self root code char_freq):
# 利用递归的方法遍历Huffman树,并且以此方式得到每个字符对应的huffman树
# 并将其保存在字典 char_freq 中
value = []
if root.isleaf():
char_freq[root.get_value()] = code
# try:
# print(“it = “ + str(root.get_value()) + “ and freq = “ + \
# str(root.get_weight()) + “ code “ + str(code))
# except:
# pass
# print(root.get_value())
return (root.get_value() root.get_weight() code)
# return None
else:
if self.traverse_huffman_tree(root.get_left() code+‘0‘ char_freq) != None:
value.extend(self.traverse_huffman_tree(root.get_left() code+‘0‘ char_freq))
# print(self.traverse_huffman_tree(root.get_left() code+‘0‘ char_freq))
if self.traverse_huffman_tree(root.get_right() code+‘0‘ char_freq) != None:
value.extend(self.traverse_huffman_tree(root.get_right() code+‘1‘ char_freq))
return value
def buildHuff
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-02-05 21:27 Huffman\
文件 48990 2018-01-03 11:42 Huffman\0001.jpg
文件 50151 2018-01-03 11:42 Huffman\001.txt
文件 48990 2017-11-21 20:50 Huffman\1.jpg
文件 6595 2018-01-02 21:58 Huffman\1.txt
文件 4411 2018-01-03 10:21 Huffman\2.txt
文件 3748 2018-01-02 21:58 Huffman\compress1.txt
文件 4182 2018-01-03 10:21 Huffman\compress2.txt
文件 6599 2017-12-13 16:31 Huffman\test1.txt
文件 4411 2017-12-13 16:31 Huffman\test2.txt
文件 12905 2018-01-03 10:20 Huffman\zhang_huffman.py
文件 1707 2017-12-24 16:08 Huffman\zlib.py
- 上一篇:chan算法详细代码
- 下一篇:SAP性能测试报告及分析---Part1
相关资源
- 卸载北信源,亲测有效。
- VC++ RS232 RS485串口通信源代码_
- 与移动短信网关连接并发送短信源码
- 微信端学校管理小程序源码.rar
- 微信 家常菜谱小程序源码.rar
- 文本对比器 找出两个文本文件不同的
- STM32基于ENC28J60的TCP通信源码
- stm32f407 GPRS通信源码
- ios仿微信源码
- 微信源代码
- lora 节点 通信源码 实测没问题 SX12
- 文本文件字符串的检索和计数KMP算法
- QtModbus通信源码可供初学者参考
- 编写程序,该程序实现打开一个文本
- 微信古诗大全小程序.rar
- STM32F407ZGT6串口通信源码
- wince TCP/IP 通信源码
- 信源编码数据压缩课程全部问题及解
- STM32F103+Modbus通信源码
- 马尔可夫过程在信源编码
- 微信在线购买电影票小程序.rar
- 文本文件txt文件内容比较器
- 文本文件 txt 按指定行数拆分成多个独
- 130个微信小程序源码
- 40个微信H5游戏源码
- 微信商城源代码 带支付功能,微信平
- 盲信源分离可变步长自然梯度算法
- 论文研究-盖氏圆准则信源数估计算法
- ZigBee通信源码
- 独立等概信源通过AWGN信道,求输出的
评论
共有 条评论