夏農編碼python實現

2021-10-12 21:30:26 字數 1737 閱讀 6884

依舊是資訊理論的作業,就放上來記錄一下!

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 設計流程 主函式部分,我們先接收要輸入的信源符號個數,再接收每個信源符號的名稱以及他的概率。主函式設計好後,我們將各功能的函式分成...