class node():
def __init__(self, flag,values=None):
self.flag = flag
self.leftnode = None
self.rightnode = None
self.parent = None
self.values = values
def create_node(info):
return [node(i[0],i[1]) for i in info]
def create_huffman_tree(nodes):
quene = nodes
while len(quene)!=1:
quene.sort(key=lambda item:item.values)
node_left = quene.pop(0)
node_right = quene.pop(0)
node_parent = node("",node_left.values+node_right.values)
node_parent.leftnode = node_left
node_parent.rightnode = node_right
node_left.parent = node_parent
node_right.parent = node_parent
quene.append(node_parent)
return quene[0]
def encode(root,string=""):
if root.leftnode==None and root.rightnode==None:
print("%s的编码为%s"%(root.flag,string))
if root.leftnode !=None:
encode(root.leftnode,string+"0")
if root.rightnode != None:
encode(root.rightnode,string+"1")
if __name__ == '__main__':
letters_flag = [("B",0.1),("E",0.15),("C",0.2),("D",0.2),("A",0.35)]
nodes = create_node(letters_flag)
root = create_huffman_tree(nodes)
encode(root)
<<<
C的编码为00
D的编码为01
B的编码为100
E的编码为101
A的编码为11
贪心算法-哈弗曼树
最新推荐文章于 2023-01-14 11:55:14 发布