数据结构实验之二叉树六:哈夫曼编码
Description
字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。
Input
输入数据有多组,每组数据一行,表示要编码的字符串。
Output
对应字符的ASCII编码长度la,huffman编码长度lh和la/lh的值(保留一位小数),数据之间以空格间隔。
Sample
Input
AAAAABCD
THE_CAT_IN_THE_HAT
Output
64 13 4.9
144 51 2.8
Hint
#include<bits/stdc++.h>using namespace std;int main()
{char s[10000];while(~scanf("%s", s)){priority_queue < int, vector<int>, greater<int> > Q;//利用优先队列,从小到大排序int len = strlen(s);int i, Max = 0;int cnt[256];memset(cnt, 0, sizeof(cnt));for(i = 0; i < len; i++){cnt[s[i]]++;//统计每个字符出现的频率,利用ASCII对应其数组下标if(s[i] > Max){Max = s[i];//找出频率最高的字符,Max的值代表这频率最高的字符的下标}}for(i = 0; i <= Max; i++){if(cnt[i] != 0)Q.push(cnt[i]);//吧字符出现的次数压入优先队列}int sum = 0;while(!Q.empty()){int a = Q.top();Q.pop();if(!Q.empty()){int b = Q.top();Q.pop();sum += (a + b);Q.push(a+b);}}printf("%d %d %.1f\n", len * 8, sum, len * 8.0 / sum);}return 0;
}
数据结构实验之二叉树六:哈夫曼编码相关推荐
- sdut 数据结构实验之二叉树六:哈夫曼编码
#include <iostream> #include <cstdio> #include <cstring> #include <queue>usi ...
- 常用数据结构之线索二叉树和哈夫曼树
1.线索二叉树 上一篇二叉树中,我们介绍了基本的二叉树的结构.每一个父节点对应两个子节点,左子节点和右子节点.其中我们会看到,很多节点的左右节点都为null,为了更高效的存储和遍历,我们考虑一种方式将 ...
- 7.8 最优二叉树与哈夫曼编码
最优二叉树定义 对于一棵树,可以将每一个结点赋一个数值,称之为结点的权重(weight),简称权.定义一棵树上某个结点ViV_i的带权路径长度(weighted path length)为从根节点到该 ...
- 【数据结构与算法实验】二叉树与哈夫曼图片压缩
使用Huffman压缩算法,对一幅BMP格式的图片文件进行压缩.图片文件名为"Pic.bmp",压缩后保存为"Pic.bmp.huf"文件. 程序截图: Mai ...
- 二叉树的基本操作及哈夫曼编码/译码系统的实现
二叉树的基本操作及哈夫曼编码/译码系统的实现 实验目的和要求 掌握二叉树的二叉链表存储表示及遍历操作实现方法. 实现二叉树遍历运算的应用:求二叉树中叶结点个数.结点总数.二叉树的高度,交换二叉树的左右 ...
- 数据结构与算法基础-学习-19-哈夫曼解码
一.个人理解 哈夫曼树和哈夫曼编码相关概念.代码.实现思路分享,请看之前的文章链接<数据结构与算法基础-学习-17-二叉树之哈夫曼树>.<数据结构与算法基础-学习-18-哈夫曼编码& ...
- 信息论霍夫曼编码c语言,霍夫曼编码
<信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...
- java实现哈夫曼编码(huffman)编码
这篇博客主要讲解如何用java实现哈夫曼编码(Huffman). 概念 首先,我来简单说一下哈夫曼编码(Huffman),它主要是数据编码的一种方式,也是数据压缩的一种方法,将某些特定的字符转 ...
- 哈夫曼编码解压缩文件 - Java实现
文章目录 前言 一.文件压缩 二.文件解压 结语 前言 不了解哈夫曼树的可以移步查看我的另一篇博客:哈夫曼树(最优二叉树) 使用哈夫曼编码压缩文件,其实就是将每个字符的哈夫曼编码得到,每8位转为一个字 ...
最新文章
- 短信验证码、图形验证码、邮件验证的自动化测试
- 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
- MyBatis知多少(22)MyBatis删除操作
- 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)
- Go的GOPATH与GOROOT
- vue 3D旋转木马轮播图
- 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
- 如何在sql存储过程中打log_SQL语句优化
- 大智慧找不到服务器,【图】大智慧官方居然没有全推服务器请老师解决_股票软件,股票指标,炒股,股票论坛,选股公式_股票软件技术交流论坛_理想论坛 - 股票论坛...
- Openlaye:学习笔记之事件
- 【总结】编程语言的分类
- SpringCloud视频教程 百度云盘
- 计算机任务栏的透明颜色设置,教你电脑任务栏透明设置教程
- TF卡座的工作原理,TF卡座的内部结构,详图,自弹式TF卡座的内部结构原来是这么回事
- T0.Games欢迎高端加密NFT入驻
- Mac 系统下 xcode 卸载 清理
- EditPlus格式化xml
- 电商直播风暴来了,AI虚拟偶像彻底革命李佳琦、薇娅?
- 都2020年了,你还不知道什么是软文营销吗
- 任何一个合数可由几个质数相乘得到
热门文章
- 微信小程序 wx:for
- Google的AI模型是如何做A/B Test的
- Python中的if __name__ == ‘__main__‘
- jboss7 加载module过程
- Sklearn(v3)——SVM理论(1)
- 【Mongodb】MongoDB
- 【统计学习】参数估计
- Java 8 - 正确高效的使用并行流
- Java 8 - 收集器Collectors_归约和汇总
- linux里hba状态_在Linux/Unix平台查看HBA卡的WWN号 和状态