[Java] 藍橋杯BASIC-28 基礎練習 Huffuman樹
阿新 • • 發佈:2018-12-13
問題描述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樹的構造過程如下:
package base28; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < n; i++) { list.add(in.nextInt()); } int sum = 0; Collections.sort(list); int s = list.size(); while (s >= 2) { int temp = list.get(0) + list.get(1); list.remove(0); list.remove(0); sum += temp; list.add(temp); Collections.sort(list); s = list.size(); } System.out.println(sum); } }