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<

PacificRack(年付低至19美元),夏季促销PR-M系列和多IP站群VPS主机

这几天有几个网友询问到是否有Windows VPS主机便宜的VPS主机商。原本他们是在Linode、Vultr主机商挂载DD安装Windows系统的,有的商家支持自定义WIN镜像,但是这些操作起来特别效率低下,每次安装一个Windows系统需要一两个小时,所以如果能找到比较合适的自带Windows系统的服务器那最好不过。这不看到PacificRack商家有提供夏季促销活动,其中包括年付便宜套餐的P...

racknerd:美国大硬盘服务器,$599/月,Ryzen7-3700X/32G内存/120gSSD+192T hdd

racknerd当前对美国犹他州数据中心的大硬盘服务器(存储服务器)进行低价促销,价格跌破眼镜啊。提供AMD和Intel两个选择,默认32G内存,120G SSD系统盘,12个16T HDD做数据盘,接入1Gbps带宽,每个月默认给100T流量,5个IPv4... 官方网站:https://www.racknerd.com 加密数字货币、信用卡、PayPal、支付宝、银联(卡),可以付款! ...

SugarHosts糖果主机圣诞节促销 美国/香港虚拟主机低至6折

SugarHosts 糖果主机商我们算是比较熟悉的,早年学会建站的时候开始就用的糖果虚拟主机,目前他们家还算是为数不多提供虚拟主机的商家,有提供香港、美国、德国等虚拟主机机房。香港机房CN2速度比较快,美国机房有提供优化线路和普通线路适合外贸业务。德国欧洲机房适合欧洲业务的虚拟主机。糖果主机商一般是不会发布黑五活动的,他们在圣圣诞节促销活动是有的,我们看到糖果主机商发布的圣诞节促销虚拟主机低至6折...

hash sum mismatch为你推荐
在线课堂钉钉群直播和在线课堂的区别?adversary英语match,是什么意思.?md5值哈希值 散列值 MD5值 都是什么意思啊知识库管理系统销售易CRM知识库,这是干什么用的?qq号查询怎样查找本地qq号码mindmanager破解版xmind mac破解版哪个好用bindserviceservice在手机程序中起什么作用slideshare什么是slide sandaltvosios,tvos,watchos和os x的区别layoutsubviewsios有没有类似tablayout的控件
lnmp 主机点评 狗爹 创宇云 日本空间 谁的qq空间最好看 域名评估 流量计费 最好的qq空间 hkt idc查询 安徽双线服务器 银盘服务 免费asp空间 卡巴斯基试用版下载 电信主机托管 免备案jsp空间 此网页包含的内容将不使用安全的https 建站行业 美国西雅图独立 更多