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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2238|回復: 0
打印 上一主題 下一主題
收起左側(cè)

哈夫曼py程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
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é)點
  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
復制代碼

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久91精品国产一区二区三区 | 精品一区久久 | 久久久久久国产一区二区三区 | 亚州精品天堂中文字幕 | 久久亚洲综合 | 成人午夜免费在线视频 | 日韩成人在线免费视频 | 日本中文在线 | 国产精品区二区三区日本 | 久久成人免费观看 | 日本欧美国产 | 嫩草视频在线 | 欧美精品久久久久久 | 亚洲精品在线国产 | 久久久久无码国产精品一区 | 亚洲一区不卡在线 | 精品1区2区3区 | 欧美激情国产精品 | 在线日韩欧美 | 91一区二区 | 国产丝袜一区二区三区免费视频 | 久久电影一区 | 91av视频在线播放 | 99久久免费精品 | 一区二区三区欧美 | 国产日韩一区二区三区 | 久久6视频| 久久亚洲视频 | 91日日| 国产一级淫片a直接免费看 免费a网站 | 久久久久99 | 国产91亚洲精品一区二区三区 | 精品久久ai电影 | 欧美日韩在线高清 | 在线观看中文字幕一区二区 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 伊人久久免费 | 亚洲一区二区在线视频 | 色888www视频在线观看 | 国产ts人妖一区二区三区 | 日本午夜精品一区二区三区 |