[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 ...
随机推荐
- 图文并茂 —— 基于Oozie调度Sqoop
利用大数据来做BI分析的时候,必不可少需要设置一些调度任务. 本篇就讲述一下如何利用hue来编辑shell操作,这里面的很多操作在其他的调度操作里面也是可以借鉴的. 如果是linux里面可以直接执行的 ...
- php中call_user_func 与 call_user_func_array的使用
call_user_func()是利用回调函数处理字符串,call_user_func_array是利用回调函数处理数组. // 1. 调用自定义函数 function test($a, $b) { ...
- RouterOS双线进行IP分流上网
环境: 1.第一条:电信静态IP,一级路由分配的IP:第二条:移动光纤 2.通过指定某些IP走电信,某些走移动 注意: 1.当有多条线路进行NAT伪装时,Out. Interface这个必须选择具体的 ...
- python:爬虫入门
直接上代码吧: 一.爬取某外卖平台的指定商家菜品信息 from urllib import request import json import random url = "https:// ...
- Menu实现逻辑
一.前奏 创建一个WS_EX_NOACTIVATE的窗体 创建窗体后注册Hook消息(鼠标在非Menu区域点击时关闭menu,接收键盘消息用于快捷键,接WM_SETFOCUS消息,当打开新窗体 ...
- Linux和类Unix系统上5个最佳开源备份工具
一个好的备份最基本的目的就是为了能够从一些错误中恢复: 人为的失误 磁盘阵列或是硬盘故障 文件系统崩溃 数据中心被破坏等等. 所以,我为大家罗列了一些开源的软件备份工具. 当为一个企业选择备份工具的时 ...
- AngularJS中Scope间通讯Demo
在AngularJS中,每一个controller都有对应的Scope,而Scope间有时候需要通讯.比如有如下的一个controller嵌套: <body ng-controller=&quo ...
- vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
我发现好多倒计时的插件,刷新都会变成从头再来,于是自己用vue2.0写了一个,测试通过,直接上代码 如下是组件代码: <template> <span :endTime=" ...
- Gson 与 fastJson 在使用上的差异(fastJson的优点)
一.android 常用的json解析方式 Android 开发上常用的json解析方式有:Gson, fastJson,jackson. 因为jackjson jar包会比较大点(700+k),Gs ...
- windows 2003 iis 360防黑加固后不能使用
最近在使用360的防黑加固加固2003系统,发现IIS居然不能够使用了,报401.1错误,查找解决方案如下: 1.我的电脑-〉属性-〉管理-〉本地用户和组,查看IUSER用户是否开启,如果未开启开启后 ...