哈夫曼树算法实现
来源:互联网 发布:it职业技术学校 编辑:程序博客网 时间:2024/05/20 12:46
哈夫曼树(Huffman Tree),即最优二叉树(optimium binary tree),是一类带权路径长度最短的二叉树。
1、哈夫曼树的构造方法
1)根据n个权值w1,w2,w3......wn构造n棵二叉树的森林F={T1,T2,T3......Tn}Ti含带权为wi的根节点,无左右子树;
2)在森林F中选择两可根节点权值最小的二叉树作为左右子树,合并为新的二叉树,并删除这两棵二叉树;
3)重复2)步,直到只剩一颗二叉树,即为哈夫曼树
2、哈夫曼树的应用
1)改善判定树。利用哈夫曼树得到最优判定算法。
2)哈夫曼编码
3、哈夫曼树编码算法
类声明:
const int N=30;//叶节点的最大数const int M=2*N-1;//总结点的最大数const int MAX=9999;//最大常量const int L=20;//编码最大长度struct element{ int weight; int lchild,rchild,parent;};//结构类型说明typedef struct{ char bits[N];//用于存放位串 int start;//用于存放编码在位串中的起始位置 char ch;//编码存储的结构类型说明}codetype;
1)建立哈夫曼树的算法
void HuffmanTree(elemrnt hT[],int w[],int n)
{
int i,k,,i1,i2;
for(i=0;i<2*n-1;i++) hT[i].parent=hT[i].lchild=hT[i].rchild=-1;
for(i=0;i<n;i++) hT[i].weight=w[i];
for(k=n;k<2*n-1;k++){
Select(hT,i1,i2,k);
hT[i1].parent=hT[i2].parent=k;
hT[k].weight=hT[i1].weight+hT[i2].weight;
hT[k].lchild=i1;
hT[k].rchild=i2;
}
}
选取最小两棵二叉树的函数Select():
void Select(element hT[],int &i1,int &i2,int k){ int min1=MAX,min2=MAX;//MAX为较大常数,如9999 i1=0;i2=0;//分别记录最小和次小所在的下标值 for(int i=0;i<k;i++)//找出min1<=min2 两个最小 if(hT[i].parent==-1)//一定在双亲为空的结点中找 if(hT[i].weight<min1){ min2=min1;i2=i1;min1=hT[i].weight;i1=i; }else if(hT[i].weight<min2){ min2=hT[i].weight;i2=i; }}
2)建立哈夫曼编码的算法:
void HuffmanCode(element hT[],codetype code[],int n){ int i,c,;codetype cd; for(i=0;i<n;i++){ cd.start=n;c=i;p=hT[[c].parent;//i的双亲p while(p!=-1){ cd.start--; if(hT[p].lchild==c) cd.bits[cd.start]='0'; else cd.bits[cd.start]='1'; c=p; p=hT[c].parent; } code[i]=cd; }}
- 哈夫曼树及其算法实现
- 哈夫曼树算法实现
- 算法实现
- 算法实现
- 算法和算法实现
- 哈夫曼树建立、哈夫曼编码算法的实现
- 哈夫曼树_双缓冲实现压缩算法
- 【算法】扑克发牌算法实现
- Java算法:二分法算法实现
- 《算法导论》算法实现收集
- 【算法】快排算法实现
- 算法导论中算法实现
- 《算法导论》Dijkstra算法实现
- 基数排序算法,讲解+算法实现
- 梅西迭代算法的实现
- 如何实现DES算法
- 银行家算法实现
- CRC算法与实现
- 关于本地服务器怎么让外网访问到
- Codeforces 1C Ancient Berland Circus
- #define new DEBUG_NEW
- 从输入url到页面展示到底发生了什么
- 微信开发接口配置和Web开发工具
- 哈夫曼树算法实现
- 幸存者偏见
- 浅谈腾讯热更新开源框架xLua自定义Loader
- linux下解压命令大全
- iOS
- 1051. 复数乘法
- loadrunner中lr_wasted_time函数
- SCUT125 华为杯 D.笔芯回文 —— DP
- ZigZag Conversion