在通訊領域經常會使用算術編碼對資訊進行編碼,下面提供乙個給python使用的對給定序列進行算術編碼的源**:使用方法一看就會了
# coding:utf8
class
artimeticcoding
(object):
def__init__
(self, symbol, p, _range=1.
, _low=0.
):self.__symbol =
[str
(s)for s in symbol]
self.__p = p
self.__range = _range
self.__low = _low
ifsum(self.__p)
>1.
:raise exception(
'initialerror'
,'probability sum bigger than 1.')if
len(self.__p)
!=len
(self.__symbol)
:raise exception(
'initialerror'
,'probability and symbol not match.'
) self.__map = self.__symbol_map(
)def
__symbol_map
(self)
: __map =
__mark =0.
for sidx in
range
(len
(self.__symbol)):
__map[self.__symbol[sidx]]=
__mark += self.__p[sidx]
return __map
defencode
(self, seq='')
:return self.__encode(seq, self.__range, self.__low)
def__encode
(self, s, __range, __low)
:if s[0]
notin self.__map:
raise exception(
'symbolerror'
,'unknown symbol occurred.'
) __low2 = __low + __range * self.__map[s[0]
]['from'
] __high2 = __low + __range * self.__map[s[0]
]['to'
]# print(s[0], __high2, __low2)
iflen
(s)==1:
return __low2
else
:return self.__encode(s[1:
], __high2 - __low2, __low2)
if __name__ ==
'__main__'
: ac = artimeticcoding([0
,1],
[0.25
,0.75])
print
(ac.encode(
'10111'
))
算術編碼用c 的實現
算術編碼在圖象資料壓縮標準 如jpeg,jbig 中扮演了重要的角色。在算術編碼中,訊息用0到1之間的實數進行編碼。算術編碼用到了兩個基本的引數 符號的概率和它的編碼間隔。信源符號的概率決定壓縮編碼的效率,也決定編碼過程中信源符號的間隔,而這些間隔包含在0到1之間。編碼過程中的間隔決定了符號壓縮後的...
算術編碼用c 的實現
算術編碼在圖象資料壓縮標準 如jpeg,jbig 中扮演了重要的角色。在算術編碼中,訊息用0到1之間的實數進行編碼。算術編碼用到了兩個基本的引數 符號的概率和它的編碼間隔。信源符號的概率決定壓縮編碼的效率,也決定編碼過程中信源符號的間隔,而這些間隔包含在0到1之間。編碼過程中的間隔決定了符號壓縮後的...
算術編碼 解碼以及matlab實現
m 2 二元資料p 0.80.2 需要自己給出x 1010 需要編碼的序列,發行方想要傳送的原始序列 low 0 區間下界 high 1 區間上界 for i 1 length x if x i 0 high high high low p 2 elseif x i 1 low low high l...