基础练习--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树的构造过程. 给 ...
随机推荐
- Asp.net mvc+EF+Sql Server2008数据库缓存依赖
1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ...
- 前端解析返回的对象时json显示$ref问题的解决
在mapper中写的语句,结果集中association,采用的一个对象,整个list列表中每个元素有一个对象元素,如果第二个元素中有一个与第一个元素中对象同名的,就会去引用上一个元素的地址,在jso ...
- USB2.0主机控制器 UPD720114 简单详解
UPD720114 是符合 USB 2.0规格的集线器控制器,适用于“符合生态原则的解决方案”.这种小型封装的控制器集成了核心逻辑电路的2.5 V 内部电压调整器.终端电阻器,减少了所需要的外部组件的 ...
- 【LeetCode】不同二叉搜索树
[问题] 卡特兰(Catalan)数来源于卡特兰解决凸n+2边形的剖分时得到的数列Cn,在数学竞赛.信息学竞赛.组合数学.计算机编程等方面都会有其不同侧面的介绍.卡特兰问题的解决过程应用了大量的映射方 ...
- mitmproxy(TLS错误)
一.原来的基础上添加代码 """ This inline script allows conditional TLS Interception based on a us ...
- 1. Centos 安装
安装 Centos 6.9 配置网络 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes ...
- 实验吧-密码学-变异凯撒(ascii码规律运算)
密文是:afZ_r9VYfScOeO_UL^RWUc 刚开始很迷,不知道往什么方向,到最后才发现,原来和ASCII有关. 将flag{的ASCII码和密文的ASCII码对比: 97 102 90 95 ...
- Sqlserver 增删改查----改
--我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...
- Sklearn 速查
## 版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Lear ...
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...