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<

速云:深圳独立服务器,新品上线,深港mpls免费体验,多重活动!

速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...

DogYun香港BGP月付14.4元主机简单测试

前些天赵容分享过DogYun(狗云)香港BGP线路AMD 5950X经典低价云服务器的信息(点击查看),刚好账户还有点余额够开个最低配,所以手贱尝试下,这些贴上简单测试信息,方便大家参考。官方网站:www.dogyun.com主机配置我搞的是最低款优惠后14.4元/月的,配置单核,512MB内存,10GB硬盘,300GB/50Mbps月流量。基本信息DogYun的VPS主机管理集成在会员中心,包括...

Friendhosting(月1.35欧元),不限流量,9机房可选

今天9月10日是教师节,我们今天有没有让孩子带礼物和花送给老师?我们这边不允许带礼物进学校,直接有校长在门口遇到有带礼物的直接拦截下来。今天有看到Friendhosting最近推出了教师节优惠,VPS全场45折,全球多机房可选,有需要的可以看看。Friendhosting是一家成立于2009年的保加利亚主机商,主要提供销售VPS和独立服务器出租业务,数据中心分布在:荷兰、保加利亚、立陶宛、捷克、乌...

hash sum mismatch为你推荐
bloomfilter电脑游戏图像设置里的Bloom是什么意思?showwindowvfp中菜单生成不能运行,提示说要把showwindow属性设为2,不懂求解电子日历墙上挂的电子日历不显示怎么维修备忘录模式华为荣耀5X怎么在手机上新建一个备忘录jql建筑设计图纸上JQL 梁,是不是地下正负零基础梁?急急!民生电商民生电商招的仓库操作工是干什么的jsindexofjavascript 中indexof 的用法pci数据捕获和信号处理控制器华硕pci数据捕获和信号处理控制器出现黄色叹号该下载什么驱动新手怎么制作表格怎么样在电脑上制作表格初学者12306注册铁路12306怎么注册用户名
西安服务器 本网站服务器在美国维护 星星海 美国主机评论 回程路由 好玩的桌面 evssl 免费个人博客 国内加速器 全能主机 最好看的qq空间 云鼎网络 免费ftp空间申请 腾讯云分析 hkg 双十一秒杀 免费美国空间 河南移动m值兑换 空间首页登陆 1元域名 更多