hash sum mismatch哈夫曼编码码长怎么算?

hash sum mismatch  时间:2022-02-24  阅读:()

哈夫曼编码码长怎么算?

介绍一个不用构造哈夫曼树的方法来计算哈夫曼编码的长度的算法,本算法的时间复杂度为O(nlogn),空间复杂度为O(N)。下面是具体代码。 #include? #include? #include? #include? #include? #include? #include? #include? using?namespace?std; #define?BUFF_SIZE?4096 #define?HASH_SIZE?256 char?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?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(t1){ ??????????????//取出最小数 ??????????????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?<sum?=?0; ???????for(int?i=1;i<=sym_num;i++) ??????????????sum?+=?tlen[i]?*?heap[sym_num?+?i]; ???????cout<

妮妮云36元,美国VPS洛杉矶 8核 8G 36元/月,香港葵湾 8核 8G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

HostYun(22元/月)全场88折优惠香港原生IP大带宽

在之前的一些文章中有提到HostYun商家的信息,这个商家源头是比较老的,这两年有更换新的品牌域名。在陆续的有新增机房,价格上还是走的低价格路线,所以平时的折扣力度已经是比较低的。在前面我也有介绍到提供九折优惠,这个品牌商家就是走的低价量大为主。中秋节即将到,商家也有推出稍微更低的88折。全场88折优惠码:moon88这里,整理部分HostYun商家的套餐。所有的价格目前都是原价,我们需要用折扣码...

湖北22元/月(昔日数据)云服务器,国内湖北十堰云服务器,首月6折

昔日数据怎么样?昔日数据新上了湖北十堰云服务器,湖北十堰市IDC数据中心 母鸡采用e5 2651v2 SSD MLC企业硬盘 rdid5阵列为数据护航 100G高防 超出防御峰值空路由2小时 不限制流量。目前,国内湖北十堰云服务器,首月6折火热销售限量30台价格低至22元/月。(注意:之前有个xrhost.cn也叫昔日数据,已经打不开了,一看网站LOGO和名称为同一家,有一定风险,所以尽量不要选择...

hash sum mismatch为你推荐
bloomfilter如何用Java写一个爬虫知识库管理系统急求一款电子文档管理系统,有好用的推荐下~?slideshare什么是slide sandal数秦科技奇秦科技是做什么的,大家了解过吗?spawningvc出现error spawning c1.exe怎么解决?radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程清除电脑垃圾怎么清除电脑的垃圾啊?药品标准查询药品国家标准怎么查阅toolstripc#中 (ToolStrip)控件是做什么用的?sungard恒生电子和上海sungard的offer,去哪个好???谢谢,,急急急!!!
免费linux主机 adman bbr 加勒比群岛 一元域名 福建天翼加速 蜗牛魔方 100x100头像 域名和空间 qq云端 中国电信测速网 河南移动m值兑换 香港新世界中心 购买国外空间 最漂亮的qq空间 云服务器比较 深圳域名 谷歌搜索打不开 godaddyssl alexa搜 更多