哈弗曼压缩为无损压缩。
霍夫曼压缩的原理:有abbcccddddeeeee这样一个名字为1.txt的文件。
1.统计文件中每个字节出现每个次数
97 1
98 2
99 3
100 4
101 5
HashMap<Byte, Integer> map = tree.countBytes("F:\\abc\\1.txt");
Set<Byte> keys = map.keySet();
for (byte b : keys) {
int value = map.get(b);
System.out.println(b + "次数:" + value);
2.以字节的次数作为节点的权值构造哈弗曼树
3.得到每个字节的哈弗曼编码
97 010
98 011
99 00
100 10
101 11
public String getHuffCode()
{
return huffCode;
}
4.使用哈弗曼编码来表示文件中的每个字节,得到一个01 字符串
010 011 011 00 00 00 10 10 10 10 11 11 11 11 11
4.得到01串
String str = tree.byte2HfmCode(mapCode, "F:\\abc\\1.txt");
System.out.println(str);
5.将01字符串看做是二进制的数据,每8位一个字节
01001101 10000001 01010101 11111111 1
比较两个叶子节点大小用到的
自定义比较器
class MyComparable implements Comparator<TreeNode> {
public int compare(TreeNode o1, TreeNode o2) {
return o1.obj - o2.obj;
}
}
分享到:
相关推荐
自己实现的Huffman编码,压缩率接近50%,使用字节流写入文件。解码时读取字节流,将字节流转化为二进制串,匹配字符解压。使用I have a dream作为测试文件。
使用文件保存初始的文本数据及最终的结果。 文件名为inputfile1.txt的文件保存的...统计inputfile1.txt中各字符的出现频率,并据此构造Huffman树,编制Huffman编码;根据已经得到的编码,对01形式的编码段进行译码。
实验三、Huffman编码(二叉树) 实验目的:熟练掌握二叉树应用(Huffman编码)的基本算法实现。 实现功能:对输入的一串电文字符实现Huffman编码,再对Huffman编码生成的代码串进行译码,输出电文字符串。实现...
Huffman编码与解码 (选做)(Huffman编码、二叉树) [问题描述] 对一篇英文文章,统计各字符出现的次数,实现Huffman编码,以及对编码结果的解码。 [基本要求] (1) 输出每个字符出现的次数和编码,其中求最小权值...
本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...
Huffman编码C++源代码 Huffman编码C++源代码
收集来的Quake3 自适应huffman编码分析,备份一份
图像的Huffman编码 有注释 希望对大家有用!!!!
c语言的huffman编码及编码效率计算,采用两种编码方式,可选择
Huffman编码的测试文件 包括图像 文本 音频和压缩文件
基于Matlab的图像huffman编码的实现,将图像转换为灰度图,并压缩,求其压缩比和时间
Huffman编码的程序代码, #include #include #include #include //极大值用于生成Huffman树 #define MAXSIZE 100000000 //用于生成相应叶子节点Huffman编码的二维字符数组 typedef char* HCode; //Huffman树节点 ...
简单图解释Huffman编码构成过程,简单易懂
Huffman树 及 Huffman编码 演示程序 以画图的方法形象的表示了树的构成,解决了普通控制台应用程序对树的结构表达不清的问题 编译器 VS2008
1.要求对文件进行Huffman编码的算法,以及对一编码文件进行解码的算法 2.熟练掌握二叉树的应用;具体要求如下: 最小冗余码/哈夫曼码
代码中用C++实现了Huffman编码,经过测试通过
包含huffman编码java实现源程序、该java程序的javadoc文档、huffman编码简单原理ppt
韩英杰老师的数据结构中关于Huffman编码算法演示课件