[IR] Dictionary Coding
Lempel–Ziv–Welch
年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。
基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识——信源的字符频率,然后进行压缩。但是在大多数情况下,这种先验知识是很难预先获得。
因此,设计一种更为通用的数据压缩编码显得尤为重要。LZ77数据压缩算法应运而生,其核心思想:利用数据的重复结构信息来进行数据压缩。
LZ77: referring to previously processed data as dictionary 利用内部信息作为字典。
在提出基于滑动窗口的LZ77算法后,两位大神Jacob Ziv与Abraham Lempel于年在发表的论文中提出了LZ78算法;
与LZ77算法不同的是LZ78算法使用动态树状词典维护历史字符串。
LZ78: use an explicit dictionary 字典是外置的。
LZ系列压缩算法均为LZ77与LZ78的变种,在此基础上做了优化。
- LZ77:LZSS、LZR、LZB、LZH;
- LZ78:LZW、LZC、LZT、LZMW、LZJ、LZFG。
LZW Encoding:
Video: https://www.youtube.com/watch?v=nW7OARbr7OI
"TO BE OR NOT TO BE OR TO BE OR NOT"
Idea:
以下是我们已知的字典。

再动态补充新发现的pattern字典,从27开始编号,如下所示:
| current | next | code | dictionary | ||
| T | O | 20 | TO | 27 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| O | B | 15 | OB | 28 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| B | E | 2 | BE | 29 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| E | O | 5 | EO | 30 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| O | R | 15 | OR | 31 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| R | N | 18 | RV | 32 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| N | O | 14 | NO | 33 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| O | T | 15 | OT | 34 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| T | T | 20 | TT | 35 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| TO | B | 27 | TOB | 36 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| BE | O | 29 | BEO | 37 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| OR | T | 31 | ORT | 38 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| TOB | E | 36 | TOBE | 39 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| EO | R | 30 | EOR | 40 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| RN | O | 32 | RNO | 41 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| OT | # | 34 | N/A | N/A | TO BE OR NOT TO BE OR TO BE OR NOT | 
| Input | Output | ||||
这里共16行,也就是原来的24字节 --> 16字节。
LZW Decoding:
| code | prev | output | dictionary | ||
| 20 | T | TO BE OR NOT TO BE OR TO BE OR NOT | |||
| 15 | T | O | TO | 27 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 2 | O | B | OB | 28 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 5 | B | E | BE | 29 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 15 | E | O | EO | 30 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 18 | O | R | OR | 31 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 14 | R | N | RN | 32 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 15 | N | O | NO | 33 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 20 | O | T | OT | 34 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 27 | T | TO | TT | 35 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 29 | TO | BE | TOB | 36 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 31 | BE | OR | BEO | 37 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 36 | OR | TOB | ORT | 38 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 30 | TOB | EO | TOBE | 39 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 32 | EO | RN | EOR | 40 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| 34 | RN | OT | RNO | 41 | TO BE OR NOT TO BE OR TO BE OR NOT | 
| <Output> | <Input> | ||||
可见与encoding时表格一一对应的关系。
就是还原表格的过程。
[IR] Dictionary Coding的更多相关文章
- [IR] Huffman Coding
		为了保证:Block中,所有的叶子在所有的中间结点的前面.Static: Huffman coding Dynamic: Adaptive Huffman 一些概念 压缩指标 • Compress a ... 
- [IR] Arithmetic Coding
		Statistical methods的除了huffman外的另一种常见压缩方式. Huffman coding的非连续数值特性成为了无法达到香农极限的先天无法弥补的缺陷,但Arithmetic co ... 
- 本人AI知识体系导航 - AI menu
		Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ... 
- [Code] 烧脑之算法模型
		把博客的算法过一遍,我的天呐多得很,爱咋咋地! 未来可考虑下博弈算法. 基本的编程陷阱:[c++] 面试题之犄角旮旯 第壹章[有必要添加Python] 基本的算法思想:[Algorithm] 面试题之 ... 
- HANA Architecture
		1 HANA 是基于内存计算的.行列都支持.使用列存储,列存储的特点是高压缩,查询快,节约空间, ---SAP HANA supports both, but is particularly opti ... 
- python之最强王者(8)——字典(dictionary)
		1.Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包 ... 
- Dictionary Learning(字典学习、稀疏表示以及其他)
		第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是稀疏字典学习(Sparse Di ... 
- Coding源码学习第一部分(AppDelegate.m)
		前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ... 
- [IR] Compression
		关系:Vocabulary vs. collection size Heaps’ law: M = kTbM is the size of the vocabulary, T is the numbe ... 
随机推荐
- Codeforces Round #109 (Div. 1) 题解 【ABC】
			A - Hometask 题意:给你一个字符串,然后再给你k个禁止挨在一起的字符串,问你最少删除多少个字符串,使得不会有禁忌的字符串对挨在一起.题目保证每个字符最多出现在一个禁忌中. 题解:由于每个字 ... 
- Iowait的成因、对系统影响及对策--systemtap
			http://blog.csdn.net/yunlianglinfeng/article/details/51698607 
- HTML5 Canvas制作雷达图实战
			雷达图又叫蜘蛛网图,是一种对各项数据查看很明显的表现图,在很多游戏中,对游戏中的每个角色的分析图一般也用这种图. 下面,用HTML5的Cavas来实现雷达图. 效果 一.创建Canvas var mW ... 
- 【BZOJ3036】绿豆蛙的归宿 概率DP
			链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ... 
- C#高级编程----错误和异常的总结
			错误和异常的总结 因为总结吗,,可能概念啥的比较多,大家要学着适应. 首先是C#中的异常用老处理系统级和用户级的错误状态,是一种结构化,统一的类型安全的处理机制. 因为鄙人开始想走C++的道路,所以搞 ... 
- Win7下MongoDB的安装和使用
			Win7下MongoDB的安装和使用 1.下载: http://www.mongodb.org/downloads 2.安装: 安装目录为 D:\mongodb\MongoDB 2.6 Standar ... 
- CustomJsonDateDeserializer @JsonDeserialize(using = CustomJsonDateDeserializer.class) Jackson 反序列化Date时遇到的问题  java中json日期属性反序列化
			public class CustomJsonDateDeserializer extends JsonDeserializer<Date> { @Override public Date ... 
- Linux 中C/C++ search path(头文件搜索路径)
			https://blog.csdn.net/BjarneCpp/article/details/76135980 起因 我拿到了一套Linux下的C++代码,代码中有这个头文件#include < ... 
- org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.*.Paper.totalTime
			at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:109) at o ... 
- 在 OC 中调用 Swift 代码
			1.在 Objective-C 项目中使用 Swift 代码 1)在 OC 项目中创建 .Swift 文件,文件中的格式为其本有的格式. 2)Xcode 提示是否创建 Objective-C brid ... 
