基础练习 Huffuman树 _C语言和C++描述!(Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1)
问题描述
Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:
1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。
2. 重复步骤1,直到{pi}中只剩下一个数。
在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。
本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。
例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:
1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。
2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。
3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。
4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。
5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。
输入格式
输入的第一行包含一个正整数n(n<=100)。
接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。
输出格式
输出用这些数构造Huffman树的总费用。
样例输入
5
5 3 8 2 9
样例输出
59
思路
C语言版:在每一个循环中遍历两次,再找出第一个最小值的时将其赋成最大值,进而可以找出第二小最小值,并进行判断和累加。
C++版:利用sort排序函数明显变得简单了许多,少去了较为复杂的判断逻辑。
代码呈上:
#include <stdio.h>
#define MAX 10000000
int main()
{int n;scanf("%d",&n);int p[n];int i,flag=0,sum=0;int min1,min2;for(i=0;i<n;i++){scanf("%d",&p[i]);}min1=MAX,min2=MAX;while(1){for(i=0;i<n;i++){if(p[i]<min1){min1=p[i];flag=i;}}p[flag]=MAX;for(i=0;i<n;i++){if(p[i]<min2){min2=p[i];flag=i;}}p[flag]+=min1;if(min2==MAX){break;}else{sum+=min1+min2;min1=MAX;min2=MAX;}}printf("%d",sum);return 0;}
#include <iostream>
#include <algorithm>
using namespace std;int main ()
{int a[100];int i,n;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}sort(a,a+n);int sum=0;while(n>1){i=0;a[i]=a[i]+a[i+1];sum+=a[i];a[i+1]=-1;sort(a,a+n);for(i=0;i<n;i++){a[i]=a[i+1];}n--;}printf("%d",sum);return 0;
}
运行示例
基础练习 Huffuman树 _C语言和C++描述!(Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1)相关推荐
- Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, -, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{p ...
- c语言和java的区别_C语言和Java的区别有哪些
C语言和Java的区别有哪些 作为编程界的两大编程语言-C语言和Java,它们之间有什么不同呢?下面小编给大家整理了C语言和Java的区别,供大家参阅. 1.C语言 C语言是一门通用计算机编程语言,应 ...
- R语言和Hadoop系统架构在大数据分析中的应用
也许正在喝着咖啡的你,看着阳光从玻璃窗蹦进来,回忆近日的美好,惬意的享受这个"温暖"的暑假.而SupStat已经为你准备了一份暑期数据盛宴. R是什么? ...
- 用c语言编程牛顿环实验报告,C语言和Origin7.5软件在实验中的应用——以牛顿环测纯水折射率为例.pdf...
您所在位置:网站首页 > 海量文档  > 计算机 > C/C++资料 C语言和Origin7.5软件在实验中的应用-- ...
- python和c语言哪个效率高_C语言和Python哪个更容易学?
C语言和Python哪个更容易学? 发布时间:2020-06-05 20:46:38 来源:亿速云 阅读:157 C语言和Python哪个更容易学?针对这个问题,今天小编总结这篇有关C语言和Pytho ...
- java程序设计 c语言_C语言和Java编程有什么区别?
C语言和Java编程有什么区别?Java从根本上说是c之后的一种改进语言,纯面向对象的一种编程语言(当然比起Ruby还是差一点),有了C语言的基础固然对学习Java有帮助,因为在某种程度上Java和C ...
- c语言和java哪个有前途_C语言和Java哪个更适合初学者?
目前,无论是从应用范围还是流行程度来看,C语言和Java都是当下最为火热的编程语言.想要零基础入门编程的学习者在一开始的学习中都会碰到这样的难题:C语言和Java哪个更适合初学者?的确,编程语言的选择 ...
- python和c语言哪个更难学深_c语言和python先学哪个比较简单
c语言和python相比来说,python要简单一些,先学python容易上手.不过,c语言比python难,如果先学c语言能够打好基础,日后再学习别的语言要简单得多.不管先学哪个都可以,看大家自己怎 ...
- 学python还是c加加更实用_c语言和python先学哪个比较简单
c语言和python相比来说,python要简单一些,先学python容易上手.不过,c语言比python难,如果先学c语言能够打好基础,日后再学习别的语言要简单得多.不管先学哪个都可以,看大家自己怎 ...
最新文章
- Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑
- Mac ssh 挂载linux服务器
- 一篇文章解决机器学习,深度学习入门疑惑
- 文巾解题 876. 链表的中间结点
- MAPREDUCE的实战案例
- Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所
- CentOS 6.4 编译安装 gcc-4.8.0
- hutool的定时任务不支持依赖注入怎么办_设计一个任务调度算法,时间轮算法,比优先队列更高效...
- 日期setMinutes()方法以及JavaScript中的示例
- 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python
- Intel(R) 处理器产品架构/微架构对照表
- elipse调试linux内核,debug eclipse cdt + qemu虚拟机调试linux内核
- 女生学的计算机专业有前途吗,计算机专业好不好 女生学计算机有前途吗
- imregionalmax imregionalmin imextendedmax imextendedmin imhmax imhmin 函数的详解 matlab中函数
- 1023. Have Fun with Numbers (20)
- 一个前端博客(7)——事件绑定和移除事件
- 监测系统的cpu,物理内存,磁盘的使用
- 信息检索的过去 当前 未来-------浅层分析报告
- win8需要计算机管理员权限才能删除,win8系统使用管理员权限无法删除部分文件怎么办...
- 高通平台msm8953 display子系统学习