问题描述
  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的更多相关文章

  1. [数据结构与算法]哈夫曼(Huffman)树与哈夫曼编码

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. Huffman

    huffman是非常基础的压缩算法. 实现霍夫曼树的方式有很多种,可以使用优先队列(Priority Queue)简单达成这个过程,给与权重较低的符号较高的优先级(Priority),算法如下: ⒈把 ...

  3. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

  4. huffman压缩解压文件【代码】

    距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...

  5. 编程语言的基础——搞定JavaIO

    关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...

  6. Huffman 哈夫曼编码与译码的原理剖析及C++实现

    原理 我们在信息存储时,希望以最少的空间去存储最大的数据,方便数据的传输,那么该怎样做呢? 我们想到将源信息转化为01序列存储,但是这样以来又有一个问题,就是子串匹配问题,我们为了解决这个方法,想到了 ...

  7. 深度学习word2vec笔记之基础篇

    作者为falao_beiliu. 作者:杨超链接:http://www.zhihu.com/question/21661274/answer/19331979来源:知乎著作权归作者所有.商业转载请联系 ...

  8. huffman树即Huffma编码的实现

    自己写的Huffman树生成与Huffman编码实现 (实现了核心功能 ,打出了每个字符的huffman编码 其他的懒得实现了,有兴趣的朋友可以自己在我的基础增加功能 ) /* 原创文章 转载请附上原 ...

  9. 基础练习 Huffuman树

     基础练习 Huffuman树   时间限制:1.0s   内存限制:512.0MB        问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给 ...

随机推荐

  1. Vue - 项目配置 ( element , 安装路由 , 创建路由 )

    1,安装element     :      vue add element 2,安装路由          :     vue add router 3,创建路由的过程  :   (1) 新建 vu ...

  2. js利用递归生成随机数填充到数组

    用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值 var  array = new Array(5); function addNumToArray(array,num){     i ...

  3. IDE一直在indexing, 造成系统卡死解决方法

    点击箭头指向,重启idea

  4. 八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))

    一.项目功能概述 示例网址:http://www.todolist.cn/ 功能: 输入待做事项,回车,把任务添加到 [正在进行] [正在进行] 任务,勾选之后,变成已[经完成事项] [已完成事务], ...

  5. 三、jsx简化教程

    1)使用 JSX 的好处 1.提供更加语意化且易懂的标签 与html对比 <!--HTML写法--> <form class="messageBox"> & ...

  6. kafka管理神器-kafkamanager

    好久没发过kafka的文章了,今天整理一下kafka-manager神器. java环境要求 jdk8 kafkamanager源码下载 https://github.com/yahoo/kafka- ...

  7. UVA - 10539 Almost Prime Numbers (几乎是素数)

    题意:输入两个正整数L.U(L<=U<1012),统计区间[L,U]的整数中有多少个数满足:它本身不是素数,但只有一个素因子. 分析: 1.满足条件的数是素数的倍数. 2.枚举所有的素数, ...

  8. 每天一点点之vue框架开发 - 如何在一个页面调用另一个同级页面的方法

    使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: api传送门 在项目中实现: 1.首先同一个vue实例来调 ...

  9. Spring Tools 4 STS没有创建Dynamic Web Project的选项 以及 Spring Tools 4 STS New 菜单没有Spring Bean Configuration File选项

    Spring Tools 4 STS没有创建Dynamic Web Project的选项 STS4默认不带Dynamic Web Project插件. 解决方法:1.打开:Help 选择 Instal ...

  10. ping.sh

    扫描整个网段  nmap -sP 10.0.0.0/24 #!/bin/bash ps () { ping $1 -c 3 -w 2 |grep -q "ttl"      #结果 ...