# 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...