• 基础练习 Huffuman树


    /*
    基础练习 Huffuman树  
    
    问题描述
      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
    
    */
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            ArrayList a = new ArrayList();
            for (int i = 0; i < n; i++)
                a.add(sc.nextInt());
            sc.close();
            while (a.size() >= 2) {
                f(a);
            }
            System.out.println(cost);
        }
    
        static int cost = 0;
    
        static ArrayList f(ArrayList a) {
            Collections.sort(a);
            Object min1 = a.get(0);
            a.remove(min1);
            Object min2 = a.get(0);
            a.remove(min2);
            cost += (int) min1 + (int) min2;
            a.add((int) min1 + (int) min2);
            return a;
        }
    }
  • 相关阅读:
    Linux系统工程师必学的系统管理命令(1)
    学习中LINUX中常见问题(精华)
    "Visual Studio .NET已检测到指定的Web服务器运行的不是ASP.NET 1.1 版..."的解决办法
    今天,我决定离开
    Web Standards for Business 恐怕我没有时间翻译完了,有兴趣的可以继续
    了解到的关于深圳的一些事情
    谢谢大家,在深圳找到公司实习,发贴庆祝
    微软状告Google挖墙角,呵呵,微软坐不住了
    每个人都是生活的导演
    闷啊,一个人的孤单,一个人的所谓的项目
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8623088.html
Copyright © 2020-2023  润新知