哈夫曼树
来源:互联网 发布:淘宝兰芝官方旗舰店 编辑:程序博客网 时间:2024/06/08 01:04
哈夫曼的构造算法:每次把权值最小的两颗二叉树合并
typedef strcut TreeNode *HuffmanTree;struct TreeNode { int Weight; HuffmanTree Left, Right;}HuffmanTree Huffman( MinHeap H ){ int i; HuffmanTree T; BuildMinHeap( H );//将H->Elements[]按权值调整为最小堆 for ( i = 1; i < H->Size; i++ ){ T = malloc( sizeof(struct TreeNode ) ); T->Left = DeleteMin( H ); //从最小堆中删除一个结点,作为新T的左子结点 T->Right = DeleteMin( H ); //从最小堆中删除一个结点,作为新T的右子结点 T->Wight = T->Left->Weight + T->Right->Weight; //计算新权值 Insert( H, T );//将新T插入最小堆 } T = DeleteMin( H ); retrun T;}
这里的算法,在如何挑选两个最小元素时,用到了昨天所写的堆(最优队列)。每一次循环时,都从最小堆中挑选两个元素出来,既T->Left = DeleteMin( H ), T->Right = DeleteMin( H )。然后将其权值合并
T->Wight = T->Left->Weight + T->Right->Weight,接着插入到堆中去。
如果要从零开始构建哈夫曼树,流程应该是:
- 按照元素的频率高低,建立一个最小堆:BuildMinHeap( H )
- 建完堆之后,按照哈夫曼树的构造方法,从最小堆中选出两个最小的元素。
- Insert( H, T).
0 0
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- java旅行--linux站最后一天
- 打字
- oracle XA session priviledge
- sqoop的使用
- HDU 1863畅通工程【Prim】
- 哈夫曼树
- hdu 1849 Rabbit and Grass Nim博弈
- Volley网络框架使用过程中的一些报错解决办法。
- GZIP压缩原理分析(09)——第四章 基于gzip的HTTP压缩详解(四03) 处理细节(关于流压缩的问题)以及本章总结
- HDU 1874畅通工程续【SPFA】
- (第15讲)哈希表的开放地址法中的再哈希法
- 使用注解方式进行spring和hibernate整合
- java-基础-String、StringBuilder以及StringBuffer剖析
- kafka笔记