任意二进制状态数据都能无损压缩,其压缩模型由以下组成:25*25矩阵、障碍格、计数路径、被压缩数据、洗牌、计数器、简化数据等等,建模见(图1),
其中屏蔽掉120个元素(取名:障碍格,在图3中用2表示),障碍格在模型中是固定的,计数器不会对其计数,
计数路径见(图2-1——图2-4),计数器路径分:A、B、C、D四组,每组25个,分别取名:A-0、A-1、A-2.......A-24,B-0、B-1、B-2.......B-24,C-0、C-1、C-2.......C-24,D-0、D-1、D-2.......D-24,共:4*25=100个计数路径,每个计数路径上面有25个元素。每个元素会被计数4次,计数路径和障碍格的合理布局能有效的提高解压效率和解压时的二义性问题。计数路径举例说明:图3上坐标X=11,Y=12元素的计数路径A-8、B-16、C-17、D-15。
计数器的数量与计数路径数量是相等的,计数器的计数轨迹是由计数路径决定的,计数器只对元素中的1进行累加计数,元素中的0不管,元素中的2表示障碍格也不管。计数器值0-6,用5位二进制表示:0=00001、1=00010、2=00100,3=00000、4=01000、5=10000、6=01010。计数器值3,出现的频率最高用00000表示,计数器值6,出现的频率最低用01010表示,这样能大量简化数据,使1的数量保持在60-80个之间(数据长度505位)。详情见图6-2
洗牌种类有:4096种,用12位二进制表示,洗牌数据长度是505位二进制数据,最佳洗牌是计数器值不能大于6,计数器结果二进制表达式中的1数量最少。
下面讲一下1200位经150次每次压缩8位,压缩到497位。模型一次处理数据是505位,压缩结果是497位,505位如何压缩到497位的,第一次压缩是对压缩模型写入一个固定的505位数据,经洗牌后得到最佳497位压缩结果见图7,
第一次的压缩结果497位,未洗牌状态下505位数据的填充顺序,前面12位是洗牌号2052转换成二进制100000000100,后面跟着97个计数器值的二进制表达式,其中1的数量64个,加末尾被压缩数据(可以是任意状态的二进制数据)8位,序号:000=11010101其中1的数量5个,497+8=505位(其中1的数量64+5=69个)数据再次写入压缩模型 ,经洗牌后得到最佳497位压缩结果。一直循环压缩150次每次压缩8位,既能把任意1200位的数据压缩到497位。被压缩数据见图4
连续压缩过程见图6-1、图6-2、图6-3、图6-4。
压缩过程结果见图5
最后一次填充505位经洗牌后的数据见图8
最后一次压缩结果见图9
此数据无损压缩算法可以压缩任意二进制数据。