• 高性能的数据压缩库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模型也能保证较高的准确率。

  • 相关阅读:
    nginx 正向代理 反向代理 负载均衡
    nginx配置文件常用基本配置指令
    92)http 和https协议入门
    tp6--nginx下pathinfo配置
    tp6省略url里的index.php
    echarts鼠标移上去显示数据
    composer 下载thinkphp6失败
    tp5写入cookie失效
    4.15 Spring Cloud理论基础
    4.14 SpringBoot理论基础
  • 原文地址:https://www.cnblogs.com/richselian/p/5106467.html
Copyright © 2020-2023  润新知