minekirito的个人博客分享 http://blog.sciencenet.cn/u/minekirito

博文

数据压缩算法——无损压缩

已有 5114 次阅读 2019-2-11 14:18 |个人分类:数据压缩算法研究|系统分类:科研笔记| 数据压缩, Huffman, RunLength

    空间复杂度是指算法在计算机内执行时所需存储空间的度量,如果想要降低算法的空间复杂度,则必须要压缩它所需的存储空间。

    在算法执行期间所需要的存储空间中:输入的初始数据所占的存储空间一般来说是最大的(大数据背景下),也是最值得做数据压缩的。

数据压缩其实就是对数据进行编码的过程,它能够减少存储空间和网络传输时间。

    无损压缩:简单的说就是压缩过程中重复数据会被删除,解压的时候会被再添加进来。无损压缩不能忍受任何数据丢失,多数用于法律或医学类文档、计算机程序等重要类文档;

    常见的无损压缩方法有RunLengthEncoding、Lempel-Ziv-WelchEncoding(LZW)、HuffmanEncoding。


    RunLengthEncoding: 行程长度压缩法即根据字符串的连续重复字符进行编码的一种方法。算法原理极其简单(时间复杂度O(n)),对于连续重复的字符压缩效果很好。但是如果没有连续重复字符呢。。。。。。

    例子:

    Input:AAAAABBB,ABC

    Ouput:A5B3,A1B1C1


    HuffmanEncoding:霍夫曼编码使用变长编码表对字符进行编码,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,编码之后的字符串的平均长度和期望值都较低。

    具体步骤:

    1)将信源符号的概率按减小的顺序排队。

    2)把两个最小的概率相加,并继续这一步骤,始终将较高的概率分支放在右边,直到最后变成概率1。

    3)画出由概率1处到每个信源符号的路径,顺序记下沿路径的0和1,所得就是该符号的霍夫曼码字。  

    4)将每对组合的左边一个指定为0,右边一个指定为1(或相反)。

    例子:

    Input:BABACAC ADADABB CBABEBE DDABEEEBB

    Output:1110111001010010 1001110011101111 010111011001100 01101110110000001111


    霍夫曼编码的核心思想就是让出现次数多的元素被较短的编码代替,但是在源符号集的概率分布不是2负n次方的形式,则无法达到熵极限,并且译码复杂,使用时要具体问题具体分析。

    关于LZW算法国内有很多论文做了研究,待我整理之后再做介绍。




https://blog.sciencenet.cn/blog-3401624-1161649.html

上一篇:数据挖掘领域必须熟悉的十大经典算法其一——Apriori算法
下一篇:Quality Attribute Workshop 综述
收藏 IP: 180.212.248.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-14 15:35

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部