1 二进制数据压缩算法-德赢Vwin官网 网
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,在这些情况下,压缩率是最重要的。

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

    关注

    2

    文章

    795

    浏览量

    41643
  • 压缩算法
    +关注

    关注

    1

    文章

    21

    浏览量

    10494
收藏 人收藏

    评论

    相关推荐

    鸿蒙二进制数组创建

    背景 c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。 接口
    的头像 发表于 01-31 15:24 1263次阅读

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

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

    二进制相对调相(二进制差分调相2DPSK)的工作原理

    二进制相对调相(二进制差分调相2DPSK)的工作原理
    发表于 10-21 13:01 3204次阅读
    <b class='flag-5'>二进制</b>相对调相(<b class='flag-5'>二进制</b>差分调相2DPSK)的工作原理

    二进制

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

    二进制时钟电路

    二进制时钟电路
    发表于 09-11 11:22 3111次阅读
    <b class='flag-5'>二进制</b>时钟电路

    二进制编码和二进制数据

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

    什么是二进制计数器,二进制计数器原理是什么?

    什么是二进制计数器,二进制计数器原理是什么? 计数器是数字系统中用得较多的基本逻辑器件。它不仅能记录输入时钟脉冲的个数,还可以实现
    发表于 03-08 13:16 3.1w次阅读

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

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

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

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

    二进制加法程序【汇编版】

    二进制加法程序【汇编版】二进制加法程序【汇编版】二进制加法程序【汇编版】二进制加法程序【汇编版】
    发表于 12-29 11:02 0次下载

    二进制加法程序【C语言版】

    二进制加法程序【C语言版】二进制加法程序【C语言版】二进制加法程序【C语言版】二进制加法程序【C语言版】
    发表于 12-29 11:03 0次下载

    二进制数据及取值范围的计算方法

    本文介绍二进制数据的相关知识,如定义、取值范围计算、转换为十进制的方法以及一些常见位数的二进制数据的取值范围等。
    的头像 发表于 11-08 15:48 2167次阅读
    <b class='flag-5'>二进制</b><b class='flag-5'>数据</b>及取值范围的计算方法

    10进制转换为二进制算法

    10进制转换为二进制是计算机领域中非常重要的一个问题。在计算机中,所有的数据都是以二进制形式进行存储和处理的。因此,我们常常需要将10进制
    的头像 发表于 01-11 09:14 2343次阅读

    10进制转换为二进制算法

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

    二进制编码器工作原理 如何选择二进制编码器

    二进制编码器是一种数字电路,它将输入的二进制代码转换为对应的输出信号。在数字系统中,编码器用于将数据从一种形式转换为另一种形式,以便于处理和传输。 二进制编码器工作原理 输入与输出关系
    的头像 发表于 11-06 09:44 642次阅读