博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础练习 Huffuman树
阅读量:4610 次
发布时间:2019-06-09

本文共 1275 字,大约阅读时间需要 4 分钟。

问题描述
  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
  给出一列数{
pi}={
p
0,
p
1, …,
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个正整数,表示
p
0,
p
1, …,
pn
-1,每个数不超过1000。
输出格式
  输出用这些数构造Huffman树的总费用。
样例输入
5
5 3 8 2 9
样例输出
59
1 import java.math.BigInteger; 2 import java.text.DecimalFormat; 3 import java.util.Arrays; 4 import java.util.Scanner; 5  6 public class Main { 7     public static void main(String[] args) { 8         Scanner input = new Scanner(System.in); 9         int n = input.nextInt();10         int[] a = new int[n];11         int[] temp = new int[n];12         int sum = 0;13         int h = n;14         for(int i=0;i

 

转载于:https://www.cnblogs.com/lolybj/p/6487527.html

你可能感兴趣的文章
MSSQL使用sqlbulkcopy批量插入数据
查看>>
证明一个数能被3整除,当且仅当它的各位数的和能被3整除
查看>>
2018秋寒假作业4—PTA编程总结1
查看>>
android自适应屏幕
查看>>
2019-北航面向对象-电梯作业总结
查看>>
SqlHelper
查看>>
初识算法、数据结构
查看>>
Luogu4069 SDOI2016 游戏 树链剖分、李超线段树
查看>>
Java的内部类真的那么难以理解?
查看>>
一文搞懂Java环境,轻松实现Hello World!
查看>>
hash实现锚点平滑滚动定位
查看>>
也谈智能手机游戏开发中的分辨率自适应问题
查看>>
【转】MYSQL数据库设计规范与原则
查看>>
《中国大历史》—— 读后总结
查看>>
回溯法算法框架
查看>>
残差学习【转载】
查看>>
0302 关于IT行业的就业感想
查看>>
3、流程语句相关练习
查看>>
30、git 使用
查看>>
iOS网络-02-数据解析(JSON与XML)
查看>>