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;
}

数据结构实验之二叉树六:哈夫曼编码相关推荐

  1. sdut 数据结构实验之二叉树六:哈夫曼编码

    #include <iostream> #include <cstdio> #include <cstring> #include <queue>usi ...

  2. 常用数据结构之线索二叉树和哈夫曼树

    1.线索二叉树 上一篇二叉树中,我们介绍了基本的二叉树的结构.每一个父节点对应两个子节点,左子节点和右子节点.其中我们会看到,很多节点的左右节点都为null,为了更高效的存储和遍历,我们考虑一种方式将 ...

  3. 7.8 最优二叉树与哈夫曼编码

    最优二叉树定义 对于一棵树,可以将每一个结点赋一个数值,称之为结点的权重(weight),简称权.定义一棵树上某个结点ViV_i的带权路径长度(weighted path length)为从根节点到该 ...

  4. 【数据结构与算法实验】二叉树与哈夫曼图片压缩

    使用Huffman压缩算法,对一幅BMP格式的图片文件进行压缩.图片文件名为"Pic.bmp",压缩后保存为"Pic.bmp.huf"文件. 程序截图: Mai ...

  5. 二叉树的基本操作及哈夫曼编码/译码系统的实现

    二叉树的基本操作及哈夫曼编码/译码系统的实现 实验目的和要求 掌握二叉树的二叉链表存储表示及遍历操作实现方法. 实现二叉树遍历运算的应用:求二叉树中叶结点个数.结点总数.二叉树的高度,交换二叉树的左右 ...

  6. 数据结构与算法基础-学习-19-哈夫曼解码

    一.个人理解 哈夫曼树和哈夫曼编码相关概念.代码.实现思路分享,请看之前的文章链接<数据结构与算法基础-学习-17-二叉树之哈夫曼树>.<数据结构与算法基础-学习-18-哈夫曼编码& ...

  7. 信息论霍夫曼编码c语言,霍夫曼编码

    <信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...

  8. java实现哈夫曼编码(huffman)编码

      这篇博客主要讲解如何用java实现哈夫曼编码(Huffman). 概念   首先,我来简单说一下哈夫曼编码(Huffman),它主要是数据编码的一种方式,也是数据压缩的一种方法,将某些特定的字符转 ...

  9. 哈夫曼编码解压缩文件 - Java实现

    文章目录 前言 一.文件压缩 二.文件解压 结语 前言 不了解哈夫曼树的可以移步查看我的另一篇博客:哈夫曼树(最优二叉树) 使用哈夫曼编码压缩文件,其实就是将每个字符的哈夫曼编码得到,每8位转为一个字 ...

最新文章

  1. 短信验证码、图形验证码、邮件验证的自动化测试
  2. 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
  3. MyBatis知多少(22)MyBatis删除操作
  4. 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)
  5. Go的GOPATH与GOROOT
  6. vue 3D旋转木马轮播图
  7. 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
  8. 如何在sql存储过程中打log_SQL语句优化
  9. 大智慧找不到服务器,【图】大智慧官方居然没有全推服务器请老师解决_股票软件,股票指标,炒股,股票论坛,选股公式_股票软件技术交流论坛_理想论坛 - 股票论坛...
  10. Openlaye:学习笔记之事件
  11. 【总结】编程语言的分类
  12. SpringCloud视频教程 百度云盘
  13. 计算机任务栏的透明颜色设置,教你电脑任务栏透明设置教程
  14. TF卡座的工作原理,TF卡座的内部结构,详图,自弹式TF卡座的内部结构原来是这么回事
  15. T0.Games欢迎高端加密NFT入驻
  16. Mac 系统下 xcode 卸载 清理
  17. EditPlus格式化xml
  18. 电商直播风暴来了,AI虚拟偶像彻底革命李佳琦、薇娅?
  19. 都2020年了,你还不知道什么是软文营销吗
  20. 任何一个合数可由几个质数相乘得到

热门文章

  1. 微信小程序 wx:for
  2. Google的AI模型是如何做A/B Test的
  3. Python中的if __name__ == ‘__main__‘
  4. jboss7 加载module过程
  5. Sklearn(v3)——SVM理论(1)
  6. 【Mongodb】MongoDB
  7. 【统计学习】参数估计
  8. Java 8 - 正确高效的使用并行流
  9. Java 8 - 收集器Collectors_归约和汇总
  10. linux里hba状态_在Linux/Unix平台查看HBA卡的WWN号 和状态