基础练习--huffman
问题描述
Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
给出一列数{pi}={p0, p1, …, pn-},用这列数构造Huffman树的过程如下:
. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。
. 重复步骤1,直到{pi}中只剩下一个数。
在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。
本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。 例如,对于数列{pi}={, , , , },Huffman树的构造过程如下:
. 找到{, , , , }中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{, , , },费用为5。
. 找到{, , , }中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{, , },费用为10。
. 找到{, , }中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{, },费用为17。
. 找到{, }中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{},费用为27。
. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+++=。
输入格式
输入的第一行包含一个正整数n(n<=)。
接下来是n个正整数,表示p0, p1, …, pn-,每个数不超过1000。
输出格式
输出用这些数构造Huffman树的总费用。
样例输入 样例输出
这个代码超时 超时的点应该是每一次就只是简单的加一个元素,循环时候还要
循环他
改进的办法是进行删除的操作 1 #include <iostream>
using namespace std;
int n;
struct node{
int date;
int flag;
};
struct node a[];
int min()
{
int m=;
int k;
for(int i=;i<n;i++)
{
if(a[i].date<m&&a[i].flag==)
{
m=a[i].date;
k=i;
}
}
a[k].flag=;
return k;
}
void add(int l)
{
a[n].flag =;
a[n].date=l;
n++;
/* for(int x=0;x<n;x++)
{
cout<<"date"<<a[x].date<<" ";
cout<<"flag"<<a[x].flag<<endl; }*/
}
int is()
{ int t=;
for(int k=;k<n;k++)
{
if(a[k].flag==)
{
t++;
}
}
if(t==)
{
return t;
}
if(t>)
{
return ;
}
}
int main()
{
int sum=;
int s=;
int fron;
int after;
int o;
cin>>n;
for(int i=;i<n;i++)
{
cin>>a[i].date;
}
while(){
fron=a[min()].date;//找一个最小的
after=a[min()].date;//再找一个 最小的
s=fron+after;
//cout<<sum<<endl;
add(s);
sum=sum+s;
int t=is();//如果还剩下一个数 返回一个1
if(t)
{
break;
sum=sum+t;
}
}
cout<<sum;
return ;
}
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
int a[200];
bool complare(int a,int b)
{
return a>b;
}
void min()
{
sort(a,a+n,complare);
/* for(int x=0;x<n;x++)
{
cout<<"date"<<a[x]<<" ";
}*/
}
/*void add(int l)
{
a[n].flag =0;
a[n].date=l;
n++;
/**/ int main()
{
int sum=0;
int s=0;
int fron;
int after;
int o;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
while(n>1){
min(); a[n-2]=a[n-1]+a[n-2];
//cout<<"a[n-2]"<<a[n-2] <<endl;
sum=sum+a[n-2];
n--;
}
cout<<sum;
return 0;
}
基础练习--huffman的更多相关文章
- [数据结构与算法]哈夫曼(Huffman)树与哈夫曼编码
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Huffman
huffman是非常基础的压缩算法. 实现霍夫曼树的方式有很多种,可以使用优先队列(Priority Queue)简单达成这个过程,给与权重较低的符号较高的优先级(Priority),算法如下: ⒈把 ...
- Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序
前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...
- huffman压缩解压文件【代码】
距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...
- 编程语言的基础——搞定JavaIO
关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...
- Huffman 哈夫曼编码与译码的原理剖析及C++实现
原理 我们在信息存储时,希望以最少的空间去存储最大的数据,方便数据的传输,那么该怎样做呢? 我们想到将源信息转化为01序列存储,但是这样以来又有一个问题,就是子串匹配问题,我们为了解决这个方法,想到了 ...
- 深度学习word2vec笔记之基础篇
作者为falao_beiliu. 作者:杨超链接:http://www.zhihu.com/question/21661274/answer/19331979来源:知乎著作权归作者所有.商业转载请联系 ...
- huffman树即Huffma编码的实现
自己写的Huffman树生成与Huffman编码实现 (实现了核心功能 ,打出了每个字符的huffman编码 其他的懒得实现了,有兴趣的朋友可以自己在我的基础增加功能 ) /* 原创文章 转载请附上原 ...
- 基础练习 Huffuman树
基础练习 Huffuman树 时间限制:1.0s 内存限制:512.0MB 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给 ...
随机推荐
- SSM文件上传要点总结
文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...
- BZOJ 4853 [Jsoi2016]飞机调度
题解: 我严重怀疑语文水平(自己的和出题人的) 把航线按照拓扑关系建立DAG 然后最小路径覆盖 为什么两条首尾相接航线之间不用维护???? #include<iostream> #incl ...
- IPsec_crypto[6]次配置
IPsec_crypto[6]次配置: ①.①:crypto isakmp enbale——启用ISAKMP ②.②:crypto isakmp policy 10——创建一个策略组 ③:encryp ...
- 《方方格子》(WPS版) _v3.6.6.0
<方方格子>(WPS版) 下载地址(b2a7) SHA1:35AE4D99B77613D9E2BAF912477DC74C5C2B8389 版本信息 发行版本 3.6.6.0 ...
- 三十五、在SAP中定义选择屏幕,设置选择范围
一.代码如下,有2个地方需要注意,一个是SELECT-OPTIONS,还有一个是IN的使用 二.我们定义一下选择文本 三.我们运行程序 四.输出 五.当然,选择的时候,我们也可以用其他的方式,如下图
- 二十七、SAP中通过以字段的形式输出内容
一.输出时,需要加入关键词sy-vline,代码如下 二.效果如下
- .net core项目iis10上出现 HTTP 错误 500.19,错误代码:0x8007000d
文件权限更改,配置文件更改,IIS重装重启,各种办法都不管用,下面是解决办法: 看错误信息里:模块:IIS Web Core 打开IIS: 模块列表中是否缺少红框里的两个组件(我这是已经安装好的截图) ...
- Assignment写作谨慎学术抄袭是关键
学术写作(Academic Writing)作为留学生涯的“必修课”,总是让闻者叹气,抓耳挠腮.初入课堂的留学生,更是缺乏写作经验不知从何下笔,只想仰天长啸“Essay真的好难啊!!”面对一个Essa ...
- RabbitMQ系列文章
详解 RabbitMQ 管理界面解析框架 (一) RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用 RabbitMQ windows安装步骤 RabbitMQ管理页面各种属性详解 ...
- (java) webdriver 启动firefox driver时,加载firebug的扩展
去网上下载一个firebug.xpi(对应版本, 我的ff是17,可以使用firebug-1.11.4.xpi,最好使用非firefox浏览器下载,不然提示你直接安装到firefox) @Before ...