資源簡介
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
評論
共有 條評論