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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>using namespace std;int main()
{char s[10000];while(scanf("%s",s)!=EOF){priority_queue < int,vector<int>,greater<int> > Q;//利用优先队列,从小到大排序int len=strlen(s);int i,max=0;int count[256]={0};for(i=0;i<len;i++){count[s[i]]++;//统计字符出现的频率,利用ASCII对应其数组的下标if(s[i]>max)max=s[i];//找出频率最高的字符}for(i=0;i<=max;i++){if(count[i]!=0)Q.push(count[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;
}

例题:一组字符(a,b,c,d)在文中出现的次数分别为(7,6,3,5),字符'd'的哈夫曼编码的长度为?

首先构造huffman树
每一步都将所有数字排序
方法如下:
1:
3 5 6 7
2:
6 7 8
/ \
3 5
3:
8 13
/ \ / \
3 5 6 7
4:
21
/ \
8 13
/ \ / \
3 5 6 7
所以构造哈夫曼树如图
7 6 3 5 分别对应a b c d
如果左边为0 ,右边为 1 ,则他们编码分别为:
a 11
b 10
c 00
d 01
长度为2


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eigen基本操作

// 矩阵 Eigen::Matrix<float,行,列> // Eigen 中所有向量和矩阵都是Eigen::Matrix&#xff0c;它是一个模板类。它的前三个参数为&#xff1a;数据类型&#xff0c;行&#xff0c;列// 声明一个2*3的float矩阵Eigen::Matrix<float, 2, 3> matrix_23;//float类型…

所感

记住别太善良了&#xff0c;别太大方了&#xff0c;也别太能干了&#xff0c;时间久了人家会觉得&#xff0c;你做的一切都是应该的。即使有一天你撑不住&#xff0c;哭了累了&#xff0c;也没人心疼你。 因为在他们眼里这都是你愿意的。有时候心眼也别太好了不要什么事都为别人…

PCL库使用中遇到的一些问题及解决方法

a. pcl::PointCloud对象变量 与pcl::PointCloud::Ptr 对象指针 的相互转换 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/point_cloud.h> // 对象指针 pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPointer(new pcl:…

享受孤独

今天看见网易云音乐一个 有趣的活动。。。突发其感参与了评论“孤独”这个话题&#xff1a;

opencv 图像访问索引

//单通道获取 Scalar intensity img.at<uchar>(y, x);//行 列 Scalar intensity img.at<uchar>(Point(x, y)); 0 < intensity.val[0] < 255. // 多通道获取 8u Vec3b intensity img.at<Vec3b>(y, x); uchar blue intensity.val[0]…

使自己的注意力集中方法

英国Kent大学最近有一篇文章对注意力做出了详尽的分析&#xff0c;关于如何保持专心养成好习惯的&#xff0c;其中包括了如下几点建议&#xff1a; 养成好习惯&#xff1a;养成在固定时间、固定地点专心学习工作的好习惯。如果可能&#xff0c;在进入学习或者工作状态前做一些小…

PCL “(”:“::”右边的非法标记 和 E2512 功能测试宏的参数必须是简单标识符

PCL “(”:“::”右边的非法标记 解决方法&#xff1a; 项目属性 ——> C/C ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关 NOMINMAX&#xff09; E2512 功能测试宏的参数必须是简单标识符 解决方法&#xff1a; 将SDL 设置为否。

最全ACM常用STL

STL 中专门用于排列的函数&#xff08;可以处理存在重复数据集的排列问题&#xff09; 头文件&#xff1a;#include <algorithm> using namespace std; 调用&#xff1a; next_permutation(start, end); 注意&#xff1a;函数要求输入的是一个升序排列的序列的头指针和尾…

ubuntu 安装cmake

方法一&#xff1a; sudo apt-get install cmake 跟新中。。。。。。。。。

普通本科生应该坚持ACM吗?知乎

这是本人当初学ACM有疑惑从知乎看见这一篇文章&#xff0c;从中解决了自己的疑惑&#xff0c;虽然是粘贴复制&#xff0c;但是我觉得我们可以从里面找出自己想要的答案&#xff01; 非211一本学校&#xff0c;软件工程专业。学校搞ACM的水平不高&#xff0c;最好的大概就是区域…

邻接表存储图利用BFS遍历

//今天上机写的邻接表存储图利用BFS遍历&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; struct node//存节点所连接的点 {int id;node *next; }; struct list//存各个节点的顶点值 {…

windows 安装tensorflow2.0

预先装好python 然后在命令行输入&#xff1a; gpu版本&#xff1a; 需要预先装好&#xff1a;cuda 和cudnn 才能使用。 pip install numpy pandas matplotlib sklearn tensorflow-GPU2.0.0-alpha0 -i https://pypi.doubanio.com/simple cpu 版本&#xff1a; alpha0 &…

解决虚拟机打开不了?提示VMware Workstation cannot connect to the virtual machine的问题

解决方法&#xff1a; 从提示消息我们可以看到&#xff0c;问题在于VMware授权服务没有开启&#xff0c;具体处理方法如下&#xff1a; No1. "This PC&#xff08;我的电脑&#xff09;"---右键"manage&#xff08;管理&#xff09;"---"Service and…

双目立体匹配算法

Loopy belief propagation, Markov Random Field, stereo vision website&#xff1a;http://nghiaho.com/?page_id1366

Redis-3.2.4服务搭建

1.下载安装包并解压 全部版本地址&#xff1a;http://download.redis.io/releases 安装包下载&#xff1a; http://download.redis.io/releases/redis-3.2.4.tar.gz 我们这里使用3.2.4 2.编译安装 cd redis-3.2.4 make && make install 可能异常&#xff1a;&…

Android Fragment 真正的完全解析(上)

转载请标明出处&#xff1a;http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现&#xff0c;曾经有段时间&#xff0c;感觉大家谈什么都能跟Fragment谈上关系&#xff0c;做什么都要问下Fragment能实现不~~~哈哈&#xff0c;是不是有点过~~~ 本篇博…

Hbase Import导入数据异常处理-RetriesExhaustedWithDetailsException

CDH显示 问题导致原因&#xff1a; hbase org.apache.hadoop.hbase.mapreduce.Import -Dmapred.job.queue.nameetl crawl:wechat_biz /hbase/test4 执行import时&#xff0c;短时间内写入数据量过大导致写入异常。 18/09/11 09:44:27 INFO mapreduce.Job: Task Id : attempt_…

Android RecyclerView 使用完全解析 体验艺术般的控件

转载请标明出处&#xff1a; http://blog.csdn.net/lmj623565791/article/details/45059587&#xff1b; 本文出自:【张鸿洋的博客】 概述 RecyclerView出现已经有一段时间了&#xff0c;相信大家肯定不陌生了&#xff0c;大家可以通过导入support-v7对其进行使用。 据官方的…

三维刚体变换

1.旋转向量&#xff1a; 满足以下关系 (E单位阵) 进一步得到&#xff1a; p经过旋转和平移得到,公式表达如下&#xff1a; ;(t平移矩阵) 我们可以将上面的式子写成齐次&#xff1a; T也成为变换举证&#xff08;transform Matrix&#xff09; 它的反变换可以表示如下&am…