一种哈夫曼压缩方法及装置与流程

文档序号:12750759阅读:180来源:国知局
一种哈夫曼压缩方法及装置与流程
本发明涉及数据压缩
技术领域
,特别是涉及一种哈夫曼压缩方法及装置。
背景技术
:随着信息化的不断发展,尤其是互联网技术的发展使得数据呈现出爆炸性增长的趋势。在电力数据网领域,随着网络业务速率的提高和网络业务种类的增多,数据网业务相关数据也在不断地增长。目前保障数据网业务质量的重要手段之一是对电力数据网流量的探测和分析,而在流量的探测和分析过程中,对流量数据的收集记录是重要的一个环节。数据网业务相关数据的不断增长使得要保障数据网业务质量,就要收集所有的流记录信息,这样给流量探测设备的处理能力和网络传输能力带来较大的负担,为了得到较细粒度的分析捋,进而产生更大的流量处理,减小传输负担,就需要节省存储空间,节约带宽,所以数据的压缩对保障数据网业务质量变得尤为重要。现有数据压缩的系统理论研究中,哈夫曼编码是通用的压缩编码方法之一。传统的哈夫曼编码是根据单个字符的概率,对出现频率较高的数据分配较短的编码,对出现频率较低的数据分配较长的编码,传统的哈夫曼编码自提出以来在数据编码领域得到广泛应用,进行哈夫曼编码相当于对数据进行压缩,但是,传统的哈夫曼编码需要对全部待编码数据进行扫描,建立哈夫曼树,并且是根据单个字符出现的频率对每一个字符进行独立编码,使数据编码压缩效果受到影响,使得压缩率有待提高。现有技术在目前数据压缩的实际应用中,有些研究实现原始数据的归并处理,即对原始数据的相同的部分原始数据进行合并,但是相同的部分原始数据极少,导致码字过长,影响码字压缩效果及压缩率,并且相对于传统的哈夫曼算法相比没有较大提升。技术实现要素:本发明实施例的目的在于提供一种哈夫曼压缩方法及装置,使进行哈夫曼数据压缩时提升数据压缩效果,提高数据压缩率。为达到上述目的,本发明实施例公开了一种哈夫曼压缩方法,包括:获取并遍历待压缩文本,确定所述待压缩文本的字符空间,其中,所述字符空间包括:多个字符,且每个字符用于表示所述待压缩文本中的相同字符;根据所述字符空间的多个字符,确定所述字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,其中,所述第一字符为所述字符空间中的任一字符;根据所述转移概率及所述字符空间的多个字符的个数,得到转移概率阈值;在所有转移概率中的每个转移概率分别达到预设条件时,将到达所述预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元,并将未达到所述预设条件的转移概率对应的当前字符作为单独编码单元,其中,所述预设条件为大于所述转移概率阈值且每个转移概率不等于当前字符的次数的倒数;根据所述单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码。优选的,所述根据所述字符空间的多个字符,确定所述字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,包括:根据所述字符空间,确定所述字符空间中的每个当前字符之后相邻的字符为一个第一字符的跳转次数;根据所有跳转次数,与所有跳转次数之和的比值,得到多个一步转移概率,其中,所述一步转移概率表示所述每个当前字符之后相邻的字符为一个第一字符的概率;多个所述一步转移概率构成一步转移概率矩阵;N个所述一步转移概率矩阵之积,得到N步转移概率矩阵,其中,所述N为大于1的自然数;根据所述N步转移概率矩阵的元素,得到N步转移概率,其中,所述N步转移概率表示所述每个当前字符之后相隔N-1个字符的字符为一个第一字符的转移概率。优选的,所述根据所述转移概率及所述字符空间的多个字符的个数,得到转移概率阈值,包括:每个当前字符之后相邻的字符为一个第一字符的所有一步转移概率之和,与所述字符空间的多个字符的个数的比值,得到每个当前字符对应的一阶转移概率阈值;每个当前字符之后相隔N-1个字符的字符为一个第一字符的所有N步转移概率之和,与所述字符空间的多个字符的个数的比值,得到每个当前字符对应的N阶转移概率阈值。优选的,位于所述在所有转移概率中的每个转移概率分别达到预设条件时,将到达所述预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元之前,所述哈夫曼压缩方法还包括:判断当前字符对应的一步转移概率是否大于当前字符对应的一阶转移概率阈值且一步转移概率不等于当前字符的次数的倒数;如果是,将当前字符与当前字符之后相邻的一个第一字符合并为一个整体,作为一个编码单元;判断当前字符的N步转移概率是否大于N阶转移概率阈值且N步转移概率不等于当前字符的次数的倒数;如果是,将当前字符与当前字符之后的N个第一字符合并为一个整体,作为一个编码单元。优选的,所述根据所述单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码,包括:统计并根据各个编码单元的次数,得到各个编码单元的概率;根据所述概率,为各个编码单元分配不同的权重;根据所述权重,构建哈夫曼树;根据所述哈夫曼树,进行哈夫曼编码。本发明实施例还公开了一种哈夫曼压缩装置,包括:字符空间确定模块,用于获取并遍历待压缩文本,确定所述待压缩文本的字符空间,其中,所述字符空间包括:多个字符,且每个字符用于表示所述待压缩文本中的相同字符;转移概率确定模块,用于根据所述字符空间的多个字符,确定所述字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,其中,所述第一字符为所述字符空间中的任一字符;转移概率阈值确定模块,用于根据所述转移概率及所述字符空间的多个字符的个数,得到转移概率阈值;编码单元确定模块,用于在所有转移概率中的每个转移概率分别达到预设条件时,将到达所述预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元,并将未达到所述预设条件的转移概率对应的当前字符作为单独编码单元,其中,所述预设条件为大于所述转移概率阈值且每个转移概率不等于当前字符的次数的倒数;编码模块,用于根据所述单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码。优选的,所述转移概率确定模块,包括:跳转次数确定子模块,用于根据所述字符空间,确定所述字符空间中的每个当前字符之后相邻的字符为一个第一字符的跳转次数;一步转移概率子模块,用于根据所有跳转次数,与所有跳转次数之和的比值,得到多个一步转移概率,其中,所述一步转移概率表示所述每个当前字符之后相邻的字符为一个第一字符的概率;一步转移概率矩阵构成子模块,用于多个所述一步转移概率构成一步转移概率矩阵;N步转移概率矩阵子模块,用于N个所述一步转移概率矩阵之积,得到N步转移概率矩阵,其中,所述N为大于1的自然数;N步转移概率子模块,用于根据所述N步转移概率矩阵的元素,得到N步转移概率,其中,所述N步转移概率表示所述每个当前字符之后相隔N-1个字符的字符为一个第一字符的转移概率。优选的,所述转移概率阈值确定模块,包括:一阶转移概率阈值确定子模块,用于每个当前字符之后相邻的字符为一个第一字符的所有一步转移概率之和,与所述字符空间的多个字符的个数的比值,得到每个当前字符对应的一阶转移概率阈值;N阶转移概率阈值确定子模块,用于每个当前字符之后相隔N-1个字符的字符为一个第一字符的所有N步转移概率之和,与所述字符空间的多个字符的个数的比值,得到每个当前字符对应的N阶转移概率阈值。优选的,所述哈夫曼压缩装置还包括:第一判断子模块,用于判断当前字符对应的一步转移概率是否大于当前字符对应的一阶转移概率阈值且一步转移概率不等于当前字符的次数的倒数;第一合并子模块,用于在所述第一判断子模块的判断结果为是时,将当前字符与当前字符之后相邻的一个第一字符合并为一个整体,作为一个编码单元;第二判断子模块,用于判断当前字符的N步转移概率是否大于N阶转移概率阈值且N步转移概率不等于当前字符的次数的倒数;第二合并子模块,用于在所述第二判断子模块的判断结果为是时,将当前字符与当前字符之后的N个第一字符合并为一个整体,作为一个编码单元。优选的,所述编码模块,包括:编码单元概率确定子模块,用于统计并根据各个编码单元的次数,得到各个编码单元的概率;分配权重子模块,用于根据所述概率,为各个编码单元分配不同的权重;哈夫曼树构建子模块,用于根据所述权重,构建哈夫曼树;哈夫曼编码子模块,用于根据所述哈夫曼树,进行哈夫曼编码。本发明实施例提供的哈夫曼压缩方法及装置,可以根据转移概率阈值动态地合并待压缩文本的字符,将多个字符作为一个编码单元,使对待压缩文本进行哈夫曼数据压缩时提升数据压缩效果,提高数据压缩率,应用本发明实施例哈夫曼压缩方法考虑字符的联系,将经常一起出现的字符作为一个编码单元,不需要对每个单个字符进行编码,提高数据压缩率。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例哈夫曼压缩方法的流程示意图;图2为本发明实施例哈夫曼压缩装置示意图;图3为本发明实施例构建的哈夫曼树示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例公开了一种哈夫曼压缩方法,参照图1,包括:步骤101,获取并遍历待压缩文本,确定待压缩文本的字符空间,其中,该字符空间包括:多个字符,且每个字符用于表示待压缩文本中的相同字符。对本发明实施例中用到的变量进行如下说明:T表示待压缩文本;V表示待压缩文本的字符空间。获取并遍历待压缩文本T,得到待压缩文本T的字符空间V,V=(v1,v2,v3,......,vn)。步骤102,根据字符空间的多个字符,确定字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,其中,第一字符为字符空间中的任一字符。当前字符可以为字符空间中的任意一个字符。本发明实施例中可以确定每个当前字符之后为一个第一字符、每个当前字符之后隔一个字符为一个第一字符或者每个当前字符之后隔N-1个字符为一个第一字符的转移概率,当前字符之后间隔的字符为字符空间中的任意字符,其中,N可以为大于1的任意自然数,具体N根据实际应用选择。步骤103,根据转移概率及字符空间的多个字符的个数,得到转移概率阈值。转移概率阈值是动态变化的,不同的字符对应不同的转移概率阈值。步骤104,在所有转移概率中的每个转移概率分别达到预设条件时,将到达预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元,并将未达到预设条件的转移概率对应的当前字符作为单独编码单元,其中,预设条件为大于转移概率阈值且每个转移概率不等于当前字符的次数的倒数。步骤105,根据单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码。统计各个编码单元的次数,根据各个编码单元的次数得到各个编码单元的概率,根据各个编码单元的概率分配权重,进而构建哈夫曼树,进行哈夫曼编码,完成对待压缩文本的数据压缩。本发明实施例获取待压缩文本,统计得到待压缩文本的字符空间,计算各个字符之后为字符空间中的任意字符的转移概率,通过转移概率和字符空间字符的个数,得到每个字符对应的转移概率阈值,依次对待压缩文本的字符进行处理,根据每个字符对应的转移概率和转移概率阈值的关系,对满足转移概率大于转移概率阈值条件对应的字符合并作为一个编码单元,不满足的,单独作为一个编码单元,最后根据各个编码单元的概率,构建哈夫曼树,进行哈夫曼编码,完成对待压缩文本的数据压缩。通过考虑字符之间的联系,对待压缩文本中满足条件的字符进行合并,使哈夫曼数据压缩时提升数据压缩效果,提高数据压缩率。优选的,根据字符空间的多个字符,确定字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,包括:第一步,根据字符空间,确定字符空间中的每个当前字符之后相邻的字符为一个第一字符的跳转次数;第二步,根据所有跳转次数,与所有跳转次数之和的比值,得到多个一步转移概率,其中,一步转移概率表示每个当前字符之后相邻的字符为一个第一字符的概率;第三步,多个一步转移概率构成一步转移概率矩阵;第四步,N个一步转移概率矩阵之积,得到N步转移概率矩阵,其中,N为大于1的自然数;第五步,根据N步转移概率矩阵的元素,得到N步转移概率,其中,N步转移概率表示每个当前字符之后相隔N-1个字符的字符为一个第一字符的转移概率。遍历T,得到T的字符空间集合V=(v1,v2,v3,......,vn)。统计vi(1≤i≤n)的次数为ci(1≤i≤n),vi之后为vj的次数为cij,cij构成一个二阶矩阵C,C为待压缩文本中字符之间跳转次数的二维矩阵,如下所示,通过公式pij=P(Xn+1=j|Xn=i)=cij/Σk=1ncik---(1)]]>得到每个当前字符之后相邻的字符为一个第一字符的概率,即一步转移概率,其中,Pij是字符Vi后为字符Vj的概率,Vi、Vj是待压缩文本中的字符,i和j的取值范围是1≤i≤n,1≤j≤n,n是待压缩文本中的字符个数;Cij是待压缩文本中字符Vi后出现字符Vj的次数,Cik是待压缩文本中字符Vi后出现字符Vk的次数,k的取值范围是1≤k≤n,Xn表示在时间n时刻下的对应状态值,Xn+1表示在时间n+1时刻下的对应状态值,即时间n后的下一时刻对应的状态值。多个一步转移概率构成一步转移概率矩阵P(1):两个一步转移概率矩阵之积,得到两步转移概率矩阵P(2),通过公式:P(2)=P(1)*P(1)(2)在实际应用中,N个一步转移概率矩阵之积,可以得到N步转移概率矩阵,N可以为大于1的任意自然数。在本发明实施例中,优选的N=2,即只计算到两步转移概率矩阵。根据两步转移概率矩阵可得两步转移概率。本发明实施例中,首先得到一步转移概率,再根据一步转移概率构成的一步转移概率矩阵得到两步转移概率矩阵,进而得到两步转移概率,因为本发明实施例中最多考虑将三个字符合并为一个整体,作为一个编码单元,所以计算一步转移概率和两步转移概率,不继续计算更多步的转移概率。优选的,根据转移概率及字符空间的多个字符的个数,得到转移概率阈值,包括:第一步,每个当前字符之后相邻的字符为一个第一字符的所有一步转移概率之和,与字符空间的多个字符的个数的比值,得到每个当前字符对应的一阶转移概率阈值;第二步,每个当前字符之后相隔N-1个字符的字符为一个第一字符的所有N步转移概率之和,与字符空间的多个字符的个数的比值,得到每个当前字符对应的N阶转移概率阈值。本发明实施例中优选的两阶转移概率阈值,定义MIN_TEMP_1表示一阶转移概率阈值,MIN_TEMP_2表示二阶转移概率阈值。一阶转移概率阈值MIN_TEMP_1通过公式:MIN_TEMP_1=(Pi1+Pi2+Pi3+...+Pin)/m(3)其中,Pi1、Pi2、Pi3、Pin是一步转移概率矩阵的元素,Pi1是字符Vi之后为字符V1的条件概率,Pi2是字符Vi之后为字符V2的条件概率,Pi3是字符Vi之后为字符V3的条件概率,Pin是字符Vi之后为字符Vn的条件概率,m是字符Vi的次数。二阶转移概率阈值MIN_TEMP_2通过公式:MIN_TEMP_2=(Pi1(2)+Pi2(2)+Pi3(2)+...+Pin(2))/m---(4)]]>其中,是两步转移概率矩阵的元素,是字符Vi之后隔一个字符为字符V1的条件概率,是字符Vi之后隔一个字符为字符V2的条件概率,是字符Vi之后隔一个字符为字符V3的条件概率,是字符Vi之后隔一个字符为Vn的条件概率,m是字符Vi的次数。分别对每个字符计算一阶转移概率阈值和二阶转移概率阈值,得到每个字符对应的一阶转移概率阈值和二阶转移概率阈值。类似的,在实际应用中,可以计算得到N阶转移概率阈值,N为大于1的任意自然数,具体计算类似于二阶转移概率阈值计算公式,这里不再赘述。优选的,位于在所有转移概率中的每个转移概率分别达到预设条件时,将到达预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元之前,哈夫曼压缩方法还包括:第一步,判断当前字符对应的一步转移概率是否大于当前字符对应的一阶转移概率阈值且一步转移概率不等于当前字符的次数的倒数;第二步,如果是,将当前字符与当前字符之后相邻的一个第一字符合并为一个整体,作为一个编码单元;第三步,判断当前字符的N步转移概率是否大于N阶转移概率阈值且N步转移概率不等于当前字符的次数的倒数;第四步,如果是,将当前字符与当前字符之后的N个第一字符合并为一个整体,作为一个编码单元。优选的,本发明实施例中依次对待压缩文本的三个字符进行处理,首先读入待压缩文本的三个字符T0、T1与T2,其中,T0为待压缩文本的第一个字符,T1是待压缩文本的第二个字符,T2是待压缩文本的第三个字符,依次类推,TM是待压缩文本的第M个字符,M是在实际应用中,根据待压缩文本的字符个数选择,根据上面步骤获得的一步转移概率,得到T0之后为T1的一步转移概率p1=P(Xn+1=T1|Xn=T0),T1之后为T2的一步转移概率p2=P(Xn+1=T2|Xn=T1),根据两步转移概率,得到T0之后隔一个字符为T2的两步转移概率p3=P(Xn+2=T2|Xn=T0),Xn表示在时间n下的对应状态值,Xn+1表示在时间n+1时刻下的对应状态值,即时间n时刻后的下一时刻对应的状态值,Xn+2表示在时间n+2时刻下的对应状态值,即时间n时刻后的两个时刻对应的状态值。比较一步转移概率P1与字符T0对应的一阶转移概率阈值MIN_TEMP_1,一步转移概率P2与字符T1对应的一阶转移概率阈值MIN_TEMP_1以及两步转移概率P3与T0对应的二阶转移概率阈值MIN_TEMP_2。如果一步转移概率P1大于或者等于字符T0对应的一阶转移概率阈值MIN_TEMP_1,同时则将T0与T1合并为一个整体,作为一个编码单元,如果不满足上面的条件,则T0和T1分别单独作为一个编码单元;如果一步转移概率P2大于或者等于字符T1对应的一阶转移概率阈值MIN_TEMP_1,同时则将T1与T2合并为一个整体,作为一个编码单元,如果不满足上面的条件,则T1与T2分别单独作为一个编码单元;如果两步转移概率P3大于或者等于字符T0对应的二阶转移概率阈值MIN_TEMP_2,且同时一步转移概率P1大于或者等于字符T0对应的一阶转移概率阈值MIN_TEMP_1,且和一步转移概率P2大于或者等于字符T1对应的一阶转移概率阈值MIN_TEMP_1,且则将T0、T1与T2合并为一个整体,作为一个编码单元,其中,l是当前字符的次数。本发明优选的实施例依次对待压缩文本的三个字符进行处理,根据对应的一阶转移概率阈值和二阶转移概率阈值动态地将三个字符或者两个字符合并为一个整体,作为一个编码单元。优选的,根据单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码,包括:第一步,统计并根据各个编码单元的次数,得到各个编码单元的概率;第二步,根据各个编码单元的概率,为各个编码单元分配不同的权重;第三步,根据分配的不同的权重,构建哈夫曼树;第四步,根据构建的哈夫曼树,进行哈夫曼编码。统计各个编码单元的次数,根据各个编码单元的次数,统计得到各个编码单元的概率,将得到的各个编码单元的概率对应地分配给各个编码单元作为构建哈夫曼树的权重,根据分配的权重作为初始权重,初始权重有m个权重{W1,W2,...,Wi,...Wm},根据分配的初始权重构成初始的二叉树集合F={T1,T2,...,Ti,...Tm},初始的二叉树集合中的每一个二叉树都是只有一个根节点,左子树和右子树均为空的二叉树;将初始二叉树集合中的各个二叉树按照根节点权重值的大小从小到大排序或者从大到小排序,从初始二叉树集合中选取两棵根节点权重值最小的两棵二叉树,构建新的二叉树,从初始二叉树集合中选取的两棵根节点权重值最小的两棵二叉树分别作为新的二叉树的左子树和右子树,构建的新二叉树的根节点的权重值是其左子树和右子树的权重值的和。从初始的二叉树集合中删除这两个权重值最小的二叉树,将构造的新的二叉树按照根节点权重值的大小从小到大的顺序加入到初始的二叉树集合,构建新的二叉树集合,按照这种方法,以此类推,直至二叉树集合F中只有一棵二叉树为止,最后二叉树集合F中构建的二叉树就是进行进一步哈夫曼编码所需的哈夫曼树;哈夫曼树的一个最主要应用是哈夫曼编码,所以根据构建的哈夫曼树进行哈夫曼编码。构建哈夫曼树的过程中每个二叉树的两个分支分别赋予“0”和“1”,可以左子树分支赋予“0”,右子树分支赋予“1”;也可以左子树分支赋予“1”,右子树分支赋予“0”,但是要保证构建的过程中每个二叉树值的赋予要对应,即全部的二叉树都是左子树分支赋予“0”,右子树分支赋予“1”;或者全部的二叉树都是左子树分支赋予“1”,右子树分支赋予“0”。根据最后构建的哈夫曼树,从哈夫曼树的根节点出发,直至要编码的单元,路径中遇到的“0”和“1”形成编码单元的码字,完成编码。最后的哈夫曼编码是根据每个编码单元的概率建立起来的,出现概率高的编码单元使用较短的码字编码,出现概率低的编码单元使用较长的码字编码。本发明实施例根据转移概率阈值动态合并的编码单元和没有合并的单个字符形成各个编码单元,根据各个编码单元的概率,构建哈夫曼树,对各个编码单元进行哈夫曼编码,完成待压缩文本的数据压缩。本发明实施例还公开了一种哈夫曼压缩装置,包括:字符空间确定模块201,用于获取并遍历待压缩文本,确定待压缩文本的字符空间,其中,字符空间包括:多个字符,且每个字符用于表示待压缩文本中的相同字符。转移概率确定模块202,用于根据字符空间的多个字符,确定字符空间中每个当前字符之后的字符分别对应为至少一个第一字符时对应的转移概率,其中,第一字符为字符空间中的任一字符。转移概率阈值确定模块203,用于根据转移概率及字符空间的多个字符的个数,得到转移概率阈值。编码单元确定模块,用于在所有转移概率中的每个转移概率分别达到预设条件时,将到达预设条件的转移概率对应的至少一个第一字符与当前字符、分别合并为一个编码单元,并将未达到预设条件的转移概率对应的当前字符作为单独编码单元,其中,预设条件为大于转移概率阈值且每个转移概率不等于当前字符的次数的倒数。编码模块205,用于根据单独编码单元及合并得到的编码单元,构建哈夫曼树,对各个编码单元进行编码。本发明实施例的哈夫曼压缩装置,通过字符空间确定模块、转移概率确定模块、转移概率阈值模块、编码单元模块和编码模块,获取待压缩文本,统计得到待压缩文本的字符空间,计算各个字符之后为字符空间中的任意字符的转移概率,通过转移概率和字符空间字符的个数,得到每个字符对应的转移概率阈值,依次对待压缩文本的字符进行处理,根据每个字符对应的转移概率和转移概率阈值的关系,对满足转移概率大于转移概率阈值条件对应的字符合并作为一个编码单元,不满足的,单独作为一个编码单元,最后根据各个编码单元的概率,构建哈夫曼树,进行哈夫曼编码,完成对待压缩文本的数据压缩。通过考虑字符之间的联系,对待压缩文本中满足条件的字符进行合并,使哈夫曼数据压缩时提升数据压缩效果,提高数据压缩率。需要说明的是,本发明实施例的装置是应用上述哈夫曼压缩方法的装置,则上述哈夫曼压缩方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。优选的,转移概率确定模块,包括:跳转次数确定子模块,用于根据字符空间,确定字符空间中的每个当前字符之后相邻的字符为一个第一字符的跳转次数;一步转移概率子模块,用于根据所有跳转次数,与所有跳转次数之和的比值,得到多个一步转移概率,其中,一步转移概率表示每个当前字符之后相邻的字符为一个第一字符的概率;一步转移概率矩阵构成子模块,用于多个一步转移概率构成一步转移概率矩阵;N步转移概率矩阵子模块,用于N个一步转移概率矩阵之积,得到N步转移概率矩阵,其中,N为大于1的自然数;N步转移概率子模块,用于根据N步转移概率矩阵的元素,得到N步转移概率,其中,N步转移概率表示每个当前字符之后相隔N-1个字符的字符为一个第一字符的转移概率。优选的,转移概率阈值确定模块,包括:一阶转移概率阈值确定子模块,用于每个当前字符之后相邻的字符为一个第一字符的所有一步转移概率之和,与字符空间的多个字符的个数的比值,得到每个当前字符对应的一阶转移概率阈值;N阶转移概率阈值确定子模块,用于每个当前字符之后相隔N-1个字符的字符为一个第一字符的所有N步转移概率之和,与字符空间的多个字符的个数的比值,得到每个当前字符对应的N阶转移概率阈值。优选的,哈夫曼压缩装置还包括:第一判断子模块,用于判断当前字符对应的一步转移概率是否大于当前字符对应的一阶转移概率阈值且一步转移概率不等于当前字符的次数的倒数;第一合并子模块,用于在第一判断子模块的判断结果为是时,将当前字符与当前字符之后相邻的一个第一字符合并为一个整体,作为一个编码单元;第二判断子模块,用于判断当前字符的N步转移概率是否大于N阶转移概率阈值且N步转移概率不等于当前字符的次数的倒数;第二合并子模块,用于在第二判断子模块的判断结果为是时,将当前字符与当前字符之后的N个第一字符合并为一个整体,作为一个编码单元。优选的,编码模块包括:编码单元概率确定子模块,用于统计并根据各个编码单元的次数,得到各个编码单元的概率;分配权重子模块,用于根据各个编码单元的概率,为各个编码单元分配不同的权重;哈夫曼树构建子模块,用于根据分配的不同的权重,构建哈夫曼树;哈夫曼编码子模块,用于根据构建的哈夫曼树,进行哈夫曼编码。本发明实施例根据转移概率阈值动态合并的编码单元和没有合并的单个字符形成各个编码单元,根据各个编码单元的概率,构建哈夫曼树,对各个编码单元进行哈夫曼编码,完成待压缩文本的数据压缩。通过具体的实例:待压缩文本T=abcddeeabf对本发明实施例哈夫曼压缩方法进行详细说明。遍历待压缩文本T,得到T的字符空间V为V={a,b,c,d,e,f},统计字符空间V中各个字符a,b,c,d,e,f的次数为分别为2,2,1,2,2,1,得到跳转次数的二阶矩阵根据得到的二维矩阵,通过上文公式(1)得到一步转移概率矩阵通过上文公式(2)两个一步转移概率矩阵相乘得到两步转移概率矩阵:P(2)=0.5000.5000.5000.5000000.50.500.25000.250.500.250.5000.250010000.]]>根据得到的一步转移概率矩阵和两步转移概率矩阵的元素可得到每个字符对应的一步转移概率和两步转移概率,通过上文公式(3)计算字符空间中各个字符对应的一阶转移概率阈值,公式(4)计算字符空间中各个字符对应的二阶转移概率阈值,计算步骤如下:字符a对应的一阶转移概率阈值:MIN_TEMP_1=(0+1+0+0+0+0)/2=1/2;字符a的二阶转移概率阈值:MIN_TEMP_2=(0.5+0+0+0.5+0+0)/2=1/2;字符b对应的一阶转移概率阈值:MIN_TEMP_1=(0+0+0.5+0+0+0.5)/2=1/2;字符b对应的二阶转移概率阈值:MIN_TEMP_2=(0.5+0+0+0.5+0+0)/2=1/2;字符c对应的一阶转移概率阈值:MIN_TEMP_1=(0+0+0+1+0+0)/1=1;字符c对应的二阶转移概率阈值:MIN_TEMP_2=(0+0+0+0.5+0.5+0)/1=1;字符d对应的一阶转移概率阈值:MIN_TEMP_1=(0+0+0+0.5+0.5+0)/2=1/2;字符d对应的二阶转移概率阈值:MIN_TEMP_2=(0.25+0+0+0.25+0.5+0)/2=1/2;字符e对应的一阶转移概率阈值:MIN_TEMP_1=(0.5+0+0+0+0.5+0)/2=1/2;字符e对应的一阶转移概率阈值:MIN_TEMP_2=(0.25+0.5+0+0+0.25+0)/2=1/2;字符f对应的一阶转移概率阈值:MIN_TEMP_1=(1+0+0+0+0+0)/1=1;字符f对应的一阶转移概率阈值:MIN_TEMP_2=(0+1+0+0+0+0)/1=1。依次读入三个字符(a,b,c),对于字符a,之后隔一个字符为字符c的两步转移概率为0.5,字符a对应的两阶转移概率为1/2,字符a的次数为2,两步转移概率为0.5等于字符a的次数的倒数,所以不将a,b,c合起来作为一个编码单元;对于字符a,之后的字符为b的一步转移概率为1,大于字符a对应的一阶转移概率阈值1/2,并且不等于字符a的次数的倒数,所以a和b合并作为一个编码单元;对于字符b,之后的字符为c的一步转移概率为1/2,等于字符b的次数的倒数,所以b和c不能合并作为一个编码单元。对整个待压缩文本按照(a,b,c)、(b,c,d)、(c,d,d)、(d,d,e)、(d,e,e)、(e,e,a)、(e,a,b)的顺序,依次根据(a,b,c)处理的方法对待压缩文本的所有字符进行处理,确定编码单元为:ab、c、d、e、f。统计各个编码单元ab、c、d、e、f的次数分别为:2,1,1,1,1,根据次数得到各个编码单元的概率分别为:1/3,1/6,1/6,1/6,1/6。将计算得到的各个编码单元ab、c、d、e、f的概率分别为1/3,1/6,1/6,1/6,1/6,对应地分配给编码单元作为构建哈夫曼树的初始权重。构建的哈夫曼树如图3所示。构建哈夫曼树的过程中每个二叉树的两个分支分别赋予“0”和“1”,可以左子树分支赋予“0”,右子树分支赋予“1”;也可以左子树分支赋予“1”,右子树分支赋予“0”,但是要保证构建的过程中每个二叉树值的赋予要对应,即全部的二叉树都是左子树分支赋予“0”,右子树分支赋予“1”;或者全部的二叉树都是左子树分支赋予“1”,右子树分支赋予“0”。这里使用的方法是左子树分支赋予“0”,右子树分支赋予“1”;根据最后构建的哈夫曼树,从哈夫曼树的根节点出发,直至要编码的单元,路径中遇到的“0”和“1”形成编码单元的码字,完成编码。根据构建的哈夫曼树,得到各个编码单元的编码为:ab:1,c:010,d:011,e:000,f:001。可得到待压缩文本的编码为10100110110000001001。待压缩文本T=abcddeeabf,相比较于传统的哈夫曼编码将每个字符分别作为一个编码单元,传统的哈夫曼编码进行编码的编码单元是a、b、c、d、e、f,需要给每个编码单元都分配压缩编码;本发明实施例考虑字符、上下文之间的关系,把有联系的、经常出现的字符合并起来作为单独的编码单元传统的哈夫曼得到的编码为10010100001011010100101001,总共需要26特位;本发明实施例得到的待压缩文本的编码为10100110110000001001,总共需要20个比特位;相比较于传统的哈夫曼得到的编码,本发明实施例得到的编码减少了6个比特位,减少了编码码字,减少了编码单元需要的比特位,提高待压缩文本进行压缩编码的压缩率。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1