久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2145|回復(fù): 0
收起左側(cè)

哈夫曼py程序

[復(fù)制鏈接]
ID:143174 發(fā)表于 2018-6-24 10:59 | 顯示全部樓層 |閱讀模式
程序可參考

py源程序如下:
  1. import hufcode
  2. import statistic
  3. import six
  4. def decompress():
  5.     print("please input youer filename")
  6.     inputfilename=input()
  7.     f = open(inputfilename,'rb')
  8.     filedata1 = f.read()
  9.     filedata=bytearray(filedata1)
  10.     filesize = f.tell()
  11.     #print(filedata)


  12.     a1 = filedata[0]
  13.     a2 = filedata[1]
  14.     a3 = filedata[2]
  15.     a4 = filedata[3]
  16.     j = 0
  17.     j = j|a1
  18.     j = j<<8
  19.     j = j|a2
  20.     j = j<<8
  21.     j = j|a3
  22.     j = j<<8
  23.     j = j|a4

  24.     leaf_node_size = j

  25.    
  26.    
  27.     char_freq = {}
  28.     for i in range(leaf_node_size):
  29.         c = filedata[4+i*5+0]

  30.         
  31.         a1 = filedata[4+i*5+1]
  32.         a2 = filedata[4+i*5+2]
  33.         a3 = filedata[4+i*5+3]
  34.         a4 = filedata[4+i*5+4]
  35.         j=0
  36.         j = j|a1
  37.         j = j<<8
  38.         j = j|a2
  39.         j = j<<8
  40.         j = j|a3
  41.         j = j<<8
  42.         j = j|a4
  43.         #print (c, j)
  44.         char_freq[c] = j
  45.         j=0

  46.     list1=[]
  47.     list_all=[]
  48.     for x in char_freq.keys():
  49.         list1.append((x,char_freq[x]))

  50.     list1.sort()
  51.     list_all=[item[0]for item in list1]
  52.     #print(list1)
  53.     #print(list_all)

  54.     nodes = hufcode.createNodes([item[1] for item in list1])   #出現(xiàn)次數(shù)
  55.     root = hufcode.createHuffmanTree(nodes)                #葉子節(jié)點(diǎn)
  56.     codes = hufcode.huffmanEncoding(nodes,root)            #編碼


  57.     #print(codes)
  58.    

  59.     code1=''
  60.     for x in range(leaf_node_size*5+4,filesize):
  61.         c = filedata[x]
  62.         for i in range(8):
  63.             if c&128:
  64.                 code1 = code1 +'1'
  65.             else:
  66.                 code1 = code1 + '0'
  67.             c = c<<1
  68.     #print(code1)

  69.     newcode=dict(zip(codes,list_all))
  70.     print(newcode)
  71.    
  72.     #print(newcode.get('1000'))
  73.     #print(bytes((int(newcode.get('1000')),)).decode("ascii"))
  74.     i=0
  75.     res=''
  76.     while i < len(code1)-24:
  77.         j = i+1
  78.         while j < len(code1): #獲取某一字符的code
  79.             if code1[i:j] in newcode.keys():
  80.                 break
  81.             j += 1
  82.         #print(code1[i:j])
  83.         res =res + bytes((int(newcode.get(str(code1[i:j]))),)).decode('ascii')
  84.         #print(res)
  85.         i = j
  86.    
  87.     sub_code = code1[-16:-8]
  88.     last_length = 0
  89.     for i in range(8):
  90.         last_length = last_length<<1
  91.         if sub_code[i] == '1':
  92.             last_length = last_length|1
  93.    
  94.     code1=code1[-24:-16]+code1[-8:-8+last_length]

  95.     i=0
  96.     while i < len(code1):
  97.         j = i+1
  98.         while j < len(code1): #獲取某一字符的code
  99.             if code1[i:j] in newcode.keys():
  100.                 break
  101.             j += 1
  102.         #print(code1[i:j])
  103.         res =res + bytes((int(newcode.get(str(code1[i:j]))),)).decode('ascii')
  104.         #print(res)
  105.         i = j

  106.     print(res)
  107.    
  108.     print("\ndo you want save it? 1/yes,2/no")
  109.     ans=input()
  110.     ans=int(ans)
  111.     if ans==1:
  112.         print('please input the filename')
  113.         outfilename=input()
  114.         out = open(outfilename,"w")
  115.         out.write(res)
  116.         out.close
  117.     else:
  118.         pass
復(fù)制代碼

所有資料51hei提供下載:
霍夫曼.rar (14.57 KB, 下載次數(shù): 7)


回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲高清三级 | 亚洲三区在线 | 国产午夜精品一区二区三区四区 | 91电影在线播放 | 精品一区二区三区入口 | 在线观看的av | 欧美成人精品一区二区男人看 | 国产精品永久免费 | 午夜精品一区二区三区三上悠亚 | 中文字幕一区在线观看视频 | 一区二区三区免费 | 91在线网站 | 成人免费xxxxx在线视频 | 久久久久久久久中文字幕 | www.操.com | 福利网址 | 狠狠色香婷婷久久亚洲精品 | 91久久综合 | 国产精品视频二区三区 | 中文字幕的av | 亚洲精品一区二区在线观看 | 欧美一二三区 | 中文字幕在线视频免费观看 | 亚洲精品成人网 | 久久国产亚洲 | 欧美黄色一区 | 精品无码三级在线观看视频 | 色视频网站在线观看 | 午夜播放器在线观看 | 精品中文字幕久久 | 暖暖成人免费视频 | 欧美xxxx在线 | 日朝毛片| 国产欧美日韩综合精品一 | 爱爱爱av| 草久久免费视频 | 黄视频网站免费观看 | 中文字幕av色 | 国内精品视频免费观看 | 欧美区在线| 久久精品亚洲精品国产欧美 |