CN106560010B - Vlsi高效霍夫曼编码设备和方法 - Google Patents
Vlsi高效霍夫曼编码设备和方法 Download PDFInfo
- Publication number
- CN106560010B CN106560010B CN201580037485.4A CN201580037485A CN106560010B CN 106560010 B CN106560010 B CN 106560010B CN 201580037485 A CN201580037485 A CN 201580037485A CN 106560010 B CN106560010 B CN 106560010B
- Authority
- CN
- China
- Prior art keywords
- code
- huffman
- length
- canonical
- huffman code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4056—Coding table selection
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4062—Coding table adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6041—Compression optimized for errors
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6047—Power optimization with respect to the encoder, decoder, storage or transmission
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6058—Saving memory space in the encoder or decoder
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明揭示了一种基于霍夫曼译码的压缩算法,其适于容易使用VLSI设计来实施。可以处理数据文件以例如根据述LV算法用包含偏移和长度的复制命令替换重复数据。接着可对于所述文件的一些部分生成霍夫曼码。所述霍夫曼码生成用于数据文件中的文字的霍夫曼码长度,而无需首先将文字统计数据排序。可以将所述霍夫曼码长度限制为不比最大长度长,并且可以修改所述霍夫曼码以提供可接受的溢流概率并且所述霍夫曼码可以采用规范次序。可以将文字、偏移和长度分别编码。可以向有限数目的二进制数指派用于这些数据集的不同值以生成用于生成霍夫曼码的使用统计数据。
Description
技术领域
本发明涉及用于数据的无损压缩的系统和方法。
背景技术
霍夫曼译码是用于无损数据压缩的一种熵编码算法(见D.A霍夫曼(D.A.Huffman),“用于构造最小冗余代码的方法(A method for the construction ofminimum-redundancy codes)”,Proc.IRE 40(9),第1098-1101页,1952年)。霍夫曼译码是指使用可变长度代码表编码源文字(例如文件中的字符),其中已基于源文字的每个可能值的估计出现概率以特定方式导出可变长度代码表。霍夫曼译码使用特定的方法挑选每个文字的表示,从而得到前缀码(有时被称作“无前缀代码”,也就是说,表示一些特定文字的位串从不是表示任何其它文字的位串的前缀),其使用比用于较不常见的源文字更短的位串来表达最常见的源文字。霍夫曼能够设计这种类型的最高效的压缩方法:当实际文字频率与用于创建代码的文字频率一致时,没有其它个别源文字到唯一位串的映射将产生更小的平均输出大小。下文描述霍夫曼算法的伪代码。
算法1:计算二进制霍夫曼码
输入:N对(文字、计数/概率)的集合。
输出:N对(文字,霍夫曼码)的集合。
1-通过减小的计数将文字集合排序。
2-选择2个最不可能的文字,并且分别向每个文字指派位0和1。
3-通过为选定文字的计数求和的复合文字替代选定文字,并且将其重新顺序。
4-当剩余的文字多于一个时,进行步骤到6。
5-选择两个最不可能的文字,并且分别附加0和1。
6-通过为选定文字的计数求和的复合文字替代选定文字,并且将其重新顺序。
7-通过聚合位的级联给出每个文字的霍夫码。
以上霍夫曼树在译码方案的实施方案中引入两个关键的低效因素。首先,树的每个节点必须存储对其子节点的参考或对其表示的文字的参考。这在存储器使用方面成本很高,并且如果在源数据中存在高比例的唯一文字,则代码树的总大小可能占据大量的整体经编码数据。第二,穿越树的计算成本很高,因为在读入经编码数据中的每个位时,需要算法随机跳转通过存储器中的结构。
规范霍夫曼码通过用清晰的标准化格式生成代码解决这两个问题;依次向给定长度的所有代码指派其值。这表示不是存储代码树的结构以用于解压缩,而是仅仅需要代码的长度,从而减小了经编码数据的大小。另外,因为代码是顺序的,所以可以显著简化解码算法,从而使得解码算法在计算方面是高效的。
在给定以递增次序通过霍夫曼码长度(通过L指示)排序的文字列表的情况下,以下伪代码将打印规范霍夫曼码本:
算法2:通过位长度计算规范霍夫曼码
输入:经排序(Si,Li),i=0,1,2,...,N-1
输出:经排序(Si,Ci),i=0,1,2,...,N-1
设置C0=0
对于i=0,1,...,N-2,进行:
设置
软件压缩是众所周知的,并且用于GZIP之类程序的源代码在公共领域中容易获得。在给定GZIP压缩是基于DEFLATE算法和霍夫曼译码的情况下,对于高带宽应用,实施压缩的算法在硬件中执行起来相对复杂(DEFLATE压缩数据格式规范版本1.3.IETF,1996年5月,第1页,摘要章节.RFC 1951.2012年11月11日检索)。压缩背后的概念是稍后在数据流中更早出现的数据流中使用复制命令。因此,所有压缩实施方案都需要搜索历史缓冲器和某个类型的比较长度函数来确定可用于复制命令的最长长度。一种在先前历史中实施搜索匹配的方法是实施散列函数,其将可变长度串映射成固定值,所述固定值可以用于比较正在压缩的数据流。对所述数据进行散列运算并且根据Lempel-Ziv算法或可比算法比较以生成复制或文字命令(泽甫J.、兰珀尔A.(Ziv,J.;Lempel,A.)(1978).“经由可变速率译码对个别序列的压缩(Compression of individual sequences via variable-rate coding)”,IEEE信息理论学报(IEEE Transactions on Information Theory),24(5):530)。一旦收集了有待压缩的数据的统计数据,接着将统计数据霍夫曼编码,然后压缩以发出。
霍夫曼译码并不是如上所述在硬件中实施的简单算法。本文中所揭示的系统和方法提供了一种使用超大规模集成(VLSI)电路实施规范霍夫曼译码的改进的方法。
附图说明
为了使得将容易理解本发明的优点,将参照附图中所图示的具体实施例呈现对上文简述的本发明的更具体的描述。在理解这些图式仅描绘本发明的典型实施例且因此不应认为其限制本发明的范围的情况下,将通过使用附图来以额外特异性和细节来描述并解释本发明,在附图中:
图1是适合于实施根据本发明的实施例的方法的计算机系统的示意性框图;
图2是根据本发明的实施例的用于霍夫曼编码的VLSI高效实施方案的组件的示意性框图;
图3是根据本发明的实施例的同时排序和生成输入文件的霍夫曼码长度的方法的过程流程图;
图4是根据本发明的实施例的用于将规范霍夫曼位长度归一化成指定长度的方法的过程流程图;以及
图5是根据本发明的实施例的用于对数据文件进行霍夫曼编码的方法的过程流程图。
具体实施方式
将容易理解,本文中在图中总体描述和图示的本发明的组件可以用多种多样的不同配置来布置和设计。因此,图中表示的本发明的实施例的以下更详细描述并不意图限制所要求的本发明的范围,而是仅表示根据本发明的当前设想的实施例的某些实例。参照图式将最好地理解当前所描述的实施例,其中通篇中用相同数字标示相同部分。
已响应于技术现状并且具体来说响应于本领域中通过当前可用的设备和方法尚未完全解决的问题和需要研发了本发明。因此,已研发本发明以提供执行非常适合VLSI实施方案的霍夫曼编码的设备和方法。
众所周知,使用规范霍夫曼码,传输让解压缩器重构霍夫曼树的霍夫曼码长度就够了,此外,可以容易实施构造算法,如背景技术部分中所论述。在这个部分中,下面的系统和方法提供一种计算霍夫曼码长度的改进的实施方案。具体来说,所揭示的系统和方法具有两个方面。第一方面将霍夫曼算法变换成更容易使用超大规模集成(VLSI)设计实施。第二方面导出能适应硬件的算法来限制最大霍夫曼长度(以便限制用于传输霍夫曼码长度的位数)。
根据本发明的实施例可以具体实施为设备、方法或计算机程序产品。因此,本发明可以采用完全硬件实施例、完全软件实施例(包含固件、驻留软件、微码等)或组合软硬件方面的实施例(在本文中可以全部总称为“模块”或“系统”)的形式。此外,本发明可以采用具体实施在任何有形表达媒体中的计算机程序产品的形式,所述有形表达媒体具有具体实施于媒体中的计算机可用程序代码。
可以利用一或多个计算机可用媒体或计算机可读媒体的任何组合,包含非暂时性媒体。举例来说,计算机可读媒体可以包含便携式计算机磁盘、硬盘、随机存取存储器(RAM)装置、只读存储器(ROM)装置、可擦除可编程只读存储器(EPROM或快闪存储器)装置、便携式压缩光盘只读存储器(CDROM)、光学存储装置和磁性存储装置中的一或多个。在所选的实施例中,计算机可读媒体可包括任何非暂时性媒体,其可以容纳、存储、传送、传播或传递通过或结合指令执行系统、设备或装置使用的程序。
可以一种或多种编程语言的任何组合编写用于执行本发明的操作的计算机程序代码,所述一种或多种编程语言包含例如Java、Smalltalk、C++等等面向对象的编程语言,以及例如“C”编程语言或类似编程语言的常规程序性编程语言。所述程序代码可以作为单独的软件包完全在计算机系统上执行,在单独硬件单元上执行,部分地在与计算机隔开某段距离的远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种场景中,远程计算机可以通过任何类型的网络(包含局域网(LAN)或广域网(WAN))连接到算机,或者可以对外部计算机进行连接(举例来说,使用因特网服务提供方通过因特网)。
下文参考根据本发明的实施例的方法、设备(系统)和计算机程序产品的流程图说明和/或框图描述了本发明。应理解,流程图说明和/或框图中的每个框以及流程图说明和/或框图中的框的组合可以通过计算机程序指令或代码实施。可以将这些计算机程序指令提供到通用计算机、专用计算机或其它可编程数据处理设备的处理器以产生机器,使得经由计算机或其它可编程数据处理设备的处理器执行的指令创建用于实施在流程图和/或框图框中指定的功能/动作的装置。
这些计算机程序指令还可存储于非暂时性计算机可读媒体中,所述非暂时性计算机可读媒体可以指导计算机或其它可编程数据处理设备用特定方式运转,使得存储于计算机可读媒体中的指令产生包含实施在流程图和/或框图框中指定的功能/动作的指令装置的制品。
计算机程序指令也可以加载到计算机或其它可编程数据处理设备上以引起一系列操作步骤在所述计算机或其它可编程设备上执行以产生计算机实施过程,使得在所述计算机或其它可编程设备上执行的指令提供用于实施在流程图和/或框图框中指定的功能/动作的过程。
图1是说明实例计算装置100的框图。计算装置100可以用于执行各种程序,例如本文中论述的那些程序。计算装置100可以充当服务器、客户端或任何其它计算实体。计算装置可以执行本文中论述的各种监视功能,并且可以执行一或多个应用程序,例如本文所述的应用程序。计算装置100可以是多种多样的计算装置中的任一种,例如桌上型计算机、笔记本计算机、服务器计算机、手持型计算机、平板计算机等等。
计算装置100包含一或多个处理器102、一或多个存储器装置104、一或多个接口106、一或多个大容量存储装置108、一或多个输入/输出(I/O)装置110、和显示装置130,其全部耦合到总线112。处理器102包含执行存储于存储器装置104和/或大容量存储装置108中的指令的一或多个处理器或控制器。处理器102还可包含各种类型的计算机可读媒体,例如高速缓冲存储器。
存储器装置104包含各种计算机可读媒体,例如易失性存储器(例如随机存取存储器(RAM)114)和/或非易失性存储器(例如只读存储器(ROM)116)。存储器装置104还可包含可重写ROM,例如快闪存储器。
大容量存储装置108包含各种计算机可读媒体,例如磁带、磁盘、光盘、固态存储器(例如快闪存储器)等等。如图1中所示,特定大容量存储装置是硬盘驱动器124。大容量存储装置108中还可包含各种驱动程序以使得能够从各种计算机可读媒体读取和/或向各种计算机可读媒体写入。大容量存储装置108包含可装卸媒体126和/或非可装卸媒体。
I/O装置110包含各种允许向计算装置100输入数据和/或其它信息或从计算装置100检索数据和/或其它信息的装置。实例I/O装置110包含光标控制装置、键盘、小键盘、麦克风、监视器或其它显示装置、扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其它图像俘获装置等等。
显示装置130包含任何类型的能够向计算装置100的一或多个用户显示信息的装置。显示装置130的实例包含监视器、显示终端、视频投影装置等等。
接口106包含各种接口,其允许计算装置100与其它系统、装置或计算环境交互。实例接口106包含任何数目的不同网络接口120,例如对局域网(LAN)、广域网(WAN)、无线网络和因特网的接口。其它接口包含用户接口118和外围装置接口122。接口106还可包含一或多个用户接口元件118。接口106还可包含一或多个外围设备接口,例如用于打印机、指向装置(鼠标、轨迹垫等)、键盘等等的接口。
总线112允许处理器102、存储器装置104、接口106、大容量存储装置108和I/O装置110以及耦合到总线112的其它装置或组件彼此通信。总线112表示几种类型的总线结构中的一或多种,例如系统总线、PCI总线、IEEE 1394总线、USB总线等。
出于说明的目的,本文中将程序和其它可执行程序组件示出为分立的框,但是应理解,此些程序和组件可以在各种时间驻留在计算装置100的不同存储组件中,并且通过处理器102执行。替代地,本文所述的系统和程序可以在硬件或者硬件、软件和/或固件的组合中实施。举例来说,一或多个专用集成电路(ASIC)可以经编程以执行本文所述的系统和程序中的一或多个。
原始霍夫曼算法中存在两个排序运算。首先,按照计数的降序将文字排序,且然后基于最小的两个的组合计数将消息逐步重新排序。这是不希望的,因为每个都需要专用的硬件设计。等效地,逐步确定两个最不可能的消息即足够,从而消除了这两个排序运算。此外,存在其中一些消息可具有零计数的隐藏场景。这些消息需要从霍夫曼译码中排除。一种自然的方式是首先排除那些不存在的消息,然后执行霍夫曼算法。然而,这要花费额外的步骤来排除,并且文字的原始序列(任意地)缩短(从而必需专用存储器以存储原始序列)。
在一些实施例中,更简单并且均质的方式是在确定两个最小计数时避免挑选零计数。下面给定伪代码。
算法3:计算霍夫曼码长度
输入:(Si,Pi),i=0,1,2,...,N-1
输出:(Si,Li),i=0,1,2,...,N-1
在Si是文字的情况下,Pi是文字Si的计数(例如概率),Li是文字Li的位长度,Ii是逐个地创建的Li 7位代码的映射值。在每次迭代时,合并两个计数值,并且其映射值同样合并并且设置成彼此相等。举例来说,一次能创建0和1值。在下一轮中,合并计数和映射可以与另一文字或另一组合并值的计数和映射值合并。在每次迭代时,向具有两个最低计数的文字或合并值指派另一位。实际上,在左边开始并且继续合并值。在合并之后,映射值Ii表示树的整个分支。当映射值Ii的位长度递增时,具有所述值的所有代码长度的位长度递增。
当计算最优霍夫曼码长度时,我们继续强制长度限制。假设L是最大允许长度。我们首先检验并且强制长度限制。
如果Li>L,则设置Li←L,i=0,1,2,...,N-1。
通过Po指代以因子2L缩放后的溢流概率,数学上
正溢流概率指示所得霍夫曼长度是无效的并且需要通过增加一些长度加以修改以使其非正(零是最优的)。
接着首先通过增加长度值其次通过增加字母顺序(当长度相等时)将长度Li,i=0,1,2,.N.-.,排序1。,这样立即使得能够构建规范霍夫曼码(算法2)。应注意,最大长度满足L=O(logN),可以通过以下方式更高效地实施排序。
算法4:以递增次序对霍夫曼长度排序
在L.L.拉莫尔(L.L.Larmore)和D.S.海茨博格(D.S.Hirschberg)的“用于最优长度受限霍夫曼码的快速算法(A fast algorithm for optimal length-limited Huffmancodes)”(计算机器协会学报,Journal of the Association for Computing Machinery,(37)3,第464-473页,1990年7月)中,作者提出了一种以时间复杂度O(LN)和空间复杂度O(N)计算最优长度受限霍夫曼码的快速算法。然而,所述算法在硬件中实施起来仍然过于复杂。我们接下来提出将Po减小为非正的次优算法,同时维持经排序的顺序(从而使得可以容易构造规范霍夫曼码)。其概念是寻找最晚的长度以便使得将其逐一增加会释放(勉强)足够的概率以抑制Po。下面相对于图4给出算法程序。
算法5:长度受限霍夫曼码的次优构造
j←i-1;
同时i←i+1;}
参看图2,以上算法可以使用所图示的模块植入为单独的电子组件或软件模块。如上所述,本文中所描述的方法容易使用VLSI设计技术实施。
输入文件202可以输入到复制/文字命令产生器204中。可以根据常规重复串消除算法(例如LZ77(和Ziv)或LZ78算法)生成复制/文字命令。如所属领域中已知的,重复串消除处理文件的文字。如果发现文字(一或多个)的串在文件中前面是相同的文字串,则将文字串替换成指示其是复本的旗标以及指示串中的文字数目的长度和指示在文件中离相同文字串的开头(或末尾)往后多远的偏移。在文件中前面不是相同文字的文字可以用不同方式(例如“文字”旗标)标记。在一些情况下,用一位标记文字并且用零位标记复本,或反之亦然。
可以将输入文件202输入到统计产生器206中,输入文件202经过复制/文字命令产生器204处理以包含复制/文字命令(“经处理文件”)。统计产生器为经处理文件中表示的每个文字的例子的数目计数。在一些实施例中,可以针对不同类型的数据生成单独的使用统计数据集。举例来说,可以针对每个文字命令确定使用统计数据(例如为标记为文字的每个文字的出现次数计数)。可以针对每个复制命令确定使用统计数据。可以针对长度值(例如为所表示的每个长度值的出现次数计数)和复制命令的偏移值(例如为所表示的每个偏移值的出现次数计数)确定单独的使用统计数据集。
举例来说,可以针对由FlagRun、偏移、长度和文字组成的LZ命令收集统计数据。FlagRun命令可以是指示后面的字节中的N个应当作为文字处理的命令,由此消除了将每个文字标记为“文字”的需要。可以如2014年5月9日提交的名称为“改进的DEFLATE压缩算法”(IMPROVED DEFLATE COMPRESSION ALGORITHM)的第14/274,364号美国申请案中所述指派FlagRun命令。
可以在许多不同二进制数中收集统计数据以用于动态霍夫曼编码。在一些实施例中,针对每个LZ命令收集的统计数据限于至多16个二进制数。
收集统计数据以生成用于压缩数据流的动态霍夫曼码。使用如图2中所示的两级引擎生成动态霍夫曼码。第一引擎(霍夫曼位长度引擎208)生成将作为压缩标头的一部分发送以用于解压缩的霍夫曼位长度。第二引擎(霍夫曼码生成引擎)强制执行霍夫曼树代码长度,从而使得它并不会长于N位长(例如7、15、31或某个其它值),即使树的深度可能对于动态霍夫曼译码超过N位长也是如此。
霍夫曼码生成引擎210输出的规范霍夫曼码可以与经处理文件一起输入到霍夫曼译码器212,霍夫曼译码器212使用规范霍夫曼码执行经处理文件的霍夫曼译码以产生压缩输出文件。
霍夫曼位长度引擎208可以执行图3的方法300。用于生成规范霍夫曼位长度的常规方法是给所有数据排序。方法300不需要首先排序。因而可以简化硬件以在生成霍夫曼位长度时每次迭代时仅仅寻找最低到节点。流程图中提及的映射值指的是正在被霍夫曼译码的要素,这意味着它可能是文字、偏移、flagRun或长度。计数是指有待霍夫曼译码的映射值的频率计数。
方法300可以包含分别针对数据集(文字、flagRun、偏移或长度)的每个符号S(0)到S(N)获得302计数P(0)到P(N)。每个计数P(i)表示符号S(i)在数据集中的出现次数。可以分别将每个符号S(0)到S(N)的位长度L(0)到L(N)初始化304成零并且可以去除无效条目。无效条目可以是具有等于零的对应计数P(i)的符号S(i)。对于方法300的其余部分,所考虑的符号S(0)到S(N)可以仅仅包含有效的符号,即具有非零计数P(0)到P(N)的符号。同样,可以分别将每个符号S(0)到S(N)的映射值I(0)到I(N)初始化306。将映射值I(0)到I(N)初始化可以包含将每个映射值I(i)设置成等于i,ⅰ=0到N。
方法300接着可包含寻找308具有两个最低对应计数P(a)和P(b)的两个符号S(a)和S(b)。接着可确定310这些计数的总和Pt=P(a)+P(b)。还可确定312符号S(a)和S(b)的具有最小映射值I(a)、I(b)的符号S(min)。可以将对应于较小映射值的计数P(min)设置314成等于计数(Pt)的总和。可以将具有最大映射值I(a)、I(b)的符号S(a)、S(b)的符号S(max)的计数P(max)设置316成等于零。映射值I(a)和I(b)可以都设置318成等于较小映射值,即I(max)可以设置成等于I(min)。虽然在这个实施例中,两个计数P(a)和P(b)的两个映射值I(a)和I(b)都设置成等于较小映射值,但是在其它实施例中,I(a)和I(b)设置成等于的映射值可以是用任何方式选择的映射值,只要其彼此相等即可。同样,无论选择哪个映射值,都可以将对应于选定映射值I(i)的计数P(i)设置成等于Pt。
对应于符号S(a)和S(b)的位长度L(a)和L(b)可以递增320一。在后续迭代中,计数P(a)和P(b)中的一个或两个可以对应于先前已经处理的一或多个文字。因此,在步骤308-322的后续迭代中,具有与映射值I(a)或I(b)中的任一个匹配的映射值I(i)的所有符号S(i)的位长度L(i)可以递增320。
方法300接着可包含确定322是否所有计数P(0)到P(N)I(0)都等于零。如果否,则所述方法在步骤308继续。如果是,则所述方法300可以结束。在一些实施例中,步骤322并非确定是否所有计数等于零,而是可以包含评估计数器以确定是否所有非零计数已经处理,在步骤308-322的每次迭代时计数器递增或者初始化成非零计数的数值,并且在步骤308-322的每次迭代时计数器递减。
接着可将根据方法300确定的位长度L(0)到L(N)排序成规范次序并且存储为压缩文件的标头供解压缩引擎使用以解压缩数据文件。位长度L(0)到L(N)还用于根据常规霍夫曼译码使用规范霍夫曼码压缩数据文件。
接着可进一步处理根据方法400确定的位长度L(0)到L(N)以便将位长度的长度限制为某个固定值Lmax。举例来说,Lmax可以等于7位。
图4说明用于限制霍夫曼码的长度的实例方法400。方法400可以包含不带长度限制地构造402霍夫曼码,并且将霍夫曼码排序404成规范次序,例如使用方法300同时执行生成和排序或执行在分开的步骤中生成和排序代码的常规方法。
将大于Lmax的位长度转换406成Lmax。举例来说,可以将具有大于Lmax(例如7)的原始值的每个位长度L(i)设置成等于7(L(i)=Lmax)。
接着可计算408如在步骤406限制的位长度L(0)到L(N)的溢流概率。溢流概率Po可以以如下计算:
接着可寻找410长度Lmin,其在递增时使溢流概率小于零。如上所述,正溢流概率指示霍夫曼码无效。具体来说,Lmin可以是最大位长度L(i),其在递增一时使溢流概率从正变成小于或等于零。接着可递增412第二位长度L(j)=Lmin-1。在一些情况下,可存在具有相等长度的多个位长度L(i)。在这种情况下,在位长度列表中,可以按照字母顺序布置相等长度的位长度。因此,可以选择递增的第二位长度L(j)=Lmin-1以作为等于Lmin-1的最后位长度。
如上所述,按照规范排序,按字母顺序给相等长度的位长度排序。因此,方法400可以包含评估414是否L(j)不再按照规范次序。如果未发现416L(j)按照规范次序,则可以将其向右移位418。举例来说,假设递增之前的位长度的顺序是L(‘B’)=4、L(‘E’)=4和L(‘A’)=5。如果L(‘E’)递增为5,则次序现在将是L(‘B’)=4、L(‘E’)=5和L(‘A’)=5。L(‘E’)和L(‘A’)不再是规范次序。因此,右移418可以包含将L(‘E’)向右移,使得次序现在是L(‘B’)=4、L(‘A’)=5和L(‘E’)=5。右移可以继续直到递增的位长度B(j)具有规范次序为止。
接着可使用按规范次序排序的位长度L(0)到L(N)以例如根据算法2创建420正确的代码。
参看图5,如上所述,当对于数据集(flagrun,偏移,长度,文字)的符号生成动态霍夫曼码时,其中可以累积使用统计数据的二进制数的数目可能是有限的。为了便于这一点,可以将编码为字节的符号视为两个4位数量,其标记为MSBHufflits(最高有效四位)和LSBHuffLits(最低有效四位)。这样能保证用于所收集的文字统计数据的总位将仅仅完全拟合在16二进制数统计数据中。
用于编码经处理文件的方法500可以包含仅仅向用于M kB文件的第一部分的二进制数到N+1二进制数指派flagRun文字,其中N是根据方法400施加的最大霍夫曼码长度。举例来说,如下面的表1所示,将向二进制数0到7指派从1到8个文字的flagRun值。方法500可以包含省去504压缩数据文件的第二部分的flagRun文字,这可以包含省去为数据文件的第二部分的flagRun文字计数。
表1.FlagRun二进制数
FlagRun二进制数 | 文字数目 |
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
文件的第二部分((例如)第二半部)中的FlagRun符号可以经霍夫曼译码。举例来说,可以使用文字的均式对比复制命令或某种其它公式而非仅压缩编码帧的一半动态地为flagRun文字译码,或者可以对于除了一半之外的压缩帧的固定百分比动态地为flagRun文字译码。
方法500可以包含将偏移值映射506成固定数目的二进制数,例如2*(N+1)个二进制数,或者对于N=7是16个二进制数。举例来说,偏移映射可以由用于根据表2分段的统计数据收集的16个二进制数组成。在一些实施例中,对于偏移二进制数,“与最后复本偏移相同”可以使用除了0之外的另一二进制数值,例如15或两者之间的任何数字。同样,用于‘字典’复本的二进制数可以使用除了0之外的某个其它二进制数值。
表2.
偏移二进制数 | 扩展位 | 偏移范围 |
0 | 0 | 与最后复本偏移相同 |
1 | 4 | 0-15 |
2 | 4 | 16-31 |
3 | 5 | 32-63 |
4 | 5 | 64-95 |
5 | 5 | 96-127 |
6 | 6 | 128-191 |
7 | 6 | 192-255 |
8 | 7 | 256-383 |
9 | 7 | 384-511 |
10 | 8 | 512-767 |
11 | 8 | 768-1023 |
12 | 9 | 1024-1535 |
13 | 9 | 1536-2047 |
14 | 10 | 2048-3071 |
15 | 10 | 3072-4095 |
偏移二进制数映射
显而易见,用于偏移的可能值的数目大大超出二进制数的数目。然而,如上所述,将偏移值约束为二进制数的固定数目,使得能够使用VLSI装置动态地为偏移值霍夫曼译码。
方法500可以包含将长度值映射508成2*(N+1)个二进制数或者对于N=7是16个二进制数。举例来说,可以根据表3向16个二进制数中的一者指派长度值。
表3.长度二进制数映射
方法500可以包含将长度值映射508成2*(N+1)个二进制数或者对于N=7是16个二进制数。举例来说,可以根据表3向16个二进制数中的一者指派长度值。
方法500可以包含对于二进制数的每一集合生成510规范霍夫曼码。举例来说,对于二进制数的每一集合(flagRun,长度,偏移和文字)的计数,可以根据方法300生成规范霍夫曼码。接着可将在步骤510生成的霍夫曼码归一化512。归一化可以包含根据图4的方法400变换霍夫曼码,使得位长度不超过N。接着可使用在步骤512针对每个数据集确定的霍夫曼码将每个数据集(flagRun,长度,偏移和文字)的符号霍夫曼编码514。
经霍夫曼编码的数据集可以写入到输出流并且与标头一起传输到接收装置,所述标头包含用于对每个数据集进行编码的霍夫曼码。用于输入数据文件的输出流或输出文件可以用标头树标头的形式写入,标头树标头针对文字的MSB、文字的LSB、长度、偏移中的每一者确定的霍夫曼码是6个字节长。标头树标头对于用于文字的flagRun可以是3个字节长,即因为对于7个位,仅仅需要三个字节。
在以上实例中,输入数据文件为4K字节,但是可使用其它文件大小,例如8K、16K、32K、64K或某个其它大小。同样,不是将代码长度限制为7位,而是代码长度可以限于某个其它值,例如15位、31位或某个其它值,其可以取决于输入文件的大小。同样,可以执行用于4K偏移的复制命令的偏移值表的部分映射。同样,可以执行用于4K分区的2K字节的文字命令的动态霍夫曼译码。
以下参考文献的全文并入本文中:
[1].D.A霍夫曼(D.A.Huffman),“用于构造最小冗余代码的方法(A method forthe construction of minimum-redundancy codes)”,Proc.IRE 40(9),第1098-1101页,1952年。
[2].L.L.拉莫尔(L.L.Larmore)和D.S.海茨博格(D.S.Hirschberg)的“用于最优长度受限霍夫曼码的快速算法(A fast algorithm for optimal length-limitedHuffman codes)”(计算机器协会学报,Journal of the Association for ComputingMachinery,(37)3,第464-473页,1990年7月。
[3].DEFLATE压缩数据格式规范版本1.3.IETF,1996年5月,第1页,摘要章节.RFC1951.2012年11月11日检索。
[4].泽甫J.、兰珀尔A.(Ziv,J.;Lempel,A.)(1978).“经由可变速率译码对个别序列的压缩(Compression of individual sequences via variable-rate coding)”,IEEE信息理论学报(IEEE Transactions on Information Theory),24(5):530。
在不脱离本发明精神或基本特征的情况下,可以其它特定形式实施本发明。所描述的实施例应视为在所有方面均仅为说明性而非限制性的。因此,本发明的范围由所附权利要求书而不是由前述描述指示。在权利要求书等效物的含义和范围内的所有变化均被涵盖在权利要求书的范围内。
Claims (19)
1.一种用于压缩的方法(300,400),其包括通过计算机系统执行:
接收多个计数P(i),i=1到N,每个计数P(i)对应于数据集中的多个符号中的一个符号S(i),所述多个计数P(i)未排序;
通过以下方式,根据所述计数P(i)向N个中的每个符号S(i),i=1到N指派位长度而无需首先将所述计数P(i)排序,以获得第一规范霍夫曼码:
向每个符号S(i)指派映射值I(i),所述映射值是依次向所述数据集中的每个符号S(i)指派的;
确定所述多个计数P(i),i=1到N,每个计数对应于不同的符号S(i);
寻找所述多个符号S(i)中具有多个频率量度P(i)中的最低对应计数P(a)和P(b)的两个符号S(a)和S(b);
将所述计数P(a)和P(b)求和以获得总和Pt;
确定指派给符号S(a)和S(b)的映射值I(a)和I(b)中的较小映射值I(min)以及所述映射值I(a)和I(b)中的较大映射值I(max);
将I(max)中的一者改变成等于所述较小映射值I(min);
将对应于所述较小映射值I(min)的计数P(min)设置成等于Pt;
将对应于I(max)的计数P(max)设置成等于零;
递增对应于符号S(a)和S(b)的位长度L(a)和L(b);以及
通过所述递增动作重复所述寻找动作,直到所有映射值I(i)等于零为止;
使用所述第一规范霍夫曼码对所述数据集进行规范霍夫曼译码;以及
将所有大于阈值的代码长度L(i)设置成等于所述阈值以获得第二规范霍夫曼码。
2.根据权利要求1所述的方法(300,400),其进一步包括:
确定基准代码,其是低于所述阈值的最大代码长度,其在逐一递增时,使得所述第二规范霍夫曼码的溢流概率大于或等于一;
使经调整的代码逐一递增以生成第三规范霍夫曼码,所述经调整的代码具有小于所述基准代码的长度;以及
根据所述第三规范霍夫曼码对所述数据集进行霍夫曼译码。
3.根据权利要求2所述的方法(300,400),其中生成所述第三规范霍夫曼码进一步包括移动所述经调整的代码,使得对于对应于所述经调整的代码的文字,所述经调整的代码采用规范次序。
4.根据权利要求3所述的方法(300,400),其中移动所述经调整的代码使得所述经调整的代码采用规范次序包括:
将所述经调整的代码向右移位,直到所述经调整的代码采用规范次序为止,其中所述第三霍夫曼码的具有相等长度的代码长度按照字母顺序从左到右。
5.一种用于压缩的方法(300,400),其包括通过计算机系统执行:
生成数据文件中的多个文字的第一规范霍夫曼码,所述第一规范霍夫曼码包含所述多个文字中的每个文字的代码长度,所述代码长度按照顺序布置;
将所有大于阈值的代码长度设置成等于所述阈值以获得第二规范霍夫曼码;
确定低于所述阈值的最大代码长度的基准代码,其在逐一递增时,使得所述第二规范霍夫曼码的溢流概率大于或等于一;
使经调整的代码逐一递增以生成第三规范霍夫曼码,所述经调整的代码具有小于所述基准代码的长度;以及
根据所述第三规范霍夫曼码对所述数据文件进行霍夫曼译码。
6.根据权利要求5所述的方法(300,400),其中生成所述第三规范霍夫曼码进一步包括移动所述经调整的代码,使得对于对应于所述经调整的代码的所述文字,所述经调整的代码采用规范次序。
7.根据权利要求6所述的方法(300,400),其中移动所述经调整的代码使得所述经调整的代码采用规范次序包括:将所述经调整的代码向右移位,直到所述经调整的代码采用规范次序为止,其中所述第三霍夫曼码的具有相等长度的代码长度按照字母顺序从左到右。
8.一种用于压缩的方法(300,400),其包括通过计算机系统:
处理数据文件并且标记每个文字以作为一或多个非重复文字的多个文字群组中的一者和一或多个文字的多个复制群组中的一者的一部分,在所述数据文件中每个文字群组的所述一或多个文字前面不是一或多个文字的相同群组,在所述数据文件中每个复制群组的所述一或多个文字前面是一或多个文字的相同群组,每个复制群组具有指示所述复制群组中的文字数目的长度以及相对于在所述数据文件中在所述每个复制群组前面的一或多个文字的相同群组的偏移,并且每个文字群组具有指示所述文字群组中的文字数目的长度;
对所述多个文字群组的第一部分进行霍夫曼译码以获得经霍夫曼译码的文字群组,所述多个文字群组的所述部分包含于所述数据文件的第一部分中;
在输出文件中包含所述经霍夫曼译码的文字群组;以及
在所述输出文件中包含所述数据文件的第二部分中的所述多个文字群组的第二部分而无需对所述多个文字群组的所述第二部分进行霍夫曼译码,所述第二部分在所述数据文件中出现在所述第一部分之后。
9.根据权利要求8所述的方法(300,400),其进一步包括通过相对于所述第一和第二部分中的复制群组评估文字群组的平均数,借此将所述数据文件划分成所述第一部分和所述第二部分。
10.根据权利要求9所述的方法(300,400),其进一步包括:
对所述多个复制群组的所述偏移进行霍夫曼译码以获得经霍夫曼译码的偏移;
在所述输出文件中包含所述经霍夫曼译码的偏移;
与所述多个复制群组的所述偏移的所述霍夫曼译码分开,对所述多个复制群组的长度进行霍夫曼译码以获得经霍夫曼译码的长度;以及
在所述输出文件中包含所述经霍夫曼译码的长度。
11.根据权利要求10所述的方法(300,400),其进一步包括将用于所述多个复制群组的所述偏移和所述长度的所述霍夫曼译码的霍夫曼码长度限制为N个位。
12.根据权利要求11所述的方法(300,400),其中N是8。
13.根据权利要求11所述的方法(300,400),其中将用于所述多个复制群组的所述偏移和所述长度的所述霍夫曼译码的所述霍夫曼码长度限制为N个位进一步包括对于所述长度和偏移的每个数据集执行:
在所述每个数据集中生成数据字的第一规范霍夫曼码,所述第一规范霍夫曼码包含用于每个数据字的代码长度,所述代码长度按照顺序布置;
将所有大于N的代码长度设置成等于N以获得第二规范霍夫曼码;
确定基准代码,其是低于N的最大代码长度,其在逐一递增时,使得所述第二规范霍夫曼码的溢流概率大于或等于一;
使经调整的代码逐一递增以生成第三规范霍夫曼码,所述经调整的代码具有小于所述基准代码的长度;以及
根据所述第三规范霍夫曼码对所述数据文件进行霍夫曼译码。
14.根据权利要求13所述的方法(300,400),其中将用于所述多个复制群组的所述偏移和所述长度的所述霍夫曼译码的所述霍夫曼码长度限制为N个位进一步包括使用超大规模集成VLSI电路对所述偏移和所述长度进行霍夫曼译码,所述VLSI电路经编程以执行N或更少的霍夫曼码的霍夫曼译码。
15.根据权利要求11所述的方法(300,400),其中限制所述多个复制群组的所述长度的所述霍夫曼译码的所述霍夫曼码长度包括将从1到M的长度映射成2*N个二进制数中的一者,M大于2*N。
16.一种电子装置(100),其包括:
统计数据生成模块(206),其经配置以对于输入数据文件的多个文字生成使用统计数据;
规范霍夫曼译码模块(210),其经配置以基于所述使用统计数据生成用于所述多个文字的第一规范霍夫曼码,所述第一霍夫曼码包含多个第一霍夫曼码长度;
长度引擎(208),其经配置以将所述第一霍夫曼码长度变换成具有长度N的最长代码的第二霍夫曼码长度,N小于所述第一霍夫曼码长度的最长霍夫曼码长度;以及
霍夫曼译码引擎(212),其经配置以根据所述第二霍夫曼码长度对所述数据文件进行霍夫曼译码。
17.根据权利要求16所述的电子装置,其中所述规范霍夫曼译码模块(210)进一步经配置以生成用于所述多个文字的所述第一霍夫曼码长度而无需首先将所述使用统计数据排序。
18.根据权利要求17所述的电子装置,其中所述规范霍夫曼译码模块(210)进一步经配置以通过执行指令以进行如下操作来生成用于所述多个文字的所述第一霍夫曼码长度:
向每个文字S(i)指派映射值I(i),所述映射值是依次向所述数据文件中的每个文字S(i)指派的;
确定多个计数P(i),i=1到N,每个计数对应于一个文字S(i);
寻找所述多个文字S(i)中的具有多个频率量度P(i)中的最低对应计数P(a)和P(b)的两个文字S(a)和S(b);
将所述计数P(a)和P(b)求和以获得总和Pt;
确定指派给文字S(a)和S(b)的映射值I(a)和I(b)中的较小映射值I(min)以及所述映射值I(a)和I(b)中的较大映射值I(max);
将I(a)和I(b)中的一者改变成等于所述较小映射值;
将所述多个计数中的对应于所述较小映射值I(min)的计数P(min)设置成等于Pt;
将所述多个计数中的对应于I(max)的计数P(max)设置成等于零;
递增对应于文字S(a)和S(b)的位长度L(a)和L(b);以及
通过所述递增行为重复所述寻找动作,直到所有映射值I(i)等于零为止。
19.根据权利要求18所述的电子装置,其中所述长度引擎(208)经配置以通过执行指令以进行如下操作来将所述第一霍夫曼码长度变换成具有长度N的最长代码的所述第二霍夫曼码长度,N小于所述第一霍夫曼码长度的最长霍夫曼码长度:
将所有大于阈值的第一霍夫曼码长度设置成等于所述阈值以获得中间规范霍夫曼码;
确定基准代码,其是低于所述阈值的最大代码长度,其在逐一递增时,使得所述中间规范霍夫曼码的溢流概率大于或等于一;
使经调整的代码逐一递增以生成第二规范霍夫曼码,所述经调整的代码比所述基准代码少一个的长度。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/299,990 US9337862B2 (en) | 2014-06-09 | 2014-06-09 | VLSI efficient Huffman encoding apparatus and method |
US14/299,990 | 2014-06-09 | ||
PCT/US2015/034691 WO2015191456A1 (en) | 2014-06-09 | 2015-06-08 | Vlsi efficient huffman encoding apparatus and method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106560010A CN106560010A (zh) | 2017-04-05 |
CN106560010B true CN106560010B (zh) | 2020-01-03 |
Family
ID=54770410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580037485.4A Active CN106560010B (zh) | 2014-06-09 | 2015-06-08 | Vlsi高效霍夫曼编码设备和方法 |
Country Status (7)
Country | Link |
---|---|
US (3) | US9337862B2 (zh) |
EP (1) | EP3152840B1 (zh) |
JP (2) | JP6437575B2 (zh) |
KR (1) | KR101841103B1 (zh) |
CN (1) | CN106560010B (zh) |
TW (1) | TWI656747B (zh) |
WO (1) | WO2015191456A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107294539B (zh) * | 2017-05-23 | 2020-04-28 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
US9906239B1 (en) * | 2017-06-28 | 2018-02-27 | Ati Technologies Ulc | GPU parallel huffman decoding |
CN108319454B (zh) * | 2018-03-27 | 2021-02-09 | 武汉中元华电电力设备有限公司 | 一种基于硬件fpga快速实现最优二叉树的方法 |
US11509328B2 (en) | 2018-05-31 | 2022-11-22 | Microsoft Technology Licensing, Llc | Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets |
US10630312B1 (en) * | 2019-01-31 | 2020-04-21 | International Business Machines Corporation | General-purpose processor instruction to perform compression/decompression operations |
US10693493B1 (en) | 2019-02-14 | 2020-06-23 | International Business Machines Corporation | Reducing latch count to save hardware area for dynamic Huffman table generation |
US10944423B2 (en) | 2019-03-14 | 2021-03-09 | International Business Machines Corporation | Verifying the correctness of a deflate compression accelerator |
US10756758B1 (en) * | 2019-08-30 | 2020-08-25 | International Business Machines Corporation | Length-limited huffman encoding |
CN110868223B (zh) * | 2019-12-06 | 2023-10-27 | 广东海洋大学 | 一种哈夫曼编码的数值运算实现方法及电路 |
WO2021149060A1 (en) * | 2020-01-24 | 2021-07-29 | Ariel Scientific Innovations Ltd. | Data compression and encryption algorithm |
JP2021145281A (ja) | 2020-03-13 | 2021-09-24 | キオクシア株式会社 | 圧縮装置、伸張装置及び方法 |
JP7562451B2 (ja) | 2021-03-11 | 2024-10-07 | キオクシア株式会社 | 圧縮装置および制御方法 |
CN113381768B (zh) * | 2021-08-11 | 2021-11-09 | 苏州浪潮智能科技有限公司 | 一种哈夫曼校正编码方法、系统及相关组件 |
CN113965207B (zh) * | 2021-12-17 | 2022-03-15 | 苏州浪潮智能科技有限公司 | 一种基于deflate霍夫曼编码的动态码表生成装置和方法 |
JP2023127253A (ja) | 2022-03-01 | 2023-09-13 | キオクシア株式会社 | 符号表生成装置、メモリシステム、および符号表生成方法 |
CN116369868B (zh) * | 2023-06-07 | 2023-08-11 | 青岛大学附属医院 | 基于大数据的睡眠分期监测方法及装置 |
CN116614139B (zh) * | 2023-07-20 | 2023-09-19 | 酒仙网络科技股份有限公司 | 一种售酒小程序内用户交易信息压缩存储方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1224978A (zh) * | 1998-01-26 | 1999-08-04 | 大宇电子株式会社 | 基于上下文的算术编码/解码方法及装置 |
CN1613188A (zh) * | 2001-10-19 | 2005-05-04 | 诺基亚公司 | 霍夫曼编码 |
US6919826B1 (en) * | 2003-12-19 | 2005-07-19 | Sun Microsystems, Inc. | Systems and methods for efficient and compact encoding |
Family Cites Families (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5521597A (en) * | 1993-08-02 | 1996-05-28 | Mircosoft Corporation | Data compression for network transport |
JPH07212243A (ja) * | 1994-01-13 | 1995-08-11 | Fuji Photo Film Co Ltd | 可変長符号の符号化方法およびその装置 |
US5696507A (en) * | 1996-05-31 | 1997-12-09 | Daewoo Electronics Co., Inc. | Method and apparatus for decoding variable length code |
JP3161697B2 (ja) | 1997-04-18 | 2001-04-25 | 富士ゼロックス株式会社 | 符号化装置、復号装置および符号化復号装置ならびにそれらの方法 |
US5982306A (en) * | 1997-12-02 | 1999-11-09 | Daewoo Electronics Co., Ltd. | Variable-length coding method and apparatus thereof |
GB2333412B (en) * | 1998-01-20 | 2002-05-15 | Daewoo Electronics Co Ltd | Context-based arithmetic encoding/decoding apparatus |
US6393149B2 (en) * | 1998-09-17 | 2002-05-21 | Navigation Technologies Corp. | Method and system for compressing data and a geographic database formed therewith and methods for use thereof in a navigation application program |
JP2001136075A (ja) * | 1999-11-05 | 2001-05-18 | Fujitsu Ltd | データ圧縮/復元装置及びデータ圧縮/復元プログラムを記録した記憶媒体 |
DE29920496U1 (de) * | 1999-11-23 | 2000-02-17 | Schwarz Verbindungs-Systeme GmbH, 75382 Althengstett | Schwingungsdämpfende Verbindungsanordnung für zwei gegeneinander verschiebliche Bauteile |
US6690306B1 (en) * | 2000-11-03 | 2004-02-10 | Intel Corporation | Method of generating a length-constrained huffman code |
US6529481B2 (en) * | 2000-11-30 | 2003-03-04 | Pluris, Inc. | Scalable and fault-tolerant link state routing protocol for packet-switched networks |
AUPR192700A0 (en) * | 2000-12-06 | 2001-01-04 | Canon Kabushiki Kaisha | Storing coding image data in storage of fixed memory size |
RU2003131191A (ru) * | 2001-04-04 | 2005-04-20 | Хонейвелл Интернэшнл Инк. (Us) | Устройство (варианты) и способ распаковки данных |
US20020154040A1 (en) * | 2001-04-23 | 2002-10-24 | Pentti Vataja | Lossless data compression method enabling fast decompression |
US6650996B1 (en) * | 2001-12-20 | 2003-11-18 | Garmin Ltd. | System and method for compressing data |
EP1474915A1 (en) | 2002-02-01 | 2004-11-10 | Koninklijke Philips Electronics N.V. | Compression of palettized color images with variable length color codes |
JP3853710B2 (ja) * | 2002-07-15 | 2006-12-06 | Necアクセステクニカ株式会社 | ディジタル画像符号化装置およびディジタル画像符号化方法 |
JP4093200B2 (ja) * | 2004-03-26 | 2008-06-04 | セイコーエプソン株式会社 | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 |
JP4362426B2 (ja) * | 2004-09-15 | 2009-11-11 | 株式会社クボタ | 作業車の伝動構造 |
US7256719B2 (en) * | 2005-03-23 | 2007-08-14 | International Business Machines Corporation | Digital data decompression implemented in a field programmable array device |
JP4726046B2 (ja) * | 2005-04-22 | 2011-07-20 | 三菱電機株式会社 | 文字列検索装置及びコンピュータプログラム及び文字列検索方法 |
WO2008034213A1 (en) * | 2006-09-18 | 2008-03-27 | Infobright Inc. | A method and system for data compression in a relational database |
US7573407B2 (en) * | 2006-11-14 | 2009-08-11 | Qualcomm Incorporated | Memory efficient adaptive block coding |
US7545293B2 (en) * | 2006-11-14 | 2009-06-09 | Qualcomm Incorporated | Memory efficient coding of variable length codes |
US7532134B2 (en) * | 2007-03-12 | 2009-05-12 | Citrix Systems, Inc. | Systems and methods for sharing compression histories between multiple devices |
US7827237B2 (en) * | 2007-03-12 | 2010-11-02 | Citrix Systems, Inc. | Systems and methods for identifying long matches of data in a compression history |
DE102007018324B3 (de) * | 2007-04-18 | 2008-06-05 | Siemens Ag | Bilddatenerfassungssystem eines Röntgen-, CT- oder MRT-Geräts mit integriertem Datenkomprimierungsmodul zur Datenreduktion akquirierter Bilddaten |
US8775663B1 (en) * | 2007-04-25 | 2014-07-08 | Netapp, Inc. | Data replication network traffic compression |
US9362948B2 (en) | 2008-02-14 | 2016-06-07 | Broadcom Corporation | System, method, and computer program product for saving and restoring a compression/decompression state |
US7737870B1 (en) * | 2007-09-04 | 2010-06-15 | Nortel Networks Limited | Bit-stream huffman coding for data compression |
US7642935B2 (en) * | 2008-04-07 | 2010-01-05 | Mediatek Inc. | Huffman decoding method and apparatus |
DE602008002583D1 (de) * | 2008-07-21 | 2010-10-28 | Sony Comp Entertainment Europe | Datenkomprimierung und -dekomprimierung |
US7860328B2 (en) * | 2008-07-31 | 2010-12-28 | Hiroshima University | Compression processing apparatus and compression processing method |
US8327443B2 (en) * | 2008-10-29 | 2012-12-04 | Lockheed Martin Corporation | MDL compress system and method for signature inference and masquerade intrusion detection |
TWI378654B (en) | 2009-02-04 | 2012-12-01 | Novatek Microelectronics Corp | Adaptive canonical huffman decoder and method thereof and video decoder |
PL2559166T3 (pl) | 2010-04-13 | 2018-04-30 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Koder i dekoder dzielący interwał prawdopodobieństwa |
HUE039299T2 (hu) * | 2010-09-09 | 2018-12-28 | Fraunhofer Ges Forschung | Entrópia kódolási és dekódolási séma |
WO2012053015A2 (en) * | 2010-10-22 | 2012-04-26 | Jana, Tejaswini, Ramesh | Compression and decompression of data at high speed in solid state storage |
US20120147970A1 (en) | 2010-12-08 | 2012-06-14 | Qualcomm Incorporated | Codeword adaptation for variable length coding |
CN201910880U (zh) * | 2010-12-13 | 2011-07-27 | 山东大学 | Jpeg图像中范式霍夫曼的硬件解码装置 |
US8442986B2 (en) | 2011-03-07 | 2013-05-14 | Novell, Inc. | Ranking importance of symbols in underlying grouped and differentiated files based on content |
CN107529705B (zh) * | 2011-06-16 | 2021-02-12 | Ge视频压缩有限责任公司 | 解码器、编码器、解码和编码视频的方法及存储介质 |
JP2013016897A (ja) | 2011-06-30 | 2013-01-24 | Toshiba Corp | 可変長符号復号装置、符号システムおよび可変長符号復号方法 |
US20130099946A1 (en) * | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
US8593308B1 (en) * | 2012-05-31 | 2013-11-26 | International Business Machines Corporation | Method of accelerating dynamic Huffman decompaction within the inflate algorithm |
US8791843B2 (en) * | 2012-10-15 | 2014-07-29 | Lsi Corporation | Optimized bitstream encoding for compression |
US9035809B2 (en) * | 2012-10-15 | 2015-05-19 | Seagate Technology Llc | Optimizing compression engine throughput via run pre-processing |
US9509336B1 (en) * | 2015-05-11 | 2016-11-29 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor that pre-huffman encodes to decide whether to huffman encode a matched string or a back pointer thereto |
US9503122B1 (en) * | 2015-05-11 | 2016-11-22 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor that sorts hash chains based on node string match probabilities |
US9503112B1 (en) * | 2016-05-13 | 2016-11-22 | Cirrus Logic, Inc. | Non-linearity cancellation in a dual-path ADC |
-
2014
- 2014-06-09 US US14/299,990 patent/US9337862B2/en active Active
-
2015
- 2015-06-08 EP EP15806381.8A patent/EP3152840B1/en active Active
- 2015-06-08 TW TW104118546A patent/TWI656747B/zh active
- 2015-06-08 JP JP2016571381A patent/JP6437575B2/ja active Active
- 2015-06-08 KR KR1020177000286A patent/KR101841103B1/ko active IP Right Grant
- 2015-06-08 CN CN201580037485.4A patent/CN106560010B/zh active Active
- 2015-06-08 WO PCT/US2015/034691 patent/WO2015191456A1/en active Application Filing
-
2016
- 2016-04-15 US US15/130,054 patent/US9882583B2/en active Active
-
2017
- 2017-08-30 US US15/690,962 patent/US10230393B2/en active Active
-
2018
- 2018-11-14 JP JP2018213457A patent/JP6616877B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1224978A (zh) * | 1998-01-26 | 1999-08-04 | 大宇电子株式会社 | 基于上下文的算术编码/解码方法及装置 |
CN1613188A (zh) * | 2001-10-19 | 2005-05-04 | 诺基亚公司 | 霍夫曼编码 |
US6919826B1 (en) * | 2003-12-19 | 2005-07-19 | Sun Microsystems, Inc. | Systems and methods for efficient and compact encoding |
Also Published As
Publication number | Publication date |
---|---|
JP6437575B2 (ja) | 2018-12-12 |
EP3152840A1 (en) | 2017-04-12 |
US20150358031A1 (en) | 2015-12-10 |
EP3152840B1 (en) | 2020-04-29 |
US9337862B2 (en) | 2016-05-10 |
US20160233881A1 (en) | 2016-08-11 |
EP3152840A4 (en) | 2018-05-30 |
KR101841103B1 (ko) | 2018-03-23 |
US10230393B2 (en) | 2019-03-12 |
TWI656747B (zh) | 2019-04-11 |
US9882583B2 (en) | 2018-01-30 |
KR20170015479A (ko) | 2017-02-08 |
WO2015191456A1 (en) | 2015-12-17 |
JP2017528015A (ja) | 2017-09-21 |
CN106560010A (zh) | 2017-04-05 |
JP6616877B2 (ja) | 2019-12-04 |
JP2019054532A (ja) | 2019-04-04 |
US20170366198A1 (en) | 2017-12-21 |
TW201614962A (en) | 2016-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106560010B (zh) | Vlsi高效霍夫曼编码设备和方法 | |
US11044495B1 (en) | Systems and methods for variable length codeword based data encoding and decoding using dynamic memory allocation | |
US10187081B1 (en) | Dictionary preload for data compression | |
US11722148B2 (en) | Systems and methods of data compression | |
US7688233B2 (en) | Compression for deflate algorithm | |
US9094039B2 (en) | Efficient deflate decompression | |
CN106664101B (zh) | 自适应速率压缩散列处理装置 | |
US7864085B2 (en) | Data compression method and apparatus | |
CN112994703A (zh) | 硬件友好的数据解压缩 | |
US10873836B2 (en) | Efficient short message compression | |
CN104682966B (zh) | 列表数据的无损压缩方法 | |
US7930435B2 (en) | Hub and spoke compression | |
CN112738124B (zh) | 硬件友好的数据压缩方法、压缩器 | |
Begum et al. | An efficient text compression for massive volume of data | |
CN103905054B (zh) | 构建码表的方法和装置,编码、解码方法和装置 | |
Hussain et al. | Optimized Compression and Decompression Software | |
Reyssan et al. | Multiple Character Modification for Huffman Algorithm | |
Waghulde et al. | New data compression algorithm and its comparative study with existing techniques | |
CN113315523A (zh) | 硬件友好的数据解压缩 | |
PM N | Survey on lossless dictionary based datacompression algorithms | |
ŞENERGİN et al. | A new dictionary-based preprocessor that uses radix-190 numbering | |
Al_Hayek et al. | Development and Performance Evaluation of a Bit-Level Text Compression Scheme Based on the Adaptive Character Wordlength Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180207 Address after: Idaho Applicant after: Micron Technology, Inc. Address before: American California Applicant before: Ted systems Limited by Share Ltd |
|
GR01 | Patent grant | ||
GR01 | Patent grant |