HuffmanTree的构建
2017-06-04 11:31
381 查看
HuffmanTree的构建
HuffmanTree定义:带权路径长度最小的二叉树WPL(Weighted Path Length )
即权值大的外结点离根节点最近的扩充二叉树
算法描述:
(1)根据给定的n个权值{w1,w2,w3,…,wn},构造具有n棵扩充二叉树的森林F={T1,T2,T3,…,Tn},其中每棵扩充二叉树Ti只有一个带权值wi的根结点,其左、右子树均为空。
(2)重复以下步骤,直到F中仅剩下一棵树为止:
①在F中选取两棵根结点权值最小的扩充二叉树,作为左、右子树构造一棵新的二叉树。置新的二叉树的根结点的权值为左、右子树根结点上的权值之和。
②在F中删去这两棵二叉树。
③把新的二叉树加入到F当中。
实现代码如下所示
HuffmanTree.h
ifndef HAFFMANTREE_H
define HAFFMANTREE_H
include “MinHeap.h”
include
include
using namespace std;//Huffman树结点的类定义
template
endif
程序中引入一个最小堆,利用它组织森林并从中选择根结点权值最小和次小的两棵树MinHeap.h
ifndef MINHEAP_H
define MINHEAP_H
include
include
using namespace std;const int DefaultSize=50;
template
endif
下面是测试函数由“data中的数据进行测试”
“data.txt”
26
713
173
341
360
1156
139
190
356
680
28
64
396
312
619
642
238
4
630
612
852
320
97
163
17
148
5
“测试所用代码”
include
include
include “HuffmanTree.h”
include “MinHeap.h”
using namespace std;struct Huffmancode{//定义存储霍夫曼编码及相关信息的结构体
char c;//存储字符
int weight;//存储该字符的权重
string code;//存储该字符的Huffman编码
int length;//存储该字符的长度
};
int main(){
ifstream fin(“data.txt”);//读取每一个字符对应的权重
assert(fin);//断言文件打开成功且不为空
int n=26,i;
assert(fin >> n);
int * w = new int[n+1];
// cout << “There are ” << n << ” nodes in the file.\n”;
///测试函数,输出各个结点存储的元素值
// cout << “The weight of each node is:\n”;
for( i = 1; i <= n; i++){
fin >> w[i];//将各个结点的权值读写进入最小堆当中
// cout << “weight[” << i << “]: ” << w[i] << endl;
}
cout << “\nCreate huffman tree:\n”;
HuffmanTree
相关文章推荐
- 数据结构.哈夫曼树(HuffmanTree)
- PAT 1064. Complete Binary Search Tree (30)(中序遍历来给完全搜索树赋值,题目是给出一个列数字,把它构建成完全搜索树并输出)
- [zt]Flex 3: 构建高级用户界面 使用 Tree 控件8
- KD-tree的原理以及构建与查询操作的python实现
- KD-tree的原理以及构建与查询操作的python实现
- Huffman Tree、AVL、SplayTree、Skip List、2-3-4 Tree、rb-Tree、B-Tree特性辨析与总结
- TreeViewer构建步骤
- 哈夫曼树 Huffman tree 原理
- 哈夫曼树(Huffman tree)->一种二叉树
- Chrome内核解析 -- 背景篇:构建DOM Tree, Render Tree, RenderLayer Tree
- 再写 Huffman_Tree
- HuffmanTree的浅析和在C#中的算法实现
- Extjs treePanel 后台Json的两种构建方法
- DSOJ Huffman coding tree(Huffman编码树)
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
- PAT 1043. Is It a Binary Search Tree (25)(判断是否是搜索树并构建和后序输出)(待修改)
- 树-哈夫曼树(Huffman Tree)
- 1127. ZigZagging on a Tree (30)[二叉树构建-dfs-bfs]
- [zt]Flex 3: 构建高级用户界面 使用 Tree 控件1
- 6-9-哈夫曼树(HuffmanTree)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版