码迷,mamicode.com
首页 > 其他好文 > 详细

Huffman树费用

时间:2019-02-06 09:20:09      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:color   构造   read   main   sum   tst   spl   print   java   

问题描述

  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

Java实现:

public class Huffuman {
    
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(br.readLine());
        String line=br.readLine();
        String [] s= line.split(" ");
        int []num=new int[n]; 
        // 初始化数组
        for(int i=0;i<n;i++) {
            num[i] = Integer.parseInt(s[i]);
        }
        int sum = 0;
        int result [] =new int[n];
        for(int i = 1;i < n;i++) {
            Arrays.sort(num);  //默认升序
            int min1 = num[i-1];
            int min2 = num[i];
            sum = (min1 + min2);
            num [i] = sum; //将sum覆盖较大数
            result [i] = sum;
        }
        sum = 0;
        for(int i = 0;i < n;i++ ) {
            sum += result [i];
        }
        System.out.println(sum);
    }

}

 

Huffman树费用

标签:color   构造   read   main   sum   tst   spl   print   java   

原文地址:https://www.cnblogs.com/outxiao/p/10353353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!