c 算術編碼

2021-10-06 08:46:18 字數 1248 閱讀 3325

熵編碼—算術編碼

算術編碼把整個信源序列表示為實數線上的0到1之間的乙個區間,其長度等於該序列的概率,在該區間內選擇乙個代表性的小數(最少位數),轉化為二進位製作為實際的編碼輸出。

序列中的每個新增元素都要用來縮短這個區間。訊息序列中元素越多,所得到的區間就越小,區間越小,就需要更多的數字來表示這個區間。

採用算術編碼每個符號的平均編碼長度可以為小數。

*//*

00 概率: 0.1 區間 [0,0.1)

01 概率: 0.4 區間 [0.1,0.5)

10 概率: 0.2 區間 [0.5,0.7)

11 概率: 0.3 區間 [0.7,1)

*/#include

#include

using

namespace std;

//宣告編碼的長度

int length =0;

double

code()

//中間結果輸出

//cout << fixed << setprecision(15) << endl << left << endl;

if(cin.

get()==

'\n'

)break;}

cout << endl <<

"編碼結果:"

; cout <<

setprecision(15

)<< endl << left << endl;

return left;

}void

decode

(double code)

//如果要解碼的數在當前區間dis的10%到50%部分,則輸出解碼值01,並縮小區間為原區間的10%到50%部分

else

if(code < left + dis *

0.5)

//如果要解碼的數在當前區間dis的50%到70%部分,則輸出解碼值10,並縮小區間為原區間的50%到70%部分

else

if(code < left + dis *

0.7)

//如果要解碼的數在當前區間dis的70%到100%部分,則輸出解碼值11,並縮小區間為原區間的70%到100%部分

else}}

intmain()

算術編碼 浮點

在給定符號集和符號概率的情況下,算術編碼可以給出接近最優的編碼結果,相比於霍夫曼編碼來說更接近夏農極限。對於helloworld來說,共7種符號 符號概率如下 如下 include stdafx.h include include include includeusing namespace std...

Matlab 算術編碼

資訊理論的第三個作業 終於是完完全全自己寫的 了!留下了不學無術的淚水qaq 算術編碼程式 輸入 信源u 信源分布p 需要進行編碼的序列s 輸入備註 輸入格式 a 0 1 p 1 4 3 4 s 1 0 1 1 1 輸出 該序列的算術編碼s 輸出備註 以序列所在區間的左端點值作為所求序列的碼字 輸入...

算術編碼用c 的實現

算術編碼在圖象資料壓縮標準 如jpeg,jbig 中扮演了重要的角色。在算術編碼中,訊息用0到1之間的實數進行編碼。算術編碼用到了兩個基本的引數 符號的概率和它的編碼間隔。信源符號的概率決定壓縮編碼的效率,也決定編碼過程中信源符號的間隔,而這些間隔包含在0到1之間。編碼過程中的間隔決定了符號壓縮後的...