高性能的数据压缩库libzling-20160105
libzling(https://github.com/richox/libzling,求观看[watch],求星[star],求叉[fork])是一款高性能的数据压缩库,参见原贴:http://www.cnblogs.com/richselian/p/3626287.html。
本次更新加入了一个简化过的MTF(move-to-front)模块,使得整体压缩比已经接近bzip2,而压缩和解压速度仍大幅领先gzip。
MTF的一般实现如下:
def MTF_encode(queue, c):
p = queue.find(c)
queue[1 : p+1] = queue[0 : p]
queue[0] = c
return p
def MTF_decode(queue, p):
c = queue[p]
queue[1 : p+1] = queue[0 : p]
queue[0] = c
return c
一般实现的MTF算法在编码、解码时都需要O(n)复杂度,降低了算法速度,特别是对解压速度有严重影响。在libzling的实现中,我们不进行整个队列的移动操作,而是只将当前字符与前方某个字符交换位置,这样在编码时仍需要O(n)复杂度(可通过建索引降至O(1),但对整体性能提升不大),而解码时只需要O(1),使得本次改进大幅提升了压缩率,但并没有降低整体压缩速度。
改进后的MTF算法实现如下:
def MTF_encode(queue, c):
p = queue.find(c)
swap(queue[p], queue[mtf_next_pos[p]])
return p
def MTF_decode(queue, p):
c = queue[p]
swap(queue[p], queue[mtf_next_pos[p]])
return c
改进后大幅提升了速度,同时通过定制的mtf_next_pos函数,可以得到比传统MTF更好的压缩比,定制的mtf_next_pos函数如下:
def MTF_next_pos(p):
if p < 128:
return int(p * 0.9)
return p/2
同时一个对MTF的改进是对队列初值进行定制,传统的MTF队列初始化是简单的queue[i]=i,这使得刚开始编码的时候(特别是高阶)MTF模型准确率较低。libzling中MTF的初值采用统计方法确定,即统计每个字符在输入数据中出现的频率,频率高的在前。这样使得刚开始编码的时候MTF模型也能保证较高的准确率。
高性能的数据压缩库libzling-20160105的更多相关文章
- 高性能的数据压缩库libzling
libzling(https://github.com/richox/libzling)是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了流行的zlib/gzip.libzling使用的是ROLZ ...
- 高性能的数据压缩库libzling-20140324
libzling(https://github.com/richox/libzling,求观看[watch],求星[star],求叉[fork])是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了 ...
- 基于async/non-blocking高性能redis组件库BeetleX.Redis
BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...
- 深入 Go 中各个高性能 JSON 解析库
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/535 其实本来我是没打算去看 JSON 库的性能问题的,但是最近我对 ...
- 高性能的JavaScript库---Lodash
上周在仿做Nodejs社区的时候,遇到了lodash这个javascript库,很惭愧,那也是我第一次听说lodash.人嘛,对于新鲜的事物总是会或多或少感到些好奇的,于是就毫不犹豫地去lodash官 ...
- 高性能 Java 缓存库 — Caffeine
http://www.baeldung.com/java-caching-caffeine 作者:baeldung 译者:oopsguy.com 1.介绍 在本文中,我们来看看 Caffeine - ...
- 发布一个参考tornado的高性能c++网络库:libtnet
libtnet是一个用c++编写的高性能网络库,它在设计上面主要参考tornado,为服务端网络编程提供简洁而高效的接口,非常易于使用. Echo Server void onConnEvent(co ...
- 【ZeroMQ】2、高性能的通讯库-zeroMQ
首先,让我来介绍一下什么是ZMQ(全称:ZeroMQ): 官方: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加 ...
- 超轻量级、高性能C日志库--EasyLogger
[ 声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:armink.ztl@gmail.com] EasyLogger 1. 介绍 EasyLogger 是一款超轻量级(ROM<1.6K, ...
随机推荐
- HRBUST1313 火影忍者之~静音 2017-03-06 16:11 39人阅读 评论(0) 收藏
火影忍者之-静音 传说中的火之国一年一度的公务员选拔又开始了!木叶忍者村此次也要从中选拔出5人来,作为即将上任的新火影纲手的小弟-,可是报考公务员的人数实在是太--多啦!所以纲手的贴身随从-静音小姐, ...
- B-spline Curves 学习前言与动机(1)
B-spline Curves 学习之前言 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http:// ...
- C++ 的Tool工具收集
C++ 的Tool工具收集 1. muparser - Fast Math Parser Library 数学公式解析函数,开源工具库 网址: http://muparser.beltoforion. ...
- Java异常封装
转载: Java异常封装 Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. ...
- Android-Activity启动模式(launchMode)
Activity启动模式是非常重要的一块内容,启动模式直接关系到用户的体验 和 性能的提升等 Activity启动模式分为四种: 如果不配置:launchMode,默认就是:standard 标准的 ...
- Hadoopd 单元测试-MPUnit
Apache 版: 官网:http://mrunit.apache.org 教程:https://cwiki.apache.org/confluence/display/MRUNIT/MRUnit+T ...
- linux查看占用内存多的进程
update一个简单的方法 ps aux | sort -k4nr | head -10 ps -e -o "%C : %p : %z : %a"|sort -k5 -nr|h ...
- java基础--配置环境变量的意义
0.jre和jdk jre(java runtime environment) 运行java程序要用的Java运行环境 jdk:java开发人员要用的java开发环境,包括jre 1.JAVA_HOM ...
- Cesium Language (CZML) 入门2 — CZML Content(CZML的内容)
原文:https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Content 以下是描述CZML文档或者流中可能存在的内容.要解释CZML文 ...
- css细节复习笔记——基本视觉格式化
css包含如此开放.如此强大的一个模型,对于这样一个模型,可以有无数种方法结合应用各种属性,可以得到的效果数不胜数. 基本框 css假定每个元素都会生成一个或多个矩形框,这称为元素框.各元素中心有一个 ...