贪心算法-哈弗曼树

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值