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<

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

Asiayun:枣庄电信Asiayun美国Cera葵湾VPSvps月付,美国CERA VPS月付26元/年

亚洲云Asiayun怎么样?亚洲云成立于2021年,隶属于上海玥悠悠云计算有限公司(Yyyisp),是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。Asiayun提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以...

HostKvm5.95美元起,香港、韩国可选

HostKvm发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付仅5.95美元起。这是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面分享几款香港VPS和韩国VPS的配置和价格信息。...

hash sum mismatch为你推荐
知识库管理系统销售易CRM知识库,这是干什么用的?mindmanager破解版请给个Mindjet MindManager PRO 15的正式版webcrack我用WebCrack4 在破解路由器密码的时候为什么在破解密码的中途自动关闭掉editplus破解版DBTools Manager Professional 破解版在哪里可以下载?inode智能客户端win7如何使用校园网iNode智能客户端丁奇请全面剖析一下黑胡子丁奇这个人物。色库石伟伟怎么写啊手机建设银行网址建设银行个人网上银行使用手机浏览器访问没有登录入口。文件系统类型在windows系统中,常见的文件类型主要由哪几种?建立qq号QQ号码怎么建?
主机测评网 新加坡服务器 安云加速器 directadmin ev证书 中国特价网 什么是刀片服务器 有奖调查 刀片服务器的优势 东莞数据中心 多线空间 安徽双线服务器 宏讯 阿里云官方网站 国外在线代理服务器 免费网络 114dns 测试网速命令 免费稳定空间 腾讯网盘 更多