压缩算法
压缩算法基础
一堆数据相当于一块海绵,可以通过压缩算法来压缩其体积,但是最终不能够无限制的进行压缩,最多把海绵中的空气挤出来不能够把海绵本身完全挤没。
无损压缩算法
无损压缩算法可以保证数据不被丢失。
常见的无损压缩算法有哈夫曼编码、字典编码、预测编码
有损压缩算法
顾名思义,这种算法会导致数据部分损失,适用于媒体传输,对数据的完整性要求不高的场景。
常见的有损压缩算法有转换编码、量化、基于模型的压缩
LZ77压缩算法
简介
LZ77算法是一个无损压缩算法,是一种基于字典的压缩算法,现代很多压缩算法都是基于LZ77。
原理介绍
定义以下几个:
- lookahead buffer 等待编码的区域
- search buffer 已经编码的区域,搜索缓冲区,也有一个大小(其实就是字典)
- sliding window 滑动窗口,一个固定长度
从待编码区域的第一个数据开始,从已编码区域中寻找这样的一个子串,使得子串和待编码区域起始位置的串相同。如果能找到这样的一个串,则返回一个组(O,L),其中O表示两个匹配串的偏移值,即待编码区第一个数据到已编码数据中串的第一个数据;L表示找到的串的长度。
一旦找到一整个串,就将这个待编码区的串全部放到已编码区中,并且返回那个组。
如果从第一个数据开始就没有找到对应串,则返回一个(0,0,Byte),其中Byte是这个待编码区没有找到的串,并且将这个数据放进已编码区。
对一个要进行编码的串,编码之后就会变成一系列的组,然后这个组本身就代表了压缩前的字符串。
简单代码实现。
1 | ``` |
## 解压缩
* 如果遇到(0,Byte)类型的组,则直接恢复这个字符,并且将这个字符加入字典。
* 如果遇到了其他类型的组,则在字典中寻找字符,并且加上后面自带的那个字符。
* 将所有的压缩后的表示形式进行展开。
## Huffman压缩算法
- Title: 压缩算法
- Author: HarderHeng
- Created at : 2024-11-21 14:59:54
- Updated at : 2024-11-22 17:28:05
- Link: https://harderheng.life/2024/11/21/压缩算法/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments