赫夫曼编码的应用
来源:互联网 发布:sql是什么软件 编辑:程序博客网 时间:2024/05/19 00:11
blog.sina.com.cn/s/blog_a00f562701018vt2.html
2.1设计要求
2.2设计分析
利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码。根据设计要求和分析,要实现本设计,必须实现以下几个方面的功能:
<1>赫夫曼树的建立;
<2>赫夫曼编码的生成;
<3>编码文件的译码;
2.3算法实现
ⅰ赫夫曼树的建立(存为jlhfms.h文件)
要实现赫夫曼树算法,首先要实现在HT[1…k]中选择parent为0且权值最小的两个根节点的选择算法;另外,还要有一个实现统计输入电文字符串中各种字符出现的频率以及字符的种类的算法。
<1>选择parent为0且权值最小的两个根节点的算法
具体实现代码:
//用户接口
void select(HuffmanTree T,int k,int &s1,int &s2){
}
<2>统计字符串中字符的种类以及各类字符的个数
假设电文字符串全是大写字母,那么该算法的实现思想是:先定义一个含有26个元素的临时整型数组,用来存储各种字母出现的次数。因为大写字母的ASCII码与整数1-26之间相差64,因此在算法中使用字母减去64作为统计数组的小标对号入座无需循环判断来实现,从而提高了效率;另外,要求出电文字符串中有多少种字符,并保存这些字符以供编码时使用。统计和保存都比较容易,用一个循环来判断先前统计好的各类字符的个数的数组元素是否为零,若不为零,则将其值存入一个数组对应的元素中,同时将其对应的字符也存入另一个数组的元素之中。
具体实现代码为:
int jsq(char *s,int cnt[],char str[]){
}
<3>构造赫夫曼树
具体实现代码为:
void ChuffmanTree(HuffmanTree HT,HuffmanCode HC,int cnt[],char str[]){
}
#include
#include
#define n 100
#define m 2*n-1
typedef struct{
}CodeNode;
typedef CodeNode HuffmanCode[n+1];
typedef struct{
}HTNode;
typedef HTNode HuffmanTree[m+1];
int num;
void HuffmanEncoding(HuffmanTree HT,HuffmanCode HC){
//根据哈夫曼树HT求哈弗曼编码表HC
}
<3>建立正文的编码文件(存在scbmwj.h文件中)
void coding(HuffmanCode HC,char *str){
}
ⅲ代码文件的译码(存为dwym.h文件)
char * decode(HuffmanCode HC){
}
2.4程序代码
#include
#include
#include
#include"nodetype.h"
#include"jlhfms.h"
#include"scbmwj.h"
#include"dwym.h"
//入口函数
void main(){
}
2.5测试结果
2.6结论分析
以二叉链表作为存储结构,对二叉树的遍历及赫夫曼树、赫夫曼编码等概念进行综合练习,探讨各种非递归的遍历算法以及求根节点到任意结点的路径。赫夫曼编码的实现,综合了二叉树的各种运用,以及对以后压缩技术也提供了一定的指引,这次设计在原有功能的基础上也实现了对数字的编码,但后来想想,对数字编码是否存在实际意义,这也是做完后自己的一点思考。
- 赫夫曼编码的应用
- 数据结构 树的应用 赫夫曼编码
- 基于C语言的赫夫曼编码的应用
- Huffman编码的多媒体应用
- python base64编码的应用
- 霍夫曼编码的应用练习
- 《哈夫曼编码的实现和应用(编码和译码)》
- rails应用utf-8编码的问题
- huffman树的编码及应用
- 树的应用及Huffman编码
- Huffman编码(二叉树的应用)
- 在 ajax应用当中的编码问题
- JSP过滤器的应用 编码过滤器
- Huffman编码的设计与应用
- 简说BASE64编码的应用
- web应用字符查询编码的问题
- Java项目设置应用的文件编码
- 过滤器Filter的应用:编码过滤
- hibernate4.0+版本和3.0+版本的区别总结
- 浏览器内部工作原理
- tomcat与OSGI:类加载器
- 测试网页打开速度的18种专业方法
- openwrt第一课 --- 下载与安装
- 赫夫曼编码的应用
- android多分辨率适配
- android_wifi读书笔记之9-wifi开启流程
- Linux 为火狐浏览器安装Flash插件
- Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
- 埋藏式心脏复律除颤器的原理及参数设置
- eclipse部署web项目至本地的tomcat但在webapps中找不到
- MIPI接口下vedio mode和command mode的介绍及其优缺点
- MySQL下载与安装5.6.10.1安装图解