python學習之實現夏農編碼

2021-10-17 04:05:59 字數 1199 閱讀 5354

# author: wangshuna

# time: 2021.1.22

import numpy

from numpy.core import double

# 信源符號的個數

n = int(input("請輸入信源符號的個數:")) # 強制轉換型別,如若輸入其他字元將會報錯

# 信源符號的輸入

p = [double(n) for n in input("請輸入信源符號:").split()] # 強制轉換型別

# 檢測輸入合法性,概率大於0小於1

for i in range(n):

if p[i] >= 1 or p[i] <= 0:

print("輸入不合法!")

exit(0)

# 將信源符號從大到小進行排序

p.sort(reverse=true)

# 累積概率

p = [0]

for i in range(n-1):

# 碼字長度

k =

for i in range(n):

if int(-numpy.math.log(p[i], 2)) == -numpy.math.log(p[i], 2):

else:

# 夏農編碼表輸出

print("-------夏農編碼表-------")

print("i\t概率\t累積\t碼字\t")

for i in range(n):

print(str(i+1)+'\t'+str(p[i])+'\t'+str(p[i])+'\t'+str(k[i]))

# 信源熵

h = 0

for i in range(n):

h += -p[i]*numpy.math.log(p[i], 2)

# 平均碼長

k = 0

for i in range(n):

k += k[i]*p[i]

# 資訊率

l = 1 # 單符號

m = 2 # 二進位制

r = k/l*numpy.math.log(2, m)

# 編碼效率

e = h/r

print("夏農編碼的編碼效率="+str(round((e*100), 2))+"%") # 保留兩位小數

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

ONVIF學習之實現discovery

onvif實現的第一步當然是discovery,但是實現discovery分為被發現和主動發現。實現被發現,我參考的部落格是,很完整,根據這個就可以實現。實現主動發現,如下 include soaph.h include wsdd.nsmap include include include incl...