论文笔记|A Block-sorting Lossless Data Compression Algorithm
文章目录
- 1 简介
- 1.1 创新
- 2 方法
- 2.1 编码
- 2.2 解码
- 3 实验
1 简介
论文题目:A Block-sorting Lossless Data Compression Algorithm
论文来源:Systems Research Center 1994
组织机构:
论文链接:https://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-124.pdf
代码链接:
1.1 创新
- 提出了一种无损的数据压缩技术(Burrows Wheeler transform),通过对文本块进行可逆变化,使输入中的冗余更容易被简单的编码方案获得。
- 算法是通用的,使用排序根据上下文将字符组合在一起,在文本和非文本数据中均能取得不错的效果。
- 算法的解压速度比压缩速度快。
2 方法
2.1 编码
给定字符串,进行循环移位,得到的字符串根据字典序进行排序,取每个移位字符串的最后一列为L。
例如S=‘abraca’,得到L为caraab,index=1。
代码实现
def rotations(t):tt = t * 2return [tt[i:i+len(t)] for i in range(0, len(t))]def bwm(t):return sorted(rotations(t))def bwtViaBwm(t):return ''.join(map(lambda x: x[-1], bwm(t)))
2.2 解码
编码阶段得到L=caraab,index=1。
- 对L进行字典排序,得到循环列表的第一列F=aaabcr。
- 根据F和L,得到映射T。F[T[j]] = L[j]
- T和index还原原始字符串S。
S=[N−1−i]=L[Ti[I]]S=[N-1-i]=L[T^i[I]]S=[N−1−i]=L[Ti[I]](其中T0[x]=xT^0[x]=xT0[x]=x,Ti+1[x]=T[Ti[x]]T^{i+1}[x]=T[T^i[x]]Ti+1[x]=T[Ti[x]])
代码实现(在输入文本结尾加入$符号表示结尾,因此不需要记录index了):
def rankBwt(bw):tots = dict()ranks = []for c in bw:if c not in tots:tots[c] = 0ranks.append(tots[c])tots[c] += 1return ranks, totsdef firstCol(tots):first = {}totc = 0for c, count in sorted(tots.items()):first[c] = (totc, totc+count)totc += countreturn firstdef reverseBwt(bw):ranks, tots = rankBwt(bw)first = firstCol(tots)for c, count in sorted(first.items()):if c == "$":rowi = count[0]t = '$'while bw[rowi] != '$':c = bw[rowi]t = c + trowi = first[c][0] + ranks[rowi]return t
3 实验
实验过程为首先对字符串进行编码,然后move-to-front编码,最后进行哈夫曼编码,
将对循环的排序改为后缀排序。
Q1:对原始字符串扩展k个EOF字符,定义为S’。(K为一个机器字的字符数)
Q2:初始化W[0,…,N-1],W[i]=S’[i,…,i+k-1]
Q3:初始化V=[0,1,…,N-1],算法完成后,V[i]表示第i个字符的字典序。
Q4:以每个后缀的前两个字符为key,对V进行排序。
Q5:对字母表中的字符进行遍历ch,完成Q6、Q7。
Q6:对字母表中的字符进行遍历ch’,对ch ch’开始的后缀进行排序。
Q7:对W的值进行修改,高位为ch(保持不变),低位为i。
实验结果如下图:
输入文本块的长度对实验结果的影响:
对比实验:
论文笔记|A Block-sorting Lossless Data Compression Algorithm相关推荐
- 论文笔记-Real-Time MDE using Synthetic Data with Domain Adaptation via Image Style Transfer
论文信息 标题: Real-Time Monocular Depth Estimation using Synthetic Data with Domain Adaptation via Image ...
- 论文笔记——N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning...
论文地址:https://arxiv.org/abs/1709.06030 1. 论文思想 利用强化学习,对网络进行裁剪,从Layer Removal和Layer Shrinkage两个维度进行裁剪. ...
- 论文笔记之:Playing for Data: Ground Truth from Computer Games
Playing for Data: Ground Truth from Computer Games ECCV 2016 Project Page:http://download.visinf.tu- ...
- 【论文笔记之 CLMS】The Complex LMS Algorithm
本文对 B. Widrow 等人于 1975 年在 Proceedings of the IEEE 上发表的论文进行简单地翻译.如有表述不当之处欢迎批评指正.欢迎任何形式的转载,但请务必注明出处. 论 ...
- 【论文笔记之 APA】an adaptive filtering algorithm using an orthogonal projection to an affine subspace ...
本文对 Kazuhiko Ozeki 等人于 1984 年在 Electronics and Communications in Japan (Part I: Communications) 上发表的 ...
- 深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression
文章目录 1.摘要和背景 1.1 摘要 1.2 背景 2.方法和贡献 2.1 方法 2.2 贡献 3.实验和结果 3.1 实验 3.2 结果 4.总结和展望 4.1 总结 4.2 展望 本系列是在阅读 ...
- 论文笔记:WORD TRANSLATION WITHOUT PARALLEL DATA
引用文章 Facebook MUSE 无监督跨语言迁移学习任务 face - Word Translation without Parallel Data 文献阅读笔记:Word Translatio ...
- 论文笔记:DLWL: Improving Detection for Lowshot classes with Weakly Labelled data
论文笔记:DLWL: Improving Detection for Lowshot classes with Weakly Labelled data 使用弱标签数据改进对Lowshot类的检测 1 ...
- 【论文笔记之 MDF】Multidelay Block Frequency Domain Adaptive Filter
本文对 JIA-SIEN SOO 和 KHEE K. PANG 于 1990 年在 IEEE Transactions on Acoustics, Speech, and Signal Process ...
最新文章
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- 外企员工职场跃迁:他们将目光转向杭州 转向云计算
- 有理有据:一篇来自前端同学对后端接口的吐槽!
- ASP.NetViewState的实现方案
- 报错 findMergedAnnotation activemq
- 史上最简单的git教程搭配Github和Gitee一起食用更佳
- android 电话 快捷键,Android studio开发常用快捷键详解
- JavaScript中对象的比较
- Python春节特训营09:老师的点名神器
- Android打字机动画,Android 打字机效果
- java ews appointment_EWS API 2.0读取日历信息-读取内容注意事项
- 如何在iPhone和iPad上使用Group FaceTime
- 数据科学家处理小数据的7个技巧。
- 知云文献翻译 for mac
- JumpServer开源堡垒机完成龙芯架构兼容性认证
- python人物关系可视化百年孤独_百年孤独LDA主题分析
- 《常用典型机械零件制图规范》
- Essential Linux Device Drivers》中文版第2章
- 无人机遥感测绘服务:主要应用于航空摄影测量、国土测绘等
- mac clion 下 stdio.h file not found
热门文章
- C++面向对象学习之路(一)类与对象
- python二次方程_怎么用python解一元二次方程?
- 项目管理-5大过程组-10大知识领域-47过程
- Centos7配置网络
- HTML/CSS仿制Uplay官方网页面后记
- C++入门教程(四十二):函数参数使用引用
- OKRs, How Google sets goals, Startup Lab workshop | Chatopera
- java课程设计计算器 uml简图,计算器的用例建模
- 3.4.3 Electric Fence电网 USACO(毕克定理) USACO
- 《微机原理第五版》期末知识总结(第五章---第七章)