Huffman树的创建
来源:互联网 发布:js正则表达式可以为空 编辑:程序博客网 时间:2024/05/17 09:06
运用了小堆堆的基本操作
#include<stdio.h>#include<iostream>using namespace std;#include"heap.cpp"//引用堆的创建文件template<class T>struct Node{ Node(T weight,T data = T()) :_pLeft(NULL) ,_pRight(NULL) ,_weight(weight) ,_data(data) {} Node* _pLeft; Node* _pRight; T _data; T _weight;};template<class T>struct ComplareNode{ bool operator()(Node<T>* pLeft,Node<T>* pRight) { return pLeft->_weight<pRight->_weight; }};template<class T>class HuffmanTree{public: HuffmanTree() :_pRoot(NULL) {} HuffmanTree(const T array[],size_t size) { //首先,我们要将数组中所有权值的数转化为节点的森林 //然后选择权值最小的两个节点做为左右子树组建成一棵树,根节点的权值为这两个节点的权值之和,将该树放入我们的森林里 //再继续重复上一步骤,直到剩下最后一个节点,该节点就是一棵huffman树的根节点 //针对于如何在森林中选取权值最小的两个节点,我们可以根据我们刚刚学的堆来处理,用森另中的所有节点建立一个小堆,每次选取堆顶的元素 _CreateHuffmanTree(array,size); }private: void _CreateHuffmanTree(const T array[],size_t size) { heap<Node<T>*,ComplareNode<T>> hp;//创建一个堆,用来存放森林 for(size_t idx=0; idx<size; ++idx)//将权值转化为节点存入堆中 { hp.Insert(new Node<T>(array[idx])); } //存在问题!!!!我们前面实现的堆在调整时比较的是节点的data值 //因为我们的vector里存放的是T类型,但是我们现在vector里存放的是Node<T>*,所以调整时不能再用 <和>直接比较 //如果直接比较比较的将是两个地址,而我们要比较的则是节点的权值,但vector里又不能存放权值,如果存放的是权值, //新产生的树将会丢失,苏所以我们必须重新定义比较类 while(hp.Size()>1) { Node<T>* pLeft = hp.Top();//在堆中选取两个最小权值的节点,作为左右孩子组建成新的树 hp.Remove(); Node<T>* pRight = hp.Top(); hp.Remove(); Node<T>* pParent = new Node<T>(pLeft->_weight+pRight->_weight); pParent->_pLeft = pLeft; pParent->_pRight = pRight; hp.Insert(pParent);//将树放入森林 } _pRoot = hp.Top(); }private: Node<T>* _pRoot;};
0 0
- Huffman树的创建
- Huffman树的创建
- huffman树的创建与编码
- Huffman树的创建及编码
- C++ huffman树的创建和打印
- 创建huffman树
- Huffman树的实现
- huffman树的编译
- huffman树的分析
- Huffman树的实现
- Huffman树的实现
- Huffman树&&Huffman编码
- 别人写的Huffman树
- huffman树的小小应用
- Huffman树的简单实现
- 【C++】Huffman树的实现
- Huffman树的基本操作
- Huffman编码文件压缩 - Huffman树的建立与编码
- 设计模式:对象创建(原型,单例,简单工厂,工厂方法,抽象工厂,生成器)
- 单纯形模板
- 尚硅谷自定义View学习笔记-小白到实战
- 字符串替换
- I/O字符流
- Huffman树的创建
- faster rcnn论文
- Docker命令介绍
- 如何查找Oracle Data Integrator和Oracle GoldenGate的支持列表
- MyBatis传入多个参数的问题
- sql
- ABAP中的系统变量SY-INDEX与SY-TABIX
- 5-70 情人节 (15分)
- [leetcode: Python]219. Contains Duplicate 2