Python實現算術編碼的原始碼

2021-10-05 02:25:22 字數 1757 閱讀 3295

通訊領域經常會使用算術編碼對資訊進行編碼,下面提供乙個給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...