熵編碼—算術編碼
算術編碼把整個信源序列表示為實數線上的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之間。編碼過程中的間隔決定了符號壓縮後的...