数据结构Huffman树及编码
来源:互联网 发布:大学生网络党校 编辑:程序博客网 时间:2024/05/16 14:46
欢迎关注我的网站:http://www.omegaxyz.com/
一、 实验目的
构造一个哈夫曼树,并根据所构造的哈夫曼树求其哈夫曼树的编码;
二、 基本思路
- 将每个英文字母依照出现频率由小排到大,最小在左,组成一个序列
- 每个字母都代表一个终端节点(叶节点),比较每个字母的出现频率,将最小的两个字母频率相加合成一个新的节点,将两个字母从序列中删除,将生成的节点加入到字母队列中
- 重复前面两步,直到序列中没有字母为止
进行编码: - 给霍夫曼树的所有左链结’0’与右链结’1′
- 从树根至树叶依序记录所有字母的编码
三、基本代码
1.Huffman.h文件
typedef struct{ int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char **HuffmanCode;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n);void HuffmanSelect(HuffmanTree HT,int k,int &s1,int &s2);
2.主要函数
①select函数
void HuffmanSelect(HuffmanTree HT,int n,int &s1,int &s2){ int minn=10000000,maxx=10000000; s1=s2=0; for(int i=1; i<=n; i++) { if(HT[i].parent==0) { if(HT[i].weight<minn) { minn=HT[i].weight;s1=i; } } } int t=HT[s1].weight; HT[s1].weight=maxx; minn=99999998; for(int i=1; i<=n; i++) { if(HT[i].parent==0) { if(HT[i].weight<minn) { minn=HT[i].weight; s2=i; } } } HT[s1].weight=t; }
②编码函数
void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n){ if(n<=1)return; int m=2*n-1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); int i; for(i=1;i<=n;i++) { HT[i].weight=w[i]; HT[i].parent=HT[i].rchild=HT[i].lchild=0; } for(;i<=m;i++) { HT[i].weight=HT[i].parent=HT[i].rchild=HT[i].lchild=0; } int s1=0,s2=0; for(i=n+1;i<=m;i++) { HuffmanSelect(HT,i-1,s1,s2); HT[s1].parent=i;HT[s2].parent=i; HT[i].lchild=s1;HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); char *cd; cd=(char *)malloc(n*sizeof(char)); cd[n-1]='\0'; int start; for(i=1;i<=n;++i) { start=n-1; int c=0;int f=0; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) { if(HT[f].lchild==c) cd[--start]='0'; else cd[--start]='1'; } HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd);}
阅读全文
0 0
- Huffman树及Huffman编码(数据结构)
- 数据结构Huffman树及编码
- 数据结构 树 Huffman编码
- Huffman树编码(数据结构)
- 数据结构试验-试验8-huffman树、huffman编码
- 数据结构和算法——Huffman树和Huffman编码
- Huffman树&&Huffman编码
- Huffman编码(数据结构)
- Huffman 编码 数据结构
- 【数据结构】huffman编码
- 【数据结构】Huffman编码
- 数据结构Huffman编码译码
- 数据结构 Huffman编码实现
- C++数据结构——堆,二叉搜索树及Huffman编码输出
- huffman树的编码及应用
- 树的应用及Huffman编码
- Huffman树的创建及编码
- Huffman树及编码C++实现
- 线程池ThreadPoolExecutor参数设置
- leetcode解题报告21. Merge Two Sorted Lists
- 0、Mybatis源码环境的搭建
- uva11181(概率)
- .9图的制作和短信sms的发送
- 数据结构Huffman树及编码
- 微服务架构(Microservice Architecture)
- 1、mybatis的初始化
- 不知名的有DIO、SCK、RCK引脚的四位LED数码管模块
- 浅谈虚拟机(2.1)凶器简介の局部变量表
- Python3.X中的位运算符
- windows编译protobuf库(用Visual Studio编译)
- angular资源整理
- Spring的依赖注入方式