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<

速云:广州移动/深圳移动/广东联通/香港HKT等VDS,9折优惠,最低月付9元;深圳独立服务器1050元/首月起

速云怎么样?速云,国人商家,提供广州移动、深圳移动、广州茂名联通、香港hkt等VDS和独立服务器。现在暑期限时特惠,力度大。广州移动/深圳移动/广东联通/香港HKT等9折优惠,最低月付9元;暑期特惠,带宽、流量翻倍,深港mplc免费试用!点击进入:速云官方网站地址速云优惠码:全场9折优惠码:summer速云优惠活动:活动期间,所有地区所有配置可享受9折优惠,深圳/广州地区流量计费VDS可选择流量翻...

WHloud Date鲸云数据($9.00/月), 韩国,日本,香港

WHloud Date(鲸云数据),原做大数据和软件开发的团队,现在转变成云计算服务,面对海内外用户提供中国大陆,韩国,日本,香港等多个地方节点服务。24*7小时的在线支持,较为全面的虚拟化构架以及全方面的技术支持!官方网站:https://www.whloud.com/WHloud Date 韩国BGP云主机少量补货随时可以开通,随时可以用,两小时内提交退款,可在工作日期间全额原路返回!支持pa...

HostKvm - 夏季云服务器七折优惠 香港和韩国机房月付5.95美元起

HostKvm,我们很多人都算是比较熟悉的国人服务商,旗下也有多个品牌,差异化多占位策略营销的,商家是一个创建于2013年的品牌,有提供中国香港、美国、日本、新加坡区域虚拟化服务器业务,所有业务均对中国大陆地区线路优化,已经如果做海外线路的话,竞争力不够。今天有看到HostKvm夏季优惠发布,主要针对香港国际和韩国VPS提供7折优惠,折后最低月付5.95美元,其他机房VPS依然是全场8折。第一、夏...

hash sum mismatch为你推荐
swooleswoole和workerman哪个更易开发md5值哈希值 散列值 MD5值 都是什么意思啊知识库管理系统什么是知识管理空白代码空白名字代码云图片华为手机的云照片怎么不见了怎么办郭凡生慧聪的董事长是谁?跟马云比,怎么样?inode智能客户端inode智能客户端怎么使用wifi?ruby语言Ruby语言输入方法法layoutsubviews如何设置plus.nativeui.toast的样式mediasRES代表什么意思
linux主机 什么是域名解析 免费申请域名 阿里云os hostmaster 论坛空间 卡巴斯基永久免费版 元旦促销 165邮箱 南通服务器 双线asp空间 酸酸乳 免费php空间 如何登陆阿里云邮箱 nnt 沈阳idc 美国asp空间 以下 海尔t68g 更多