### Date:2018.4.9
=======================================================
算术编码的本质是为整个输入序列分配一个码字。
1、浮点算术编码:
步骤:1、编码器在开始时将“当前区间”设为[0,1];
2、对每一事件,按照a,b进行处理:
a)编码器将当前区间分为子区间,每个事件一个;
b)一个子区间的大小与下一个将出现的事件的概率成比例,编码器选择子区间与下一个确切发生的事件相对应,并使其成为新的当前区间。
c)最后输出当前区间的下边界就是该给定事件序列的算术编码。
2、定点算术编码:
在浮点算法中区间范围为[0,1),在定点算法中区间范围由寄存器位数而定。以32位寄存器为例,在定点算法中low=0x00000000 , high=0x11111111。由于寄存器位数的限制,可以假设在限制的位数以后还存在着无数个后缀,low后面有无数个0,high后面有无数个1。
由浮点算法可以得到规律:
1.low逐步递增;
2.high逐步递减
3. high > low
所以在定点算法过程中,low的最高为1或者high的最高位为0时,在以后的编码中最高位都不会变。当low和high的最高位相同的时候,已经不会影响精度,可以直接移出寄存器,同时在低位补0(low)或者补1(high)。注意:由于high>low,当low的最高位为1的时候,high的最高为必定为1;当high的最高位为0时,low的最高位必定为0。
3、深入分析和理解
在此就不重复造轮子了,详细分析可以参考:https://blog.csdn.net/shakingwaves/article/details/52426244