一种数据编码方法、装置以及存储介质与流程

文档序号:17047779发布日期:2019-03-05 19:44阅读:178来源:国知局
一种数据编码方法、装置以及存储介质与流程
本发明涉及计算机
技术领域
,尤其涉及一种数据编码方法、装置以及存储介质。
背景技术
:数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。现有的数据压缩技术包括有损压缩和无损压缩,对于压缩后的数据还原来说,无损压缩是指使用压缩后的数据进行重构(或者叫做还原,解压缩),重构后的数据与原来的数据完全相同,而有损压缩是指使用压缩后的数据进行重构,重构后的数据与原来的数据有所不同,但不会导致对原始资料表达的信息的误解。目前,数据压缩的方式非常多,不同特点的数据具有不同的数据压缩方式(也就是编码方式),但针对于冗余度比较低的数据,比如二进制流,利用现有的压缩方法压缩后,其缩减的数据量有限,压缩效果差。技术实现要素:本发明的目的在于提供一种数据编码方法、装置以及存储介质,以解决现有数据压缩方法缩减的数据量有限,压缩效果差的技术问题。为解决上述技术问题,本发明实施例提供以下技术方案:一种数据编码方法,包括:获取待编码字符串、以及预设的区间长度,所述待编码字符串中包括多个第一预设字符和第二预设字符;根据所述第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值;从预设系数列表中选择出小于所述系数临界值的编码系数;根据所述区间长度和编码系数确定所述第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间;利用所述区间长度、编码系数、第一编码区间和第二编码区间对所述待编码字符串进行编码,得到编码值;根据所述编码值生成编码结果,并输出所述编码结果。为解决上述技术问题,本发明实施例还提供以下技术方案:一种数据编码装置,包括:获取模块,用于获取待编码字符串、以及预设的区间长度,所述待编码字符串中包括多个第一预设字符和第二预设字符;第一确定模块,用于根据所述第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值;选择模块,用于从预设系数列表中选择出小于所述系数临界值的编码系数;第二确定模块,用于根据所述区间长度和编码系数确定所述第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间;编码模块,用于利用所述区间长度、编码系数、第一编码区间和第二编码区间对所述待编码字符串进行编码,得到编码值;生成模块,用于根据所述编码值生成编码结果,并输出所述编码结果。进一步地,所述编码模块具体包括:第一获取子模块,用于获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度;确定子模块,用于根据当前待编码字符从当前第一编码区间和当前第二编码区间中确定目标区间;更新子模块,用于根据当前区间长度、当前编码系数和目标区间对当前第一编码区间和当前第二编码区间进行更新,以对当前待编码字符进行编码;返回模块,用于当编码完成时,将更新后的第一编码区间和更新后的第二编码区间作为当前第一编码区间和当前第二编码区间,将下一待编码字符作为当前待编码字符,并返回执行获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度的操作,直至所有待编码字符编码完毕。进一步地,所述更新子模块具体用于:根据当前区间长度和当前编码系数计算下一区间长度;获取历史已编码字符,并计算所述历史已编码字符和当前待编码字符之中,所述第一预设字符与第二预设字符的比值;根据所述比值、下一区间长度和目标区间的最小端点值对当前第一编码区间和当前第二编码区间进行更新。进一步地,所述更新子模块具体用于:根据所述下一区间长度和最小端点值计算区间上限值;利用所述比值对所述最小端点值和区间上限值之间的区间进行划分,得到两个子区间;利用划分之后较小的子区间对当前第一编码区间进行更新,利用划分之后较大的子区间对当前第二编码区间进行更新。进一步地,所述返回模块还用于:当编码完成时,统计所述历史已编码字符的个数;根据历史已编码字符的个数和当前编码系数计算下一编码系数;将下一编码系数作为当前编码系数,将下一区间长度作为当前区间长度。进一步地,所述编码模块还包括:第二获取子模块,用于当所有待编码字符编码完毕时,获取当前第二编码区间的两个端点值;判断子模块,用于判断所述两个端点值彼此间当前最高位的数字是否相同;输出子模块,用于若判断结果指示是,则将所述相同的数字作为目标数字进行输出,并将与所述最高位相邻的下一位作为当前最高位,之后返回执行获取当前第二编码区间的两个端点值的步骤,直至判断结果指示否;排序子模块,用于按照输出顺序对所述目标数字进行排序,得到编码值。进一步地,所述生成模块具体用于:统计所述待编码字符串中字符的总数量、以及第二预设字符的第二数量;将所述编码值、第二数量和总数量作为所述待编码字符串的编码结果。进一步地,该数据编码装置还包括解码模块,用于:在输出编码结果之后,获取解码请求,所述解码请求携带所述编码结果;根据所述解码请求生成参考字符串,所述参考字符串中包括所述第一数量个第一预设字符、以及第二数量个第二预设字符,所述第一数量等于所述总数和第二数量之差,所述参考字符串的最高位字符为所述第二预设字符;根据所述参考字符串对所述编码值进行解码。进一步地,该解码模块具体用于:对当前参考字符串进行编码,得到参考编码值;根据所述参考编码值和编码值确定解码字符,并根据所述解码字符对当前参考字符串中字符的排列组合进行更新;将更新后的参考字符串作为当前参考字符串,并返回执行对当前参考字符串进行编码的步骤,直至编码次数的累计值等于所述总数量为止;根据所有解码字符生成解码结果。进一步地,该解码模块具体用于:在所述编码值的尾部补充第一预设字符,以使所述编码值和参考编码值具有相等数量的字符;判断补充后的编码值是否不小于参考编码值;若是,则将第二预设字符确定为解码字符;若否,则将第一预设字符确定为解码字符。为解决上述技术问题,本发明实施例还提供以下技术方案:一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行上述任一项所述的数据编码方法中的步骤。本发明提供的数据编码方法、装置以及存储介质,通过获取待编码字符串、以及预设的区间长度,所述待编码字符串中包括多个第一预设字符和第二预设字符,并根据所述第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值,之后,从预设系数列表中选择出小于所述系数临界值的编码系数,并根据所述区间长度和编码系数确定所述第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间,之后,利用所述区间长度、编码系数、第一编码区间和第二编码区间对所述待编码字符串进行编码,得到编码值,根据所述编码值生成编码结果,并输出所述编码结果,从而可以较好的实现二进制数据的无损压缩,压缩能力强,压缩效果好。附图说明下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其它有益效果显而易见。图1a为本发明实施例提供的数据编码方法的流程示意图;图1b为本发明实施例提供的步骤s105的流程示意图;图1c为本发明实施例提供的步骤s105的另一流程示意图;图2为本发明实施例提供的数据编码方法的另一流程示意图;图3a为本发明实施例提供的数据编码装置的结构示意图;图3b为本发明实施例提供的编码模块的结构示意图;图3c为本发明实施例提供的编码模块的另一结构示意图;图4为本发明实施例提供的电子设备的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种数据编码方法、装置、存储介质以及电子设备,以下将分别进行详细说明。一种数据编码方法,包括:获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符;根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值;从预设系数列表中选择出小于该系数临界值的编码系数;根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间;利用该区间长度、编码系数、第一编码区间和第二编码区间对该待编码字符串进行编码,得到编码值;根据该编码值生成编码结果,并输出该编码结果。如图1a所示,该数据编码方法的具体流程可以如下:s101、获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符。本实施例中,该待编码字符串包括二进制字符串,该第一预设字符可以为0,该第二预设字符可以为1。该预设的区间长度主要用于限定编码的初始空间大小,其可以是人为设定的100000000000,或者更大,具体可以根据实际需求而定。s102、根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值。本实施例中,可以通过查表的方式获取与该最大次数对应的系数临界值,其大小通常只与该待编码字符串中连续1的个数有关,连续1的个数越多,临界值越小。实际应用过程中,可以通过对大量样本的计算归纳出系数值与样本中连续1个数的关系,之后将不同连续1的个数对应的系数临界值存储在一个表格上,需要时,直接根据连续1的个数从表格中获取对应值即可,其中,该计算主要通过公式实现,其中,i,j,n∈[1,len],len为每一样本的字符总长度,p(n)>1,t为每一样本中所有符号的总统计值,f为每一样本中某个符号自己的统计值,o为某个符号之前的所有符号的累计统计值,α为系数值,通过p(n)的变化确定系数值与样本中连续1个数的关系。s103、从预设系数列表中选择出小于该系数临界值的编码系数。本实施例中,该预设系数列表可以是预先设定好的,其可以根据连续1的不同个数提前计算出对应的系数临界值,然后将这些系数临界值作为系数值按照从小到大或者从大到小的顺序存储在预设系数列表中,这样,当需要选出编码系数时,可以先从预设系数列表中选出小于当前的系数临界值的系数值,若选出的系数值为单个,可以直接作为编码系数,若选出的系数值为多个,可以通过随机或者其他设定方式从多个中选择一个作为编码系数。s104、根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间。本实施例中,可以先通过公式r′0=r0*α0对区间长度初始化,其中,r′0为初始化后的区间长度,r0为预设的区间长度,α0为编码系数,比如若α0为1.1,r0为100000000000,则初始化后的区间长度r′0为110000000000,此时,初始化区间可以为[0,110000000000],之后,对该初始化区间进行划分,得到较小的第一编码区间和第二编码区间。通常,对于二进制字符串,其划分方式可以是等分,也即该第一编码区间u′0=[0,54999999999],该第二编码区间u′1=[55000000000,110000000000],且u′0为字符0对应的区间,u′1为字符1对应的区间,其中,u′0和u′1的区间长度为r′0/2。s105、利用该区间长度、编码系数、第一编码区间和第二编码区间对该待编码字符串进行编码,得到编码值。例如,请参见图1b,上述步骤s105具体可以包括:s1051、获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度。本实施例中,该编码系数αn可以是不断变化的,也可以是个定值,当为定值时,其可以是α0,当为非定值时,可以通过k(αn)=αn-αn-1,其中k(αn)可以是一个指定的定性函数,如加、乘、逻辑(重要或不重要)等。该待编码字符sn、第一编码区间u′0(n)、第二编码区间u′1(n)和区间长度r′n是不断变化的,每编码完一个字符,就更新一次,且若为首次编码,该待编码字符通常为该待编码字符串的首字符,此时,该编码系数为α0,该第一编码区间为u′0(0),该第二编码区间为u′1(0),该区间长度(也即u′0(0)和u′1(0)的总长度)为r′0。s1052、根据当前待编码字符从当前第一编码区间和当前第二编码区间中确定目标区间。例如,上述步骤s1052具体可以包括:判断当前待编码字符是否为该第一预设字符;若是,则将当前第一编码区间确定为目标区间;若否,则将当前第二编码区间确定为目标区间。本实施例中,在编码过程中,需要找到当前待编码字符sn对应的编码区间,比如,若当前待编码字符sn为0,则目标区间为u′0,若当前待编码字符sn为1,则目标区间为u′1。s1053、根据当前区间长度、当前编码系数和目标区间对当前第一编码区间和当前第二编码区间进行更新,以对当前待编码字符进行编码。例如,上述步骤s1053具体可以包括:1-1、根据当前区间长度和当前编码系数计算下一区间长度。本实施例中,n∈[1,len],len为待编码字符串的总长度,ls为待编码字符串中符号类型个数。例如,对于二进制字符串,由于其符号只包括0和1,故ls为2,此时,等等。1-2、获取历史已编码字符,并计算该历史已编码字符和当前待编码字符之中,该第一预设字符与第二预设字符的比值。本实施例中,可以通过自适应概率统计模型来计算动态的比值fk,也即时刻计算历史已编码字符和当前待编码字符之中第一预设字符与第二预设字符之比,fk≠fk-1,比如,对于符号序列1010000110010101000100010,若当前编码字符为第三个字符,则该比值为1/2。当然,也可以通过静态统计模型来计算静态的比值fk,也即直接将该比值定义为静态值(比如fk=1),fk=fk-1。1-3、根据该比值、下一区间长度和目标区间的最小端点值对当前第一编码区间和当前第二编码区间进行更新。例如,上述步骤1-3具体可以包括:根据该下一区间长度和最小端点值计算区间上限值;利用该比值对该最小端点值和区间上限值之间的区间进行划分,得到两个子区间;利用划分之后较小的子区间对当前第一编码区间进行更新,利用划分之后较大的子区间对当前第二编码区间进行更新。本实施例中,区间上限值h′n=l′n-1+r′n,l′n-1为目标区间的最小端点,在自适应概率统计模型中,u′0(n)=[l′n-1,l′n-1+(fk/(fk+1))*r′n-1],u′1(n)=[l′n-1+(fk/(fk+1))*r′n,h′n]。在静态概率统计模型中,u′0(n)=[l′n-1,l′n-1+r′n/2-1],u′1(n)=[l′n-1+r′n/2,h′n]。s1054、当编码完成时,将更新后的第一编码区间和更新后的第二编码区间作为当前第一编码区间和当前第二编码区间,将下一待编码字符作为当前待编码字符,并返回执行上述步骤s1051,直至所有待编码字符编码完毕。本实施例中,当n=len时,整个待编码字符串编码完毕,此时,会得到u′1(n)和u′0(n)。当然,针对于每个待编码字符的编码操作,其编码流程是相同的,也即该待编码字符串的编码过程是个不断循环的过程,为使循环能正常进行,对于每次循环涉及编码系数和区间长度应不断更新,也即对于每个待编码字符,当编码完成时,该数据编码方法还可以包括:统计该历史已编码字符的个数;根据历史已编码字符的个数和当前编码系数计算下一编码系数;将下一编码系数作为当前编码系数,将下一区间长度作为当前区间长度。本实施例中,该编码系数αn可以是静态值,比如αn=α0,也可以是动态值,当为动态值时,k(αn)=αn-αn-1,其中,n-1为历史已编码字符的个数,当此次编码操作完成时,对于下次编码操作,其编码系数为αn,区间长度为r′n。此外,由于所有待编码字符编码完毕时,得到的是u′1(n)和u′0(n),而该待编码字符串的编码值可以是u′1(n)和u′0(n)中的任意一个值,因此,请参见图1c,上述步骤s105还可以包括:s1055、当所有待编码字符编码完毕时,获取当前第二编码区间的两个端点值;s1056、判断该两个端点值彼此间当前最高位的数字是否相同;s1057、若判断结果指示是,则将该相同的数字作为目标数字进行输出,并将与该最高位相邻的下一位作为当前最高位,之后返回执行s1055,直至判断结果指示否;s1058、按照输出顺序对该目标数字进行排序,得到编码值。本实施例中,若u′1(n)=[73042919870,73042952160],则编码值v为730429。s106、根据该编码值生成编码结果,并输出该编码结果。例如,上述步骤s106具体可以包括:统计该待编码字符串中字符的总数量、以及第二预设字符的第二数量;将该编码值、第二数量和总数量作为该待编码字符串的编码结果。本实施例中,若待编码字符串为1010000110010101000100010,则总数量len为25,第二数量count为9,编码结果为v,count,len。此外,在输出编码结果之后,还涉及到解码操作,也即,该数据编码方法还可以包括:2-1、获取解码请求,该解码请求携带该编码结果;2-2、根据该解码请求生成参考字符串,该参考字符串中包括该第一数量个第一预设字符、以及第二数量个第二预设字符,该第一数量等于该总数和第二数量之差,该参考字符串的最高位字符为该第二预设字符。本实施例中,对于count=9,len=25,则第一数量为16,该参考字符串的长度也为25个字符,且首字符为1,尾字符全部为1,也即该参考字符串的初始序列为1000000000000000011111111。2-3、根据该参考字符串对该编码值进行解码。例如,上述步骤2-3具体可以包括:对当前参考字符串进行编码,得到参考编码值;根据该参考编码值和编码值确定解码字符,并根据该解码字符对当前参考字符串中字符的排列组合进行更新;将更新后的参考字符串作为当前参考字符串,并返回执行对当前参考字符串进行编码的步骤,直至编码次数的累计值等于该总数量为止;根据所有解码字符生成解码结果。本实施例中,对于每个参考字符串,均可以按照上述编码方法对参考字符串中的每一字符进行编码,其预设的区间长度也为r0,其初始的编码系数也为α0,当参考字符串中的全部字符都编码完毕时,最终得到字符0对应的第一编码区间d′0和字符1对应的第二编码区间d′1,不同的是,该参考字符串的编码值(也即参考编码值)并非高位相同的数值,其可以是先直接取d′0的最小端点值作为tn,然后根据指定函数tn=tny(n)来计算参考编码值tn,其中函数y(n)是通过试验得出的,其与αn有关,之后,根据参考编码值tn和编码值v确定解码字符,该解码字符主要包括1和0。当编码次数达到len时,可以将所有解码字符按照确定顺序排列,最终得到的字符序列也即解码结果。需要说明的是,该当前参考字符串是不断变化的,每次变化是根据上一参考字符串及其参考编码值tn而定,也即根据上一参考字符串及其参考编码值tn对当前参考字符串中字符1和0的排列位置进行重新调整。该调整主要涉及字符1的移动,比如,若上一参考字符串为1100000000000000001111111,当解码字符为1时,需要将1100000000000000001111111中尾部最高位的字符1移动到前端最低位的字符1的后面,得到1110000000000000000111111(也即更新后的参考字符串),当解码字符为0时,需要将1100000000000000001111111中前端最低位的字符1往后移动一位,得到1010000000000000001111111(也即更新后的参考字符串)。进一步地,上述“根据该参考编码值和编码值确定解码字符”具体可以包括:在该编码值的尾部补充第一预设字符,以使该编码值和参考编码值具有相等数量的字符;判断补充后的编码值是否不小于参考编码值;若是,则将第二预设字符确定为解码字符;若否,则将第一预设字符确定为解码字符。本实施例中,当v=730429时,对于第n次编码操作,若参考编码值tn=85252570554,则v补0之后可以变为v′=73042900000,此时,tn>v′,得到的解码字符为0,若参考编码值tn=55004691494,此时,tn≤v′,得到的解码字符为1。根据上述实施例所描述的方法,以下将举例作进一步详细说明。在本实施例中,将以数据编码装置集成在电子设备中,该概率统计模型为静态概率统计模型,该编码系数为静态值为例进行详细说明。如图2所示,一种数据编码方法,具体流程可以如下:s201、电子设备获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符。譬如,该待编码字符串可以为1010000110010101000100010,该预设的区间长度r0=100000000000,该第一预设字符为0,该第二预设字符为1。s202、电子设备根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值,并从预设系数列表中选择出小于该系数临界值的编码系数。譬如,对于1010000110010101000100010,1连续出现的最大次数为2,从表中确定出的系数临界值可以为1.153133…3,从而可以将预设系数列表中属于(0,1.153133…3)的任一系数作为编码系数α0,比如选择α0=1.1。s203、电子设备根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间。譬如,可以先通过公式r′0=r0*α0对区间长度初始化,得到初始化后的区间长度r′0=110000000000,之后通过等分的方式,得到第一编码区间u′0(0)=[0,54999999999],第二编码区间u′1(0)=[55000000000,110000000000]。s204、电子设备获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度。s205、若当前待编码字符为该第一预设字符,电子设备将当前第一编码区间确定为目标区间,若当前待编码字符为该第二预设字符,电子设备将当前第二编码区间确定为目标区间。s206、电子设备根据当前区间长度和当前编码系数计算下一区间长度,并根据该下一区间长度和目标区间的最小端点值计算区间上限值。s207、电子设备对该最小端点值和区间上限值之间的区间进行等分,得到两个子区间,将划分之后较小的子区间作为当前第一编码区间将划分之后较大的子区间作为当前第二编码区间。s208、电子设备判断该待编码字符串是否编码完毕,若否,则将下一待编码字符作为当前待编码字符,将下一区间长度作为当前区间长度,并返回执行上述步骤s204,若是,则执行下述步骤s209。譬如,αn=α0=1.1,ls=2,fk=1,k∈[1,ls],待编码字符串为1010000110010101000100010,整个编码过程如下:获取第1个待编码字符1,r′1/2=30250000000,使用并调整区间u′1(0),得到u′0(1)=[55000000000,85249999999],u′1(1)=[85250000000,115500000000]。获取第2个待编码字符0,r′2/2=16637500000;使用并调整区间u′0(1),得到u′0(2)=[55000000000,71637499999],u′1(2)=[71637500000,88275000000]获取第3个待编码字符1,r′3/2=9150625000;使用并调整区间u′1(2),得到u′0(3)=[71637500000,80788124999],u′1(3)=[80788125000,89938750000]。获取第4个待编码字符0,r′4/2=5032843750;使用并调整区间u′0(3),得到u′0(4)=[71637500000,76670343749],u′1(4)=[76670343750,81703187500],以此类推,得到下表表1:表1s209、电子设备获取当前第二编码区间的两个端点值,并判断该两个端点值彼此间当前最高位的数字是否相同,若是,则执行下述步骤s210,若否,则执行下述步骤s211。s210、电子设备将该相同的数字作为目标数字进行输出,并将与该最高位相邻的下一位作为当前最高位,之后返回执行上述步骤s209。譬如,对于u′1(25)=[73042919870,73042952160],输出的目标数字包括7,3,0,4,2,9。s211、电子设备按照输出顺序对该目标数字进行排序,得到编码值,之后统计该待编码字符串中字符的总数量、以及第二预设字符的第二数量,并将该编码值、第二数量和总数量作为该待编码字符串的编码结果。譬如,统计出的总数量len为25,第二数量count为9,按照输出顺序对目标数字排序后,编码值v为730429,编码结果为v,count,len。需要说明的是,比起传统的编码结果63118085,v=730429只有6个数值,少2个数值,提高了25%的压缩比,压缩能力得到了明显提高,压缩效果好。s212、电子设备获取解码请求,该解码请求携带该编码结果。s213、电子设备根据该解码请求生成参考字符串,该参考字符串中包括该第一数量个第一预设字符、以及第二数量个第二预设字符,该第一数量等于该总数和第二数量之差,该参考字符串的最高位字符为该第二预设字符。譬如,对于count=9,len=25,则第一数量为16,该参考字符串的长度也为25个字符,且首字符为1,尾字符全部为1,也即该参考字符串的初始序列为1000000000000000011111111。s214、电子设备对当前参考字符串进行编码,得到参考编码值,并在该编码值的尾部补充第一预设字符,以使该编码值和参考编码值具有相等数量的字符,之后判断补充后的编码值是否不小于参考编码值,若是,则将第二预设字符确定为解码字符,若否,则将第一预设字符确定为解码字符。s215、电子设备根据该解码字符对当前参考字符串中字符的排列组合进行更新,并将更新后的参考字符串作为当前参考字符串,之后返回执行上述步骤s214,直至编码次数的累计值等于该总数量为止;之后根据所有解码字符生成解码结果。譬如,由于通过实验得知,α0=1.1时,y(n)≈1,所以,在对进行编码的过程中,可以取y(n)=1,也即tny(n)=tn或v/y(n)=v,当然,该参考字符串的编码方法可以参见待编码字符串的编码方法,此处不再赘述,唯一不同的是,在最终得到字符0对应的第一编码区间d′0和字符1对应的第二编码区间d′1时,该参考字符串的参考编码值并非高位相同的数值,其应是直接取d′0的最小端点值作为tn,然后根据tny(n)=tn得到参考编码值tn。整个解码过程如下:获取count=9,len=25和v=730429,得到参考字符串1000000000000000011111111。根据1000000000000000011111111得出其参考编码值t0=55004691494,在编码值v的尾部补充0,得到v′=73042900000,发现v'>t0,所以输出解码字符1;count=count-1(只有解码出符号1时才减1),len=len-1。此时,对1000000000000000011111111进行调整,得到参考字符串1100000000000000001111111,根据1100000000000000001111111得出其参考编码值t1=85252570554,发现v'<t1,输出0;count=count-0(只有解码出符号1时才减1),len=len-1。此时,对1100000000000000001111111进行调整,得到参考字符串1010000000000000001111111,得出t2=71640070554,发现v'>t2,输出符号1;count=count-1(只有解码出符号1时才减1),len=len-1。此时,对1010000000000000001111111进行调整,得到参考字符串1011000000000000000111111,根据1011000000000000000111111得出t3=80789529037。v'<t3,输出符号0;以此类推,对1011000000000000000111111进行调整,得到参考字符串1010100000000000000111111,利用1010100000000000000111111继续解码。当len=0时解码结束。请参见下表表2,其为上述解码过程所得的结果,由下表可知其解码结果为1010000110010101000100010,也即可以完整的得到待编码序列,也即上述编码方法为无损压缩方法,这种压缩方法主要应用于word等对还原度要求较高的数据类型。tnv'解码字符55004691494730429000001852525705547304290000007164007055473042900000180789529037730429000000766717477877304290000007440696810073042900000073161339271730429000000724762434167304290000017293613849073042900000173189080781730429000000730750979587304290000007301240740573042900000173054355308730429000000730353914167304290000017304803262273042900000073042296045730429000001730460935917304290000007304435827673042900000073043403853730429000000730428789207304290000017304318174273042900000073043022950730429000000730429356157304290000007304288758073042900000173042937629730429000000表2由上述可知,本实施例提供的数据编码方法,其中电子设备可以获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符,接着,根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值,并从预设系数列表中选择出小于该系数临界值的编码系数,接着,根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间,接着,获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度,接着,判断当前待编码字符是否为该第一预设字符,若是,则将当前第一编码区间确定为目标区间,若否,则将当前第二编码区间确定为目标区间,接着,根据当前区间长度和当前编码系数计算下一区间长度,并根据该下一区间长度和目标区间的最小端点值计算区间上限值,接着,对该最小端点值和区间上限值之间的区间进行等分,得到两个子区间,将划分之后较小的子区间作为当前第一编码区间将划分之后较大的子区间作为当前第二编码区间,将下一待编码字符作为当前待编码字符,将下一区间长度作为当前区间长度,之后,返回执行获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度的操作,当所有待编码字符编码完毕时,电子设备获取当前第二编码区间的两个端点值,并判断该两个端点值彼此间当前最高位的数字是否相同,若是,将该相同的数字作为目标数字进行输出,并将与该最高位相邻的下一位作为当前最高位,之后返回执行获取当前第二编码区间的两个端点值的操作,若否,则按照输出顺序对该目标数字进行排序,得到编码值,之后统计该待编码字符串中字符的总数量、以及第二预设字符的第二数量,并将该编码值、第二数量和总数量作为该待编码字符串的编码结果,从而可以较好的实现二进制字符串的编码操作,压缩能力强,之后,电子设备可以获取解码请求,该解码请求携带该编码结果,接着,根据该解码请求生成参考字符串,该参考字符串中包括该第一数量个第一预设字符、以及第二数量个第二预设字符,该第一数量等于该总数和第二数量之差,该参考字符串的最高位字符为该第二预设字符,接着,对当前参考字符串进行编码,得到参考编码值,接着,在该编码值的尾部补充第一预设字符,以使该编码值和参考编码值具有相等数量的字符,并判断补充后的编码值是否不小于参考编码值,若是,则将第二预设字符确定为解码字符,若否,则将第一预设字符确定为解码字符,接着,根据该解码字符对当前参考字符串中字符的排列组合进行更新,并将更新后的参考字符串作为当前参考字符串,之后返回执行对当前参考字符串进行编码,得到参考编码值的操作,直至编码次数的累计值等于该总数量为止,最后可以根据所有解码字符生成解码结果,从而实现二进制字符串的无损压缩,方法简单,灵活性高。根据上述实施例所描述的方法,本实施例将从数据编码装置的角度进一步进行描述,该数据编码装置具体可以作为独立的实体来实现,也可以集成在终端或服务器等电子设备中来实现,该电子设备可以包括智能手机、平板电脑和个人计算机等。请参阅图3a,图3a具体描述了本发明实施例提供的数据编码装置,其可以包括:获取模块10、第一确定模块20、选择模块30、第二确定模块40、编码模块50和生成模块60,其中:(1)获取模块10获取模块10,用于获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符。本实施例中,该待编码字符串包括二进制字符串,该第一预设字符可以为0,该第二预设字符可以为1。该预设的区间长度主要用于限定编码的初始空间大小,其可以是人为设定的100000000000,或者更大,具体可以根据实际需求而定。(2)第一确定模块20第一确定模块20,用于根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值。本实施例中,可以通过查表的方式获取与该最大次数对应的系数临界值,其大小通常只与该待编码字符串中连续1的个数有关,连续1的个数越多,临界值越小。实际应用过程中,可以通过对大量样本的计算归纳出系数值与样本中连续1个数的关系,之后将不同连续1的个数对应的系数临界值存储在一个表格上,需要时,直接根据连续1的个数从表格中获取对应值即可,其中,该计算主要通过公式实现,其中,i,j,n∈[1,len],len为每一样本的字符总长度,p(n)>1,t为每一样本中所有符号的总统计值,f为每一样本中某个符号自己的统计值,o为某个符号之前的所有符号的累计统计值,α为系数值,通过p(n)的变化确定系数值与样本中连续1个数的关系。(3)选择模块30选择模块30,用于从预设系数列表中选择出小于该系数临界值的编码系数。本实施例中,该预设系数列表可以是预先设定好的,其可以根据连续1的不同个数提前计算出对应的系数临界值,然后将这些系数临界值作为系数值按照从小到大或者从大到小的顺序存储在预设系数列表中,这样,当需要选出编码系数时,可以先从预设系数列表中选出小于当前的系数临界值的系数值,若选出的系数值为单个,可以直接作为编码系数,若选出的系数值为多个,可以通过随机或者其他设定方式从多个中选择一个作为编码系数。(4)第二确定模块40第二确定模块40,用于根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间。本实施例中,可以先通过公式r′0=r0*α0对区间长度初始化,其中,r′0为初始化后的区间长度,r0为预设的区间长度,α0为编码系数,比如若α0为1.1,r0为100000000000,则初始化后的区间长度r′0为110000000000,此时,初始化区间可以为[0,110000000000],之后,对该初始化区间进行划分,得到较小的第一编码区间和第二编码区间。通常,对于二进制字符串,其划分方式可以是等分,也即该第一编码区间u′0=[0,54999999999],该第二编码区间u′1=[55000000000,110000000000],且u′0为字符0对应的区间,u′1为字符1对应的区间,其中,u′0和u′1的区间长度为r′0/2。(5)编码模块50编码模块50,用于利用该区间长度、编码系数、第一编码区间和第二编码区间对该待编码字符串进行编码,得到编码值。例如,请参见图3b,该编码模块50具体可以包括:第一获取子模块51,用于获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度。本实施例中,该编码系数αn可以是不断变化的,也可以是个定值,当为定值时,其可以是α0,当为非定值时,可以通过k(αn)=αn-αn-1,其中k(αn)可以是一个指定的定性函数,如加、乘、逻辑(重要或不重要)等。该待编码字符sn、第一编码区间u′0(n)、第二编码区间u′1(n)和区间长度r′n是不断变化的,每编码完一个字符,就更新一次,且若为首次编码,该待编码字符通常为该待编码字符串的首字符,此时,该编码系数为α0,该第一编码区间为u′0(0),该第二编码区间为u′1(0),该区间长度(也即u′0(0)和u′1(0)的总长度)为r′0。确定子模块52,用于根据当前待编码字符从当前第一编码区间和当前第二编码区间中确定目标区间。例如,确定子模块52具体可以用于:判断当前待编码字符是否为该第一预设字符;若是,则将当前第一编码区间确定为目标区间;若否,则将当前第二编码区间确定为目标区间。本实施例中,在编码过程中,需要找到当前待编码字符sn对应的编码区间,比如,若当前待编码字符sn为0,则确定子模块52确定的目标区间为u′0,若当前待编码字符sn为1,则确定子模块52确定的目标区间为u′1。更新子模块53,用于根据当前区间长度、当前编码系数和目标区间对当前第一编码区间和当前第二编码区间进行更新,以对当前待编码字符进行编码;例如,该更新子模块53具体可以用于:1-1、根据当前区间长度和当前编码系数计算下一区间长度。本实施例中,n∈[1,len],len为待编码字符串的总长度,ls为待编码字符串中符号类型个数。例如,对于二进制字符串,由于其符号只包括0和1,故ls为2,此时,等等。1-2、获取历史已编码字符,并计算该历史已编码字符和当前待编码字符之中,该第一预设字符与第二预设字符的比值。本实施例中,可以通过自适应概率统计模型来计算动态的比值fk,也即时刻计算历史已编码字符和当前待编码字符之中第一预设字符与第二预设字符之比,fk≠fk-1,比如,对于符号序列1010000110010101000100010,若当前编码字符为第三个字符,则该比值为1/2。当然,也可以通过静态统计模型来计算静态的比值fk,也即直接将该比值定义为静态值(比如fk=1),fk=fk-1。1-3、根据该比值、下一区间长度和目标区间的最小端点值对当前第一编码区间和当前第二编码区间进行更新。例如,上述步骤1-3具体可以包括:根据该下一区间长度和最小端点值计算区间上限值;利用该比值对该最小端点值和区间上限值之间的区间进行划分,得到两个子区间;利用划分之后较小的子区间对当前第一编码区间进行更新,利用划分之后较大的子区间对当前第二编码区间进行更新。本实施例中,区间上限值h′n=l′n-1+r′n,l′n-1为目标区间的最小端点,在自适应概率统计模型中,u′0(n)=[l′n-1,l′n-1+(fk/(fk+1))*r′n-1],u′1(n)=[l′n-1+(fk/(fk+1))*r′n,h′n]。在静态概率统计模型中,u′0(n)=[l′n-1,l′n-1+r′n/2-1],u′1(n)=[l′n-1+r′n/2,h′n]。返回模块54,用于当编码完成时,将更新后的第一编码区间和更新后的第二编码区间作为当前第一编码区间和当前第二编码区间,将下一待编码字符作为当前待编码字符,并返回执行获取当前待编码字符、当前编码系数、当前第一编码区间、当前第二编码区间和当前区间长度的操作,直至所有待编码字符编码完毕。本实施例中,当n=len时,整个待编码字符串编码完毕,此时,会得到u′1(n)和u′0(n)。当然,针对于每个待编码字符的编码操作,其编码流程是相同的,也即该该待编码字符串的编码过程是个不断循环的过程,为使循环能正常进行,对于每次循环涉及编码系数和区间长度应不断更新,也即,该返回模块54还可以用于:当编码完成时,统计该历史已编码字符的个数;根据历史已编码字符的个数和当前编码系数计算下一编码系数;将下一编码系数作为当前编码系数,将下一区间长度作为当前区间长度。本实施例中,该编码系数αn可以是静态值,比如αn=α0,也可以是动态值,当为动态值时,k(αn)=αn-αn-1,其中,n-1为历史已编码字符的个数,当此次编码操作完成时,对于下次编码操作,其编码系数为αn,区间长度为r′n。此外,由于所有待编码字符编码完毕时,得到的是u′1(n)和u′0(n),而该待编码字符串的编码值可以是u′1(n)和u′0(n)中的任意一个值,因此,请参见图3c,该编码模块50还可以包括:第二获取子模块55,用于当所有待编码字符编码完毕时,获取当前第二编码区间的两个端点值;判断子模块56,用于判断该两个端点值彼此间当前最高位的数字是否相同;输出子模块57,用于若判断结果指示是,则将该相同的数字作为目标数字进行输出,并将与该最高位相邻的下一位作为当前最高位,之后返回执行获取当前第二编码区间的两个端点值的步骤,直至判断结果指示否;排序子模块58,用于按照输出顺序对该目标数字进行排序,得到编码值。本实施例中,若u′1(n)=[73042919870,73042952160],则编码值v为730429。(6)生成模块60生成模块60,用于根据该编码值生成编码结果,并输出该编码结果。例如,该生成模块60具体可以用于:统计该待编码字符串中字符的总数量、以及第二预设字符的第二数量;将该编码值、第二数量和总数量作为该待编码字符串的编码结果。本实施例中,若待编码字符串为1010000110010101000100010,则总数量len为25,第二数量count为9,编码结果为v,count,len。此外,在输出编码结果之后,还涉及到解码操作,也即,该数据编码装置还可以包括解码模块,用于:在输出编码结果之后,获取解码请求,该解码请求携带该编码结果;根据该解码请求生成参考字符串,该参考字符串中包括该第一数量个第一预设字符、以及第二数量个第二预设字符,该第一数量等于该总数和第二数量之差,该参考字符串的最高位字符为该第二预设字符;根据该参考字符串对该编码值进行解码。2-1、获取解码请求,该解码请求携带该编码结果;2-2、根据该解码请求生成参考字符串,该参考字符串中包括该第一数量个第一预设字符、以及第二数量个第二预设字符,该第一数量等于该总数和第二数量之差,该参考字符串的最高位字符为该第二预设字符。本实施例中,对于count=9,len=25,则第一数量为16,该参考字符串的长度也为25个字符,且首字符为1,尾字符全部为1,也即该参考字符串的初始序列为1000000000000000011111111。2-3、根据该参考字符串对该编码值进行解码。例如,该解码模块进一步可以用于:对当前参考字符串进行编码,得到参考编码值;根据该参考编码值和编码值确定解码字符,并根据该解码字符对当前参考字符串中字符的排列组合进行更新;将更新后的参考字符串作为当前参考字符串,并返回执行对当前参考字符串进行编码的步骤,直至编码次数的累计值等于该总数量为止;根据所有解码字符生成解码结果。本实施例中,对于每个参考字符串,均可以按照上述编码方法对参考字符串中的每一字符进行编码,其预设的区间长度也为r0,其初始的编码系数也为α0,当参考字符串中的全部字符都编码完毕时,最终得到字符0对应的第一编码区间d′0和字符1对应的第二编码区间d′1,不同的是,该参考字符串的编码值(也即参考编码值)并非高位相同的数值,其可以是先直接取d′0的最小端点值作为tn,然后根据指定函数tn=tny(n)来计算参考编码值tn,其中函数y(n)是通过试验得出的,其与αn有关,之后,根据参考编码值tn和编码值v确定解码字符,该解码字符主要包括1和0。当编码次数达到len时,可以将所有解码字符按照确定顺序排列,最终得到的字符序列也即解码结果。需要说明的是,该当前参考字符串是不断变化的,每次变化是根据上一参考字符串及其参考编码值tn而定,也即根据上一参考字符串及其参考编码值tn对当前参考字符串中字符1和0的排列位置进行重新调整。该调整主要涉及字符1的移动,比如,若上一参考字符串为1100000000000000001111111,当解码字符为1时,需要将1100000000000000001111111中尾部最高位的字符1移动到前端最低位的字符1的后面,得到1110000000000000000111111(也即更新后的参考字符串),当解码字符为0时,需要将1100000000000000001111111中前端最低位的字符1往后移动一位,得到1010000000000000001111111(也即更新后的参考字符串)。进一步地,该解码模块可以用于:在该编码值的尾部补充第一预设字符,以使该编码值和参考编码值具有相等数量的字符;判断补充后的编码值是否不小于参考编码值;若是,则将第二预设字符确定为解码字符;若否,则将第一预设字符确定为解码字符。本实施例中,当v=730429时,对于第n次编码操作,若参考编码值tn=85252570554,则v补0之后可以变为v′=73042900000,此时,tn>v′,得到的解码字符为0,若参考编码值tn=55004691494,此时,tn≤v′,得到的解码字符为1。具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。由上述可知,本实施例提供的数据编码装置,通过获取模块10获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符,第一确定模块20根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值,之后,选择模块30从预设系数列表中选择出小于该系数临界值的编码系数,第二确定模块40根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间,之后,编码模块50利用该区间长度、编码系数、第一编码区间和第二编码区间对该待编码字符串进行编码,得到编码值,生成模块60根据该编码值生成编码结果,并输出该编码结果,从而可以较好的实现二进制数据的无损压缩,压缩能力强,压缩效果好。相应的,本发明实施例还提供一种电子设备,如图4所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:该电子设备可以包括一个或者一个以上处理核心的处理器701、一个或一个以上计算机可读存储介质的存储器702、电源703和输入单元704等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:处理器701是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器701可包括一个或多个处理核心;优选的,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。存储器702可用于存储软件程序以及模块,处理器701通过运行存储在存储器702的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器702可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器702还可以包括存储器控制器,以提供处理器701对存储器702的访问。电子设备还包括给各个部件供电的电源703,优选的,电源703可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源703还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。该电子设备还可包括输入单元704,该输入单元704可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器701会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能,如下:获取待编码字符串、以及预设的区间长度,该待编码字符串中包括多个第一预设字符和第二预设字符;根据该第二预设字符在待编码字符串中连续出现的最大次数确定系数临界值;从预设系数列表中选择出小于该系数临界值的编码系数;根据该区间长度和编码系数确定该第一预设字符对应的第一编码区间、以及第二预设字符对应的第二编码区间;利用该区间长度、编码系数、第一编码区间和第二编码区间对该待编码字符串进行编码,得到编码值;根据该编码值生成编码结果,并输出该编码结果。该电子设备可以实现本发明实施例所提供的任一种数据编码装置所能实现的有效效果,详见前面的实施例,在此不再赘述。本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种数据编码方法中的步骤。其中,该存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种数据编码方法中的步骤,因此,可以实现本发明实施例所提供的任一种数据编码方法所能实现的有益效果,详见前面的实施例,在此不再赘述。以上各个操作的具体实施可参见前面的实施例,在此不再赘述。以上对本发明实施例所提供的一种数据编码方法、装置、存储介质和电子设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1