資訊理論實驗課第乙個作業,是用matlab實現夏農編碼。拼拼湊湊刪刪改改做出了乙個,但是還不是很理想,陣列不知道怎麼轉換為字串拼接起來= =。
%夏農編碼
%output:二進位制編碼code
%input:信源分布p
function shannon(p)
n = length(p);%信源符號數
p = sort(p,'descend');%降序排列
f = zeros(1,n);%累加概率序列
for i=2:n
f(i)=f(i-1)+p(i-1);
endl = zeros(1,n);%碼長序列
for i=1:n
l(i)=ceil(-log2(p(i)));%向上取整
enddisp('最終編碼結果:');
for i=1:n
f = max(l(i));
w=trans(f(i),f);
for j=1:l(i)
code(j)=w(j);
enddisp([num2str(p(i)),'->',num2str(code)]);
end
其中十進位制轉二進位制的**:
(×2取整)
%十進位制轉換為二進位制
function w = trans( f,f )
for i=1:f
temp=f.*2;
if(temp<1)
w(i)=0;
f=temp;
else
f=temp-1;
w(i)=1;
endend
一道老師給的例題:
三、程式設計實現下列習題:
對於離散無記憶信源
進行二進位制編碼。
主程式及執行結果:
>> p=[0.20 0.19 0.18 0.17 0.15 0.10 0.01]
p = 0.2000 0.1900 0.1800 0.1700 0.1500 0.1000 0.0100
>> shannon(p)
最終編碼結果:
0.2->0 0 0
0.19->0 0 1
0.18->0 1 1
0.17->1 0 0
0.15->1 0 1
0.1->1 1 1 0
0.01->1 1 1 1 1 1 0
對= =最後編碼結果死活轉不成拼接好的字串就很無語。 夏農編碼python實現
依舊是資訊理論的作業,就放上來記錄一下!import math n int input 請輸入信源符號的個數 p 碼字概率 p sum 累加概率 p len 碼字長度 ex code a 0 b 0for i in range 1 n 1 c input 請輸入第 str i 個信源符號的概率 p....
c語言實現夏農編碼
1 設計思想 為了設計的方便,我們需要在這個程式裡設計乙個結構體,以用來儲存信源符號 信源符號概率等引數,將每一組引數看成乙個結構體來看待,這樣我們就可以隨時地呼叫。2 設計流程 主函式部分,我們先接收要輸入的信源符號個數,再接收每個信源符號的名稱以及他的概率。主函式設計好後,我們將各功能的函式分成...
python學習之實現夏農編碼
author wangshuna time 2021.1.22 import numpy from numpy.core import double 信源符號的個數 n int input 請輸入信源符號的個數 強制轉換型別,如若輸入其他字元將會報錯 信源符號的輸入 p double n for n...