zoukankan      html  css  js  c++  java
  • Java蓝桥杯练习题——Huffman树

    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树的构造过程如下:
    3. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。
    4. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。
    5. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。
    6. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。
    7. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。
      输入格式
      输入的第一行包含一个正整数n(n<=100)。
      接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。
      输出格式
      输出用这些数构造Huffman树的总费用。
      样例输入
      5
      5 3 8 2 9
      样例输出
      59

    package bb;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    public class Huffman树 {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		List<Integer> list = new ArrayList<Integer>();
    		for (int i = 0; i < n; i++) {
    			int p = sc.nextInt();
    			list.add(p);
    		}
    		sc.close();
    		// -----------
    		boolean flag = true;
    		int sum = 0;
    		while (flag) {
    			if (list.size() < 2) {
    				System.out.println(sum);
    				flag = false;
    			} else {
    				int _arrSorted[] = new int[list.size()];
    				for (int i = 0; i < _arrSorted.length; i++) {
    					_arrSorted[i] = list.get(i);
    				}
    				Arrays.sort(_arrSorted);
    				int pa = _arrSorted[0];
    				int pb = _arrSorted[1];
    				list.remove(Integer.valueOf(pa));
    				list.remove(Integer.valueOf(pb));
    				int pab = pa + pb;
    				sum += pab;
    				list.add(pab);
    			}
    		}
    	}
    }
    
  • 相关阅读:
    Druid 使用 Kafka 将数据载入到 Kafka
    Druid 使用 Kafka 数据加载教程——下载和启动 Kafka
    Druid 集群方式部署 —— 启动服务
    Druid 集群方式部署 —— 端口调整
    Druid 集群方式部署 —— 配置调整
    Druid 集群方式部署 —— 配置 Zookeeper 连接
    Druid 集群方式部署 —— 元数据和深度存储
    Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置
    Druid 集群方式部署 —— 选择硬件
    Druid 独立服务器方式部署文档
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11190962.html
Copyright © 2011-2022 走看看