依舊是資訊理論的作業,就放上來記錄一下!
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.
(float
(c))
#對輸入的信源符號概率進行降序儲存
p.sort
(reverse=true)
print
("信源符號概率為:"
+str
(p))
#計算累加概率
for i in range
(n):
p_sum.(0
)if i ==
0else p_sum.
(p_sum[i -1]
+ p[i -1]
)print
("累加概率為:"
+str
(p_sum)
)#求碼字長度及平均碼長
for i in range
(n):
p_len.
(int
(math.
log(p[i],2
)*(-
1)+0.9999))
a+= p[i]
* p_len[i]
b+=(
-1)*p[i]
*(math.
log(p[i],2
))print
("對應的碼字長度為:"
+str
(p_len)
)print
("平均碼長為:"
+'%.5s'
%str
(a))
print
("信源熵為"
+'%.5s'
%str
(b))
print
("平均資訊傳輸率為:"
+'%.5s'
%str
(b/a)
)#進行編碼
for i in range
(n):
code[
str(p[i])]
='0.'
b = p[i]
for j in range
(p_len[i]):
b = b *
2if b >1:
code[
str(p[i])]
= code[
str(p[i])]
+str(1
) b = b -
1else
: code[
str(p[i])]
= code[
str(p[i])]
+str(0
)for each in code:
code[each]
= code[each][2
:]print
("每個概率對應的編碼"
+str
(code)
)
python學習之實現夏農編碼
author wangshuna time 2021.1.22 import numpy from numpy.core import double 信源符號的個數 n int input 請輸入信源符號的個數 強制轉換型別,如若輸入其他字元將會報錯 信源符號的輸入 p double n for n...
Matlab 夏農編碼
資訊理論實驗課第乙個作業,是用matlab實現夏農編碼。拼拼湊湊刪刪改改做出了乙個,但是還不是很理想,陣列不知道怎麼轉換為字串拼接起來 夏農編碼 output 二進位制編碼code input 信源分布p function shannon p n length p 信源符號數 p sort p,de...
c語言實現夏農編碼
1 設計思想 為了設計的方便,我們需要在這個程式裡設計乙個結構體,以用來儲存信源符號 信源符號概率等引數,將每一組引數看成乙個結構體來看待,這樣我們就可以隨時地呼叫。2 設計流程 主函式部分,我們先接收要輸入的信源符號個數,再接收每個信源符號的名稱以及他的概率。主函式設計好後,我們將各功能的函式分成...