亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

計算哈夫曼編碼長度

2019-11-10 17:45:02
字體:
來源:轉載
供稿:網友
本篇文章向大家介紹一個不用構造哈夫曼樹的方法來計算哈夫曼編碼的長度,這對于較大字符集有極大的優勢,因為構造一個樹要花費相當大的空間和時間,本算法的時間復雜度為O(nlogn),空間復雜度為O(N);參考文獻<深入搜索引擎>第二章程序處理:高亮顯示#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>using namespace std;#define BUFF_SIZE 4096#define HASH_SIZE 256char buff[BUFF_SIZE];        //緩沖區 int  hash[HASH_SIZE];        //統計每個字符出現的次數int heap[(HASH_SIZE<<1)+2];int pos[HASH_SIZE+1][3];//內部節點 , 0和1記錄子結點位置,3節錄當前的深度int tlen[HASH_SIZE+1];       //記錄每個葉子結點的深度int  fd;                      //文件描述符int sym_num ;           //文件中出現的符號數量int SUM(0);             //文件中字符總數//初始化程序void init(const char * pathname){       memset(buff , 0 , sizeof(buff));       memset(hash , 0 , sizeof(hash));       memset(heap , 0 , sizeof(heap));       memset(pos  , 0 , sizeof(pos));       memset(tlen , 0 , sizeof(tlen));       //打開文件       fd = open(pathname , O_RDONLY);       if(fd < 0){              PRintf("init: %s dont exit!/n" , pathname);              exit(1);       }}//統計文件中每個符號出現的次數void count_symbol(){       lseek(fd , 0 , SEEK_SET);       while(read(fd , buff , BUFF_SIZE)){              SUM += strlen(buff);              for(int i=strlen(buff) - 1;i>=0;i--)                     hash[(unsigned int)(buff[i] & 0xFF)]++;       }       //記錄出現的符號數量;       for(int i = HASH_SIZE - 1; i >= 0; i--)              if(hash[i])sym_num++;}//建立一個最小堆void build_min_heap(){       for(int i=sym_num;i>0;i--){              int p = i >> 1 , j = i;              while(p >= 1){                     if(heap[heap[p]] > heap[heap[j]])                            std::swap(heap[j] , heap[p]);                     j = p; p >>= 1;              }       }}//每次取出最小數之后重新調整堆,//h 指推中元素的個數void heap_adjust(int h){       int t = 1 , p , q , l;       while(t<h){              p = t<<1; q = p + 1; l = t;              if(p <= h && heap[heap[p]] < heap[heap[t]])l = p;              if(q <= h && heap[heap[q]] < heap[heap[l]])l = q;              if(l == t)break;              std::swap(heap[l] , heap[t]);              t = l;       }}//計算每個字符編碼的長度void huff_length(){       int i , j , p , h , m1 , m2;       for(i=1 , p=0;i<=sym_num;i++){              while(!hash[p])       p++;              heap[sym_num + i] = hash[p];              heap[i] = sym_num + i;              p++;       }       h = sym_num;       //對1到n建立最小堆       build_min_heap();       while(h>1){              //取出最小數              m1 = heap[heap[1]];              pos[h][0] = heap[1];              heap[1] = heap[h];              h--;              heap_adjust(h);              //取出次小數              m2 = heap[heap[1]];              pos[h+1][1] = heap[1];              //最后數和次小數之和放在堆的最后一個位置              heap[h+1] = m1 + m2;              //重新指向最新合并的結點              heap[1] = h+1;              heap_adjust(h);       }       //統計編碼長度 , 線性時間統計       int ts = sym_num << 1;       for(int i=2;i<=sym_num;i++){              if(pos[i][0] <= sym_num) pos[pos[i][0]][2] = pos[i][2] + 1;              else tlen[pos[i][0] - sym_num] = pos[i][2] + 1;              if(pos[i][1] <= sym_num) pos[pos[i][1]][2] = pos[i][2] + 1;              else tlen[pos[i][1] - sym_num] = pos[i][2] + 1;       }}int main(){       init("data.dat");       count_symbol();       huff_length();       unsigned int sum = 0;       for(int i=1;i<=sym_num;i++)              sum += tlen[i] * heap[sym_num + i];       cout<<SUM <<"/t/t"<<sum<<"/t/t"<<sum*1.0/SUM<<endl;       return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
疯狂蹂躏欧美一区二区精品| 欧美激情精品久久久久久免费印度| 91国产高清在线| 欧美激情精品久久久久久久变态| 在线观看免费高清视频97| 深夜福利一区二区| 国产精品日韩一区| 久久这里只有精品视频首页| 日韩美女视频免费在线观看| 久久久综合免费视频| 亚洲jizzjizz日本少妇| 动漫精品一区二区| 欧美日韩性生活视频| 精品国产精品三级精品av网址| 夜夜嗨av一区二区三区免费区| 国产成+人+综合+亚洲欧洲| 国产亚洲精品美女久久久久| 欧美成人一区在线| 97色在线播放视频| 久久99久久亚洲国产| 欧美一区二区三区四区在线| 久久手机免费视频| 日韩最新在线视频| 97久久精品在线| 久久久亚洲精选| 最近中文字幕日韩精品| 亚洲精品有码在线| 粉嫩av一区二区三区免费野| 亚洲欧美福利视频| 日韩精品亚洲视频| 国产精品成人va在线观看| 日韩在线观看免费高清| 久久91超碰青草是什么| 亚洲国产日韩欧美在线99| 国产91在线播放| 欧美极品少妇与黑人| 国产精品视频色| 久久视频在线播放| 黑人狂躁日本妞一区二区三区| 8090成年在线看片午夜| 亚洲伊人一本大道中文字幕| 91成人福利在线| 日韩精品中文字幕久久臀| 91久久久国产精品| 国内精品一区二区三区| 亚洲欧美国产精品专区久久| 91色在线观看| 92看片淫黄大片看国产片| 国产美女精品视频| 欧美日韩国产综合视频在线观看中文| 美日韩精品免费观看视频| 久久av在线播放| 91成人性视频| 国内精品久久久久久中文字幕| 亚洲精品美女免费| 成人激情视频小说免费下载| 国产日韩欧美在线播放| 日韩亚洲综合在线| 日本亚洲欧美成人| 欧美日韩亚洲激情| 久久精品国产69国产精品亚洲| 欧美激情一区二区三区高清视频| 国产伦精品一区二区三区精品视频| 日韩动漫免费观看电视剧高清| 欧美在线免费视频| 欧美剧在线观看| 1769国内精品视频在线播放| 欧美精品午夜视频| 日韩在线欧美在线| 精品欧美激情精品一区| 日韩精品视频在线观看网址| 日本精品性网站在线观看| 欧美激情在线有限公司| 最近2019中文字幕一页二页| 福利一区福利二区微拍刺激| 成人黄色短视频在线观看| 在线看片第一页欧美| 久久久精品日本| 在线观看亚洲区| 亚洲精品国产综合久久| 久久av中文字幕| 狠狠躁夜夜躁人人躁婷婷91| 国产精品久久久久久av福利| 中文字幕日本精品| 国产精品香蕉国产| 日韩中文在线中文网三级| 国产精品手机播放| 日韩中文综合网| 91久热免费在线视频| 国产精品一区二区3区| 欧美高清视频在线| 国产精品久久久久久久久久久久久久| 日韩一区二区在线视频| 最近2019中文字幕一页二页| 亚洲精品www久久久久久广东| 国产成人精品a视频一区www| 亚洲精品一区二区三区不| 欧美激情国内偷拍| 午夜免费日韩视频| 成人综合国产精品| 精品国产福利在线| 亚洲欧洲高清在线| 欧美激情在线视频二区| 久久99精品视频一区97| 久久久久久久91| 国产精品揄拍一区二区| 在线午夜精品自拍| 国产精品夜色7777狼人| 日韩欧美亚洲国产一区| 欧美极品在线播放| 国产日韩在线亚洲字幕中文| 欧美一二三视频| 国产精品嫩草影院一区二区| 亚洲精品影视在线观看| 青青青国产精品一区二区| 亚洲男人av在线| 亚洲视频网站在线观看| 欧美激情18p| 8050国产精品久久久久久| 国产美女高潮久久白浆| 欧美高跟鞋交xxxxxhd| 国产精品亚洲视频在线观看| 日本久久久久久久久久久| 亚洲mm色国产网站| 欧美性jizz18性欧美| 色中色综合影院手机版在线观看| 精品视频—区二区三区免费| 国产精品第三页| 欧美丰满片xxx777| 插插插亚洲综合网| 精品视频9999| 欧美日韩国产色视频| 国产99视频精品免视看7| 两个人的视频www国产精品| 668精品在线视频| 久久久精品在线| 亚洲人成伊人成综合网久久久| 中文字幕亚洲二区| 一色桃子一区二区| 日韩欧美综合在线视频| 欧美精品精品精品精品免费| 国产精品久久婷婷六月丁香| 精品久久久香蕉免费精品视频| 久久久久亚洲精品国产| 国产欧美日韩精品丝袜高跟鞋| 中文字幕精品网| 91精品久久久久久久| 久久免费观看视频| 一级做a爰片久久毛片美女图片| 动漫精品一区二区| 黑人与娇小精品av专区| 色青青草原桃花久久综合| 亚洲欧美变态国产另类| 成人免费自拍视频| xxx成人少妇69| 亚洲精品电影网| 国产精品视频精品视频| 亚洲精品第一国产综合精品| 国产精品欧美日韩一区二区| 一本色道久久88亚洲综合88| 国产成人精品综合久久久| 日本亚洲欧美成人| 国产精品久久久久久久久粉嫩av| 北条麻妃在线一区二区|