0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二进制数据压缩算法

PoisonApple 来源:网络整理 2018-02-28 09:31 次阅读

二进制数据压缩算法二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’。‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号“0‘’。‘’1‘’的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

二进制压缩 - 算法

二进制压缩

编程时遇到每个数据只有两种状态,且 dfs 或者 bfs 时遍历时间复杂度高时,可以采用二进制压缩数据,尤其是二维数组。

1.二进制压缩一个二位数组

例如:

-+--

----

----

-+--

正常保存数据回使用二位数组,‘+’ -》 1,‘-’ -》 0,即

0100

0000

0000

010012345678910

如果我们采用二进制压缩为一个 int 类型的数据,正好用 16 位来表示。

这里有两种表示方法,其实都一样,一种先从上到下变为从高位到低位,一种是从上到下变为从低位到高位。

从低位到高位

int input = 0;

int[][] data = new int[4][4];

Scanner sc = new Scanner(System.in);

String line = “”;

for (int i = 0; i 《 4; i++) {

line = sc.next();

for (int j = 0; j 《 4; j++) {

data[dataIn++] = line.charAt(j);

}

}

for (int i = 0; i 《 16; i++) {

if (data[i] == ‘+’) {

input |= (1 《《 i);

// System.out.println(Integer.toBinaryString(input));

}

}1234567891011121314151617

从高位到低位

int input = 0;

Scanner sc = new Scanner(System.in);

String line = “”;

for (int i = 0; i 《 4; i++) {

line = sc.next();

for (int j = 0; j 《 4; j++) {

input = input 《《 1;

input = line.charAt(i) == ‘+’ ? input + 1 : input;

}

}

二进制数据压缩算法

LZFSE

1,zlib和gzip都对deflate进行了封装,比deflate多了数据头和尾

1,苹果开源了新的无损压缩算法 LZFSE ,该算法是去年在iOS 9和OS X 10.10中 引入 的。按照苹果公司的说法,LZFE的压缩增益和ZLib level 5相同,但速度要快2~3倍,能源效率也更高。

LZFSE基于Lempel-Ziv,并使用了 有限状态熵编码,后者基于Jarek Duda在

非对称数字系统(ANS)方面所做的熵编码工作。简单地讲,ANS旨在“终结速度和比率的平衡”,既可以用于精确编码,又可以用于快速编码,并且具有数据加密功能。使用ANS代替更为传统的

Huffman和 算术编码方法的压缩库 越来越多,LZFSE就位列其中。

显然,LZFSE的目标不是成为最好或最快的算法。事实上,苹果公司指出,

LZ4的压缩速度比LZFSE快,而 LZMA提供了更高的压缩率,但代价是比Apple

SDK提供的其他选项要慢一个数量级。当压缩率和速度几乎同等重要,而你又希望降低能源效率时,LZFSE是苹果推荐的选项。

GitHub上提供了LZFSE的参考实现。在MacOS上构建和运行一样简单:

$ xcodebuild install DSTROOT=/tmp/l***se.dst

如果希望针对当前的iOS设备构建LZFSE,可以执行:

xcodebuild -configuration “Release” -arch armv7 install DSTROOT=/tmp/l***se.dst

除了 API文档之外,苹果去年还提供了一个 示例项目,展示如何使用LZFSE 进行块和流压缩,这是一个实用的LZFSE入门资源。

LZFSE是在谷歌 brotli之后发布的,后者在去年开源。与LZFSE相比,brotli 似乎是针对一个不同的应用场景进行了优化,比如压缩静态Web资产和Android APK,在这些情况下,压缩率是最重要的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41248
  • 压缩算法
    +关注

    关注

    1

    文章

    20

    浏览量

    10412
收藏 人收藏

    评论

    相关推荐

    二进制文件写入数据问题

    请各位高手指点下,怎么使在写入二进制文件时,可以接着原文件内容后面写入新数据
    发表于 11-28 17:06

    二进制保存数据

    二进制保存数据 自己编程的一个小程序。
    发表于 08-24 15:23

    二进制数据分割

    请问谁做过二进制数据的分割吗?请各位帮个忙,我正愁死了!
    发表于 09-13 13:58

    LabVIEW如何读取ACCESS中的长二进制数据

    小妹在做一个心电信号发生器 其中从ACCESS数据库中需要读一个WaveData.data 的长二进制数据 这是心电图波形的数据 每个图500个点每个点2字节。怎么才能读出这个长
    发表于 10-26 20:51

    关于Labview中二进制文件的读写

    在LABVIEW中使用二进制读写节点时,遇到一个奇怪的问题,当我通过新建文件创建二进制文件(见第一张图),之后将数据写入到二进制文件中(见第
    发表于 09-30 15:03

    Labview图像二进制转换问题

    `各位大神,我想把一张图片通过变成二进制通过TCP传输,现在我把图片转换成二进制文件,但文件只有1KB大小。我想读取但是不知道二进制的图片数据类型。能否帮我画一个简易的读取
    发表于 12-29 09:26

    如何理解二进制运算规则 二进制是如何运算的

    二进制运算规则二进制的运算算术运算二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位);二进制的减法:0-0=0,10-1=1(向高位借位) 1-0=1,1
    发表于 12-11 17:49

    改进的二进制搜索算法原理是什么?有什么优势?

    改进的二进制搜索算法原理是什么?改进的二进制搜索算法有什么优势?
    发表于 05-20 07:12

    如何丢弃函数的二进制代码填入SRAM的二进制代码?

    应用程序 : 示例代码演示了如何丢弃函数的二进制代码, 然后填入 SRAM 的二进制代码, 然后调用它 。 BSP版本:M451系列BSP V3.01.001 硬件: 任何 M451 系列板块
    发表于 08-23 06:34

    二进制

    二进制   二进制与十进制的区别在于数码的个数和进位规律有很大的区别,顾名思义,二进制的计数规律为逢二进一,是以2为基数的计数体制。10这
    发表于 04-06 23:48 7662次阅读
    <b class='flag-5'>二进制</b>

    二进制编码和二进制数据

    二进制编码和二进制数据   二进制编码是计算机内使用最多的码制,它只使用两个基本符号"0"和"1",并且通过由这两个符号组成的
    发表于 10-13 16:22 4507次阅读

    二进制电平,什么是二进制电平

    二进制电平,什么是二进制电平 在二进制数字通信系统中,每个码元或每个符号只能是“1”和“0”两个状态之一。若将每个码元可能取的状态增
    发表于 03-17 16:51 2271次阅读

    二进制数值数据的编码与运算算法

    二进制数值数据的编码与运算算法 一、原码、反码、补码的定义 1、原码的定义 2、补码的定义
    发表于 04-15 14:42 2575次阅读

    小波算法在监测数据压缩中的应用

    小波算法在监测数据压缩中的应用
    发表于 02-07 18:22 16次下载

    10进制转换为二进制算法

    进制转换为二进制是计算机科学中非常基础且重要的概念之一。在理解和应用计算机科学的基础知识时,掌握这个算法是至关重要的。 在开始讲解十进制转换为二进
    的头像 发表于 01-15 10:32 566次阅读