首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ZIP压缩算法详细分析及解压实例解释(下)

,尤其是对英文文本编码的时候,非ASCII字符就根本不会出现,length较大的值出现概率也很小,所以出现大段的0是很正常的;对于distance也类似,也可能出现大段的0。...什么叫游程呢?就是一段完全相同的数的序列。什么叫游程编码呢?说起来原理更简单,就是对一段连续相同的数,记录这个数一次,紧接着记录出现了多少个即可。...因为CL的范围是0-15,PK认为重复出现2次太短就不用游程编码了,所以游程长度从3开始。...因此,这里实际上只出现了两种重复字符串的长度,即3和4。回顾这个图可以更清楚: ?...对于上面这个例子,标准LZ77在滑动窗口中查找最长匹配字符串,找到的是”the”与前面的there的前三个字符匹配,这种贪婪解析方式逻辑简单,但编码效率不一定最高。

2.8K60

jpeg编码学习笔记

通常JPEG文件相对于原始图像,能够得到1/8的压缩比,如此高的压缩率是如何做到的呢?...所以说JPEG是有损编码。 4.zig-zag游程编码 量化后的数据还可以进行简化,更大程度的去压缩。 ? 根据上面的zig-zag表重排数据的过程: ?...根据ZigZag表的规则对量化后的数据进行重排后的结果中可以看到出现连续的多个0,这样有利于进行游程编码。...100 101 如果根据字符出现的概率,使用如下的编码 字符 A B C D E 编码 100 0 1110 10 1111 那么这段文字共需要3x6 + 1x15 + 4x2 + 2x9...,…,0 根据RLE编码(游程编码)规则 1、用固定的4位来存储重复的数量,所以最多重复内容可以记录数量为15,超过15次要进行分段处理; 2、只将0作为重复的内容,每个数值记录前面有多少重复的

2.2K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    15.计算机科学导论之数据压缩学习笔记

    (1) 游程长度编码 它是最简单的压缩方法,可以用来压缩由任何符号组成的数据,它不需要知道字符出现频率的有关知识(赫夫曼编码则需要),并且当数据中由0和1表示时,该方式编码十分有效。...总结:在游程长度编码中,重复出现的符号被该符号和表示该符号重复的数字所替换。 (2) 赫夫曼编码 赫夫曼编码是一种数据压缩编码技术,它利用变长编码来将信息转换成可编码的数据序列。...它把比特表示为0或1,然后根据给定信息的出现次数以及其他一些给定的因素,来定义不同的编码长度。 例如,如果给定信息出现频率较高,则可以使用更短的编码,而较低频率的信息可以使用更长的编码。...温馨提示: 首先,出现频率高的字符(A、D和E)的编码要比出现频率低的字符(B和C)的编码短(层级少),此处可以通过比较分配给各个字符的编码适当的位长度看出。...总结: 在赫夫曼编码中,编码的长度是符号频率的函数,出现频率越高的符号相对于出现频率较低的符号编码长度越短(层级更浅)。

    1K20

    VBA解压缩ZIP文件02——压缩过程

    length和distance是成对出现的,就是用2个数字来代表一些Byte,比如(仅仅是举例说明原理): ? 后面的10个长度字符,就是2个数字代表了,这样就达到了压缩效果。...同时,将长度3-258分成了29个区间: ? 只记录length所在的那个区间,目的是减少需要记录的数字个数。...就是使用游程编码对CL1和CL2中的数字进行了进一步的压缩,主要的思想就是用1个特殊的数字来代表N个重复的数字。...,还需要通过游程编码还原为Code Length)。...04 CCL的再处理 得到CCL的0-18的数字之后,ZIP中认为数字出现的频率不一样,把可能出现0次的数字排到后面的话,就可能只需要记录前面数字的次数,没有出现次数的数字就不需要记录了,所以CCL数组的顺序进行了一个转换

    2.2K20

    m序列的verilog实现

    由于反馈的存在,若初始状态为0,则移位后得到的结果仍全为“0”,因此应该避免全“0”状态,除全“0”状态外,剩下2^n-1种状态可用,每移位一次,就出现一种状态,在移位若干次之后,一定重复出现前某一状态...为了满足不同要求下的反馈线长度,可通过设置状态转移公式实现。(公式马上就来)。 二、m序列性质 1、随机性:在m序列的一个周期中,0和1出现的概率大致相同,0码只比1多一个。...游程长度指的是游程中元素的个数。在m序列中,一共有个游程。...其中长度为1的游程占总游程数的一半;长度为2的游程占总游程的1/4;长度为k的游程占总游程数的,且在长度为k的游程中,连0与连1的游程数各占一半。...另外,还有一个长度为n的1游程和一个长度为(n一1)的0游程。 三、结构图 ? ?

    2.7K30

    数据压缩----游程编码

    比特流中最简单的冗余形式是一串重复的比特,利用这种冗余来压缩数据的经典方法是游程编码。...因为0和1总是交替出现的,我们只要表示出游程长度即可。上面的比特流可用游程编码压缩为:1111011101111011(15=1111,7=0111,7=0111,11=1011)。...为了有效地实现该压缩方法,需要回答下面三个问题: 应该用多少比特记录游程长度? 某个游程长度超过了能够记录的最大长度怎么办? 当游程长度所需的比特数小于记录长度的比特数怎么办?...这些问题的回答是: 游程长度应该在0-255之间,使用8位编码; 在需要的情况下使用长度为0的游程来保证所有游程的长度小于256; 较小的游程也会编码,虽然这样可能使输出变得更长。...游程编码被广泛使用于保存图像和扫描文档。不适用于比特流不含较长游程的情况(比如典型的英文文档)。

    1.8K00

    我从来不理解 “压缩算法”,直到有人这样向我解释它

    ,从而简化代码里字符的排列组合,于是就出现了各种各样的压缩算法 比如:游程编码,字典算法,哈夫曼编码。。。...=> 6b3y5t1e3d3a2n7c4e 可以用重复的次数加上字符本身来进行压缩,这段本身要占34位字符的数据就被压缩成了只有18个字符位的数据,减少了16个字符的位置 这种最简单的压缩方式就是游程编码...(Run Length Encoding,RLE)但是这个算法有个很大的缺点,如果没有成堆出现的重复字符,在经过游程编码压缩后,最坏的情况,压缩后的文件甚至是压缩前大小的两倍 字典算法将文件中出现频率比较高的单词拿出来...18 如果要对这组数据使用哈夫曼编码进行压缩,首先根据这些数字出现的次数排列 50,18,1,20,25,32 把它们看成一个个节点,节点下面的蓝色是该数字出现的次数 ?...首先找到出现次数最小的两个节点,左边支路为0,右边为1 ? 把这俩节点看成一个新的节点,出现的次数就是两个节点出现次数的和 ? 再找到出现次数最小的两个节点,重复上面的步骤 ? ? ? ? ?

    5.8K31

    伪随机序列——m序列及MATLAB仿真

    这就意味着在这种反馈移存器中应该避免出现全 “0” 状态,否则移存器的状态将不会改变。因为 4 级移存器共有 2^4=16 种可能的状态。除全 “0” 状态外,只剩 15 种状态可用。...例如,在上图中给出的 m 序列可以重写为: 在其一个周期(m 个元素)中,共有 8 个游程,其中长度为 4 的游程有一个,即 “1 1 1 1”,长度为 3 的游程有一个,即 “0 0 0”,长度为...2 的游程有两个,即 “1 1” 和 “0 0”,长度为 1 的游程有 4 个即两个 “1” 和两个 “0” 一般说来,在 m 序列中,长度为 1 的游程占游程总数的 1/2;长度为 2 的游程占游程总数的...由 m 序列产生器的分析可知,一个 n 级 m 序列产生器只可能有 (2^n-1) 种不同的状态。但是 n 级移存器最多可有 2^n 种状态,在 m 序列中不能出现的是全 “0” 状态。...它满足 m 序列的前两个: 在 M 序列的一个周期中,出现 “0” 与 “1” 的数目相等 在 n 级 M 序列的一个周期中,游程共有 2^{n-1} 个,其中长度为 k 的游程占 1/2^k

    3.5K60

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。...================================ 关于此类的题目,提取有效信息,有序数组,应该想到利用双指针来进行处理; 我们需要跳过重复的元素,然后遇到非重复元素进行覆盖操作 解法1....1 public static int removeRepeat(int[] array){ 2 int len = array.length; 3 int temp...array[++temp] = array[i]; 11 } 12 13 } 14 15 return temp+1;...; 注意,hashmap是非顺序存储的,我们需要保证数组的有序排列,所以需要用到有存储顺序的linkedhashmap进行存储 这个实现有点慢,好歹也是自己第一次的解题思路,多一种思路未尝不可 1 public

    1.7K40

    Parquet存储的数据模型以及文件格式

    一个32位整数的list由数据类型为int32且重复数为required(必须出现一次)的元素字段构成。...文件尾的最后两个字段分别是一个 4 字节字段(其中包含了文件尾中元数据长度的编码)和一个 PAR1(与文件头中的相同)。...Parquet 会使用一些带有压缩效果的编码方式,包括差分编码(保存值与值之间的差)、游程长度编码(将一连串相同的值编码为一个值以及重复次数)、字典编码(创建一个字典,对字典本身进行编码,然后使用代表字典索引的一个整数来表示值...在写文件时,Parquet 会根据列的类型自动选择适当的编码方式。例如,在保存布尔类型时,Parquet 会结合游程长度编码与位紧缩法。...由于这两个数都是很小的整数(最大值取快于模式指定的嵌套深度),因此使用位紧缩法与游程长度编码可以非常有效地进行编码。

    28310

    算法科普:有趣的游程编码

    那么,根据这样的规则,图 1 的图形编码就变成了 25 个字母,如图 2 所示。 图 2 接下来,我们通过使用 游程编码 的方式来表示这个图像,以便使用 25 个字符以下的字符来表示。...图 4 观察图 4 的图像与对应的代码,可以发现:虽然使用 游程编码 使得总体的字符数减少,但对于那些不具备相同颜色的部分,在进行游程编码后,字符数反而会增加。...图 5 特别的,如果对连续性极其差的数据进行游程编码,字符数不减反增:数据翻倍到 50 个字符了。 当然,对于具有连续性的数据进行游程编码,那压缩量就十分可观了。...按照这样的逻辑,一开始只需要 25 个字符就能表示完毕。 如果使用 游程编码,那么最终的表达结果是需要 26 个字符表示。所以,在这种情况下,使用 游程编码 是没有意义的。...因此,在连续的白色方块之后必定出现的是黑色方块。那么即使没有字母 W 和字母 B,依旧可以通过代码还原恢复图像。

    1.2K20

    java语言代码大全_java新手入门-java新手代码大全

    思路1:递归算法对于没有重复值的情况固定第一个字符,递归取得首位后面的各种字符串组合;再把第一个字符与后面每一个字符交换,并同样递归获得首位后 下面给大家带来的内容是在一个字符串中找出第一个只出现一次的字符的...题目:在一个字符串(0字符串长度只出现一次的字符,并返回它的位置, 假如没有就返回 -1(要区分大小写)。...思路1:hash充分的利用每一个字母的ASCII码作hash来作为数组的index。先用一个58长度的数组来存储每个字母出现的次数。为什么是58?...题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例:当字符流中只读出前两个字符”go”的时候,第一个只出现一次的字符是”g”。...当从这个字符流中读出前六个字符“google”的时候,第一个只出现一次的字符是”l”。输出描述:在当前字符流没有存在出现一次的字符,返回#字符。

    1.3K10

    JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

    一般采用的采样比例是2:1:1或4:2:2。由于在执行了此项工作之后,每两行数据只保留一行,因此,采样后图像数据量将压缩为原来的一半。...另一个特殊符号是指零游程长度(zero-run-length,ZRL),用来表明16个零游程。基线JPEG允许的零游程最大长度是16个。如果这里的零超过16个,那么这个游程分成几个长度为16的零游程。...其中第一个部分是一个特殊的数据,它用来标识是否是 Exif, 其值是ASCII 字符 "Exif" 和 两个0x00字节 的组合字符串.在 APP1 标记域的后面是, 跟随着其他的 JPEG 标记exif...取这个长度的数据解析为TIFFdata数据,exif直接解析为字符串貌似也没有问题。 ...请注意上面中的 "数据内容" 中包含他前面的数据大小描述符, 如果下面的是一个标记的话;这个长度的表示方法是按照高位在前,低位在后的,与 Intel 的表示方法不同。

    1.7K10

    基于游程法的二值图像Blob 分析算法

    简单来说,本文采用步进式动态扫描方式,每个游程仅需扫描一次,且不必与相邻行的所有游程进行比较, 算法的搜索空间得到压缩; 游程连通性比较的分支少,简化了判断过程, 提高了操作效率; 所设计的游程及目标对象的数据结构允许由任一游程节点快速访问其所属链表的首部和尾部...如一致, 无需进行任何操作; 否则意味着出现标记冲突, 应合并两个链表, 为此执行下列操作: a) 将当前游程所在的链表挂接到参考游程所在链表的尾部: ( * RLE( k').ppB).pt.pn ←...索引数组, 将所有指向当前游程合并前所属 BLOB 的索引值修改为指向参考游程所属的 BLOB; 同时从BLOB 链表中删除当前游程在合并前所属的 BLOB 节点。...第 5 步 更新 k 和 k'的值: 若上行参考游程像素终止位置不在 当 前 游 程 像 素 终 止 位 置 右 边, 即 RLE ( k ).e ≥RLE( k').e,则将 k 加 1; 若参考游程像素终止位置不在当前...3) 该算法可进一步扩展为一次处理三行, 即当前行游程同时与上下两行中的游程进行比较, 其实质是对整幅图像的游程编码仅进行隔行扫描, 可进一步减少同一游程的被访问次数。

    1.9K60

    JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

    一般采用的采样比例是2:1:1或4:2:2。由于在执行了此项工作之后,每两行数据只保留一行,因此,采样后图像数据量将压缩为原来的一半。...第一个特殊符号指的是块的结束(end-of-block,EOB),用来表明在之字形块中剩余的元素都是零。另一个特殊符号是指零游程长度(zero-run-length,ZRL),用来表明16个零游程。...基线JPEG允许的零游程最大长度是16个。如果这里的零超过16个,那么这个游程分成几个长度为16的零游程。...取这个长度的数据解析为TIFFdata数据,exif直接解析为字符串貌似也没有问题。 ...请注意上面中的 "数据内容" 中包含他前面的数据大小描述符, 如果下面的是一个标记的话; 这个长度的表示方法是按照高位在前,低位在后的,与 Intel 的表示方法不同。

    3.6K11

    干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

    enumSeason{ Spring,Summer,Fall,Winter;} 3.1.2 游程编码 游程编码(Run-length encoding,RLE)是一种无损压缩数据的编码方式...若数据存在大量的数据连续且重复的情况,就可以考虑使用RLE以降低内存。 比如,一个内部存储了4个连续的a与6个连续的b的字符串经过游程编码后为a4b6。那么,该字符串长度就从10字节减少至4字节。...1)使用位图编码对可枚举字段进行数据压缩 我们将房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举的字段进行了位图编码,大幅降低了单个实体的占存大小。...在实际处理过程中,我们会先将房型数据实体进行序列化后转换为MD5,在房型字典中只存储MD5编码,而实体字典中存储MD5到实际房型信息实体的关系。...1)使用字典编码对每日重复的价格信息进行编码 首先,将所有该房型上出现的价格提取并存储到一个价格数组上,在数据字典里则存储实际价格数据在价格字典的索引。

    1.2K20

    干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

    enumSeason{ Spring,Summer,Fall,Winter; } 3.1.2 游程编码 游程编码(Run-length encoding,RLE)是一种无损压缩数据的编码方式...若数据存在大量的数据连续且重复的情况,就可以考虑使用RLE以降低内存。 比如,一个内部存储了4个连续的a与6个连续的b的字符串经过游程编码后为a4b6。那么,该字符串长度就从10字节减少至4字节。...1)使用位图编码对可枚举字段进行数据压缩 我们将房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举的字段进行了位图编码,大幅降低了单个实体的占存大小。...在实际处理过程中,我们会先将房型数据实体进行序列化后转换为MD5,在房型字典中只存储MD5编码,而实体字典中存储MD5到实际房型信息实体的关系。...1)使用字典编码对每日重复的价格信息进行编码 首先,将所有该房型上出现的价格提取并存储到一个价格数组上,在数据字典里则存储实际价格数据在价格字典的索引。

    1.1K30

    FTP协议的数据传输模型和相关命令说明

    第二种块模式是指,将要传输的数据切割成长度固定的若干部分,每个部分在发送时使用包头等字段进行封装,使得发送的数据块相互间形成独立的数据包。包头含有三字节字段,分别表示块的长度以及其他相关数据。...它使用游程编码对发送数据进行压缩,同时将压缩相关信息以包头字段的方式进行组织,这样对方收到后知道如何对数据进行解压缩,因此压缩模式使用包头+数据体的方式进行数据的组织发送。...我们在实践中只考虑情况一和三,对于情况一,协议要负责把文件结尾的符号根据系统进行修改,情况二中的图像文件不仅仅包括图像,像zip文件这类有同一格式的文件都属于图像。...第二种是传输控制命令,它用于双方协定数据如何传输,例如设置传输文件的类型,设定主动或被动传输模式;第三是FTP服务命令,这些命令用于发起数据传输,修改或删除文件等等。...将指定文件改名为指定名称 ABOR 取消命令 通知服务器取消执行上一次发送的命令 DELE 删除 通知服务器删除某个文件 RMD 删除目录 通知服务器删除整个目录 MKD 创建目录 通知服务器创建一个新目录

    2K11

    JPEG编码和解码

    2.6 使用行程长度编码(RLE)对交流系数(AC)进行编码 所谓游程长度编码是指一个码可以同时表示码的值和前面有几个零。...例:图中按Z字形抽取和游程编码得到码值为 ? (0,1,0)(1,2,0)(0,5,0)(0,4,0)(4,8,1)EOB 这样一个4*4的矩阵用很少的数值就能表示!...哈夫曼的编码方法:对出现概率大的符号分配短字长的二进制码,对出现概率小的符号分配长字长的二进制码,得到符号平均码长最短的码。 哈夫曼编码的步骤:(1)....完成以上概率顺序排列后,再反过来逐步向前进行编码,每一次有二个分支各赋予一个二进制码,可以对概率大的赋为零,概率小的赋为1。...关于AC/DC系数的编码 1.AC系数的Huffman编码 经过Z扫描和游程编码后的非零AC系数被表述为符号A和符号B。

    3.5K20
    领券