• 大小: 167KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-10-30
  • 语言: 其他
  • 标签: 文本文件  信源熵  

资源简介

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

评论

共有 条评论