饭前开胃小菜免费品尝:
1.哈夫曼树是不唯一的,但是WPL是唯一的。
2.list.sort( key=None, reverse=False)
key可以接受一个函数,例如我们根据字符串长度来排序:
a = [[1,2,3,4,5,6],[2,3,4],[5,6,7,8]]
#代入x变量,实际根据len(x)比较进行升序排列
a.sort(key=lambda x:len(x))
print(a)
上主菜了,大鱼大肉尽情享受:
1.哈夫曼树
#哈夫曼树
class HuffmanNode():
def __init__(self,data):
self.data = data
self.lchild = None
self.rchild = None
self.parent = None
def create_huffmanTree(huffnode):
#将huffnode列表中的内容复制给nodelist,防止huffnode列表本身被改动
nodelist = huffnode[:]
while len(nodelist)>1:
#sort可以对nodelist遍历按照关键字item.data升序排列
nodelist.sort(key=lambda item: item.data)
left = nodelist.pop(0)
right = nodelist.pop(0)
father = HuffmanNode(left.data+right.data)
left.parent = father
right.parent = father
father.lchild = left
father.rchild =right
nodelist.append(father)
#最终返回根节点
return nodelist[0]
#前序遍历
def pre_tree(T):
if T==None:
return
print(T.data)
pre_tree(T.lchild)
pre_tree(T.rchild)
if __name__ == "__main__":
huffnode = []
while True:
a = int(input("请输入一个整数:若输入为-1将停止输入"))
if a==-1:
break
#huffnode列表中存放多个结点(HuffmanNode类实例化对象,即地址)
huffnode.append(HuffmanNode(a))
tree = create_huffmanTree(huffnode)
pre_tree(tree)
输出:
2.哈夫曼编码
#哈夫曼树
class HuffmanNode():
def __init__(self,data):
self.data = data
self.lchild = None
self.rchild = None
self.parent = None
def create_huffmanTree(huffnode):
#将huffnode列表中的内容复制给nodelist,防止huffnode列表本身被改动
nodelist = huffnode[:]
while len(nodelist)>1:
#sort可以对nodelist遍历按照关键字item.data升序排列
nodelist.sort(key=lambda item: item.data)
left = nodelist.pop(0)
right = nodelist.pop(0)
father = HuffmanNode(left.data+right.data)
left.parent = father
right.parent = father
father.lchild = left
father.rchild =right
nodelist.append(father)
return nodelist[0]
#哈夫曼编码
def huffmanEncoding(huffnode,root):
#构建多个列表用于保存其编码值
huff = ['']*len(huffnode)
for i in range(len(huffnode)):
node = huffnode[i]
while node != root:
if node.parent.lchild == node:
huff[i] = '0'+huff[i]
else:
huff[i] = '1'+huff[i]
node = node.parent
return huff
#前序遍历
def pre_tree(T):
if T==None:
return
print(T.data)
pre_tree(T.lchild)
pre_tree(T.rchild)
if __name__ == "__main__":
huffnode = []
char_frequency = [('T',7),(':',5),('A',2),('C',4)]
for i,j in char_frequency:
huffnode.append(HuffmanNode(j))
tree = create_huffmanTree(huffnode)
pre_tree(tree)
huffman_encoding = huffmanEncoding(huffnode,tree)
print(huffman_encoding)
输出: