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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2260|回復: 0
打印 上一主題 下一主題
收起左側

哈夫曼py程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:143174 發表于 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])   #出現次數
  55.     root = hufcode.createHuffmanTree(nodes)                #葉子節點
  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, 下載次數: 7)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人精品一区二区三区在线看 | 欧美激情自拍 | 视频爱爱免费视频爱爱太爽 | 天天干夜夜欢 | 亚洲青青草 | www.日韩av| 久久精品福利视频 | 国产成人在线播放 | 欧美一区二区免费 | 中文字幕伊人 | 99re在线观看视频 | 日本黄色免费看 | 国产在线一区二区三区 | 在线国产小视频 | 四虎激情 | 91久久久久久久 | 国产99页 | 亚洲精品久久久久久久久久久 | 久久久午夜精品 | 免费黄色网页 | 国产精品伦子伦免费视频 | 日皮视频在线观看 | 国产乱码精品一区二区三 | 69福利视频 | 久久夜色精品国产欧美乱极品 | 一区两区小视频 | 国产一级免费观看 | 日本一区二区三区免费观看 | 午夜91 | 亚洲欧美天堂 | 婷婷狠狠| 黄色一级免费视频 | 在线观看网址你懂的 | av不卡在线播放 | 黄色小视频免费观看 | 久久精品国产亚洲 | 日本色网址 | av一级在线 | 欧美日本在线观看 | 在线日韩视频 | av手机在线看 |