哈夫曼树
权值可以看做出现的频率。
利用堆实现。
思路就是:把所给的权值建立一个最小堆,然后创建一个新的结点,再从最小堆删除并获得最小的两个节点分别作为新结点的两个儿子结点,然后给新节点计算新的权重,再把新节点插入最小堆中,之后重新循环比较,循环结束之后,返回指向最小堆的指针。
度为1就是只有一个儿子的结点。
通过计算:总的节点等于n0+n1+n2,n1=0,总结点数等于2n0-1,然后n0=n。
哈弗曼编码
也就是这里a的编码1,是s的10前面的1,是s的前缀,这种不行。
其实就是求取使用这种方式编码的最小代价,其实也就是求WPL,最短路径,也就是哈夫曼树。最小两个合并,放入再合并。