基础练习--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树的构造过程. 给 ...
随机推荐
- CAD转PDF再由pdf转jpg图片
免费的PDF转JPG图片 https://www.gaitubao.com/pdf-to-jpg/
- scala 语言特性
Scala 语言特性 Unit 表示无值, 等价于java, C++中的void Null 表示空值或空引用 Nothing 所有其他类型的子类型, 表示没有值 Any 所有类型的超类, 任何实例都属 ...
- .NET via C#笔记17——委托
一.委托的内部实现 C#中的委托是一种类型安全的回调函数,假设有这样一个委托: internal delegate void Feedback(int value); 编译器会生成一个类: inter ...
- Apache使用mod_jk/mod_proxy模块实现代理、负载均衡的配置
转载自:https://blog.csdn.net/yuanyuan_186/article/details/51290518 192.168.1.123/192.168.1.121为后端tomcat ...
- Arduino - ( Uno、Nano、Promini)针脚示意图
Uno针脚示意图 Nano针脚示意图 Promini针脚示意图
- ubuntu下解压.zip文件乱码
解决方法 查看文件: lsar BA_schur.zip 解压文件: unar BA_schur.zip
- ubuntu安装opencv3.2
把master分支git下来: git clone git@github.com:opencv/opencv.git 查看可用的版本: git tag 选择自己想要的版本号: git reset -- ...
- Abstract抽象类 && Interface接口
# 抽象类 ## 将相同的但是不确定的动作提取出来,抽象化,抽象类的意义在于,在子类中进行实现. ## 抽象类可以被继承,子类继承抽象类时,需要对抽象方法进行完全实现. ## 抽象方法不能有方法体. ...
- 使用Spring AOP实现MySql的读写分离
转自:http://blog.csdn.net/xlgen157387/article/details/53930382 一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解 ...
- grep 使用方法 --rn使用
生产环境中,我们经常会碰到一个报错但是却不知道配置文件的路径在哪里,这时候用rn就能轻松解决 [root@localhost ~]# grep -rn "搜索的内容" 路径