day9-哈夫曼樹
02-02
哈夫曼樹編碼
哈夫曼樹編碼可以很有效的壓縮數據,通常可以節省20%~90%的空間
根據每個字元的出現頻率,哈夫曼樹演算法構造出最優二進位表示
def find_min(freq):ntitem = min(freq,key=lambda i:i[0])ntfreq.remove(item)ntreturn itemnndef print_codes(tree,prefix=):ntif isinstance(tree,tuple):nttprint_codes(tree[0],prefix+0)nttprint_codes(tree[1],prefix+1)ntelse:nttprint(tree,prefix)nndef huffman_codes(text):ntfrom collections import Counterntfreq = [(i,x) for x,i in Counter(text).items()]nntwhile len(freq) > 1:nttli,lx = find_min(freq)nttri,rx = find_min(freq)nttfreq.append((li+ri,(lx,rx)))ntprint_codes(freq.pop()[1])nnif __name__ == __main__:ntx = astala vista tastanthuffman_codes(x)n
- 首先將字元串進行統計
- 找到最小頻率的2個字元,將其合併,並將頻率相加,字元串變用tuple進行表示
- 當字典中只有一個的時候,將其列印出來。
推薦閱讀:
※linux如何高效的學習語言編程?
※為什麼Python類成員的調用和聲明必須有"this"?
※Python網路爬蟲(三)- 爬蟲進階
※做科學計算用Python還是MATLAB?
※Python新階段
TAG:Python |