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的更多相关文章

  1. 高性能的数据压缩库libzling

    libzling(https://github.com/richox/libzling)是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了流行的zlib/gzip.libzling使用的是ROLZ ...

  2. 高性能的数据压缩库libzling-20140324

    libzling(https://github.com/richox/libzling,求观看[watch],求星[star],求叉[fork])是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了 ...

  3. 基于async/non-blocking高性能redis组件库BeetleX.Redis

    BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...

  4. 深入 Go 中各个高性能 JSON 解析库

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/535 其实本来我是没打算去看 JSON 库的性能问题的,但是最近我对 ...

  5. 高性能的JavaScript库---Lodash

    上周在仿做Nodejs社区的时候,遇到了lodash这个javascript库,很惭愧,那也是我第一次听说lodash.人嘛,对于新鲜的事物总是会或多或少感到些好奇的,于是就毫不犹豫地去lodash官 ...

  6. 高性能 Java 缓存库 — Caffeine

    http://www.baeldung.com/java-caching-caffeine 作者:baeldung 译者:oopsguy.com 1.介绍 在本文中,我们来看看 Caffeine - ...

  7. 发布一个参考tornado的高性能c++网络库:libtnet

    libtnet是一个用c++编写的高性能网络库,它在设计上面主要参考tornado,为服务端网络编程提供简洁而高效的接口,非常易于使用. Echo Server void onConnEvent(co ...

  8. 【ZeroMQ】2、高性能的通讯库-zeroMQ

    首先,让我来介绍一下什么是ZMQ(全称:ZeroMQ): 官方: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加 ...

  9. 超轻量级、高性能C日志库--EasyLogger

    [ 声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:armink.ztl@gmail.com] EasyLogger 1. 介绍 EasyLogger 是一款超轻量级(ROM<1.6K, ...

随机推荐

  1. Kinect相机位姿

    可以直接得到吧 还是要反求 pose.txt 里面一共有5个七参数.正好对应5幅图片.

  2. handsontable-cell features

    数据验证:在columns中设置validator,进行同步或异步验证,还可添加beforeValidate, afterValidate函数,allowInvalid:true可以不用验证 var ...

  3. 如何注册GitHub

    一.个人介绍 姓名:张志龙 学号:1413042026 班级:网工141 爱好:宅物 能力:c++编程 二.注册 注册GitHub其实很简单 首先我们要做的是打开官网 www.github.com(如 ...

  4. 在TFS 2013的迭代视图中修改工作项数目限制

    当TFS迭代中的工作项数目超过500时,在TFS的网页(Web Access)显示中就会出现红色警告提示"积压工作(backlog)中的项数超出配置的限制500.当前总数为529-.&quo ...

  5. JObject使用

    1.首先需要引用Json.NET\Newtonsoft.Json.dll程序集. 2.Page页 function saveUser() { var param = { id: , name: '张三 ...

  6. 基于pscp批量分发文件

    用法: pscp -h 目标ip文件 本地文件路径 远程路径 pscp -h hosts.ip file.txt ~/

  7. Bootstrap模态框modal的高度和宽度设置

    (1)高度 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的高度不会发生变化 如下图所示 ...

  8. C# superGridControl 样式设置、加载数据、获取数据

    样式设置 superGridControl1.PrimaryGrid.SelectionGranularity = SelectionGranularity.Cell; //设置选中样式 单元格.整列 ...

  9. ashx、aspx、ASP.NET MVC

    ashx:ProcessRequest(IHandler的方法)aspx:Page_Load(Page继承IHttpHandler)(RouteHandler)(HttpHandler)(MvcHan ...

  10. String类的操作方法

    因String属于java核心包lang包的东西,所以不需要导包! /* * 字符串操作 * */ String name = "jck"; String name1 = &quo ...