Skip to content

t1anyuv/Huffman

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

编码解码演示举例

编码

对于字符串"abac"

其对应ascii码为:

a--97

b--98

c--99

构造的哈夫曼编码为:

a--1

b--00

c--01

哈夫曼编码表建立如下映射关系:

a: 97 -- 1

b: 98 -- 00

c: 99 -- 01

原字符串表示为:

100101

(这里如果大于8位,则先处理前n个8位)

(如:11000110 001 先处理11000110)

转为10进制:

1 + 4 + 32 = 37

编码结果:

"abcd" -> 37

解码

由37转为二进制:

37|256 = 293(这是为了补足八位,因为之前是按八位进行处理的,如果不补足会导致处理编码的长度不一致)

293转为二进制:100100101

由于之前编码时不足八位,那么取之前的最后六位

100 100101 -> 100101

逐个查询编码串 100101:

查询1,根据哈夫曼编码表查到映射关系: 1 -- 97,从1之后的0重新逐个查询

查询0,无映射关系

查询00,根据哈夫曼编码表查到映射关系: 00 -- 98,从00之后的1重新逐个查询

查询1,根据哈夫曼编码表查到映射关系: 1 -- 97,从1之后的0重新逐个查询

查询0,无映射关系

查询01,根据哈夫曼编码表查到映射关系: 01 -- 99

将97 98 97 99组成的字节数组重新写回到文件中,文件自动进行解析:

97 -- a

98 -- b

97 -- a

99 -- c

解码结果:

37 -> "abcd"

解压效果

| 文本文件(txt) | 影像文件(mp3) | 图片(jpg,png) | 音乐文件(mp4) | 说明 | |----------------|----------------|--------------|------------| | 7072% | 4050% | 98100% | 98100% | 文件过大时会溢出 |

对于1MB以内的文本文件压缩率维持在70%左右,对于影像文件压缩效果好,但内容过大容易导致栈内存溢出,对图片和音乐文件压缩效果不明显。

About

哈夫曼压缩

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages