<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      得之我幸cyz

      試題 基礎(chǔ)練習 Huffuman樹(Java)

      試題 基礎(chǔ)練習 Huffuman樹

      資源限制

      時間限制:1.0s 內(nèi)存限制:512.0MB

      問題描述

        Huffman樹在編碼中有著廣泛的應用。在這里,我們只關(guān)心Huffman樹的構(gòu)造過程。  給出一列數(shù){pi}={p0, p1, …, pn-1},用這列數(shù)構(gòu)造Huffman樹的過程如下:  1. 找到{pi}中最小的兩個數(shù),設(shè)為papb,將papb從{pi}中刪除掉,然后將它們的和加入到{pi}中。這個過程的費用記為pa + pb  2. 重復步驟1,直到{pi}中只剩下一個數(shù)。  在上面的操作過程中,把所有的費用相加,就得到了構(gòu)造Huffman樹的總費用。  本題任務:對于給定的一個數(shù)列,現(xiàn)在請你求出用該數(shù)列構(gòu)造Huffman樹的總費用。  例如,對于數(shù)列{pi}={5, 3, 8, 2, 9},Huffman樹的構(gòu)造過程如下:  1. 找到{5, 3, 8, 2, 9}中最小的兩個數(shù),分別是2和3,從{pi}中刪除它們并將和5加入,得到{5, 8, 9, 5},費用為5。  2. 找到{5, 8, 9, 5}中最小的兩個數(shù),分別是5和5,從{pi}中刪除它們并將和10加入,得到{8, 9, 10},費用為10。  3. 找到{8, 9, 10}中最小的兩個數(shù),分別是8和9,從{pi}中刪除它們并將和17加入,得到{10, 17},費用為17。  4. 找到{10, 17}中最小的兩個數(shù),分別是10和17,從{pi}中刪除它們并將和27加入,得到{27},費用為27。  5. 現(xiàn)在,數(shù)列中只剩下一個數(shù)27,構(gòu)造過程結(jié)束,總費用為5+10+17+27=59。

      輸入格式

        輸入的第一行包含一個正整數(shù)nn<=100)。  接下來是n個正整數(shù),表示p0, p1, …, pn-1,每個數(shù)不超過1000。

      輸出格式

        輸出用這些數(shù)構(gòu)造Huffman樹的總費用。

      樣例輸入

      5 5 3 8 2 9

      樣例輸出

      59

      代碼

       1 import java.util.Collections;
       2 import java.util.PriorityQueue;
       3 import java.util.Scanner;
       4 import java.util.Vector;
       5 ?
       6 ?
       7 public class Main {
       8     static PriorityQueue<Integer> q;
       9      
      10     public static void main(String[] args) {
      11         Scanner sc = new Scanner(System.in);
      12         q = new PriorityQueue<Integer>();
      13         int n = sc.nextInt();
      14         for (int i = 0; i < n; i++) {
      15             q.offer(sc.nextInt());
      16         }
      17         int ans = 0;
      18         int tmp1, tmp2;
      19         int ans1 = 0;
      20         while (!q.isEmpty() && q.size() >= 2) {
      21             ans = 0;
      22             tmp1 = q.poll();
      23             tmp2 = q.poll();
      24             ans = tmp1 + tmp2;
      25             q.offer(ans);
      26             ans1 += ans;
      27         }
      28         System.out.println(ans1);
      29     }
      30 ?
      31 }
      32 ?

       

       

      總結(jié)

      1.優(yōu)先隊列類——PriorityQueue

      (1)初始化

      PriorityQueue()//創(chuàng)建一個 PriorityQueue,并根據(jù)其自然順序?qū)υ剡M行排序。

      (2)常用函數(shù)

      1 add(E e)//將指定的元素插入此優(yōu)先級隊列。
      2 clear()//清空
      3 contains(Object o) // 如果包含指定元素返回true
      4 iterator()//返回在此隊列中的元素上進行迭代的迭代器。
      5 offer(E e) // 將指定元素插入此優(yōu)先隊列
      6 peek() // 獲取第一個元素,及最小或最大元素
      7 poll() // 獲取并移除第一個
      8 remove(Object o) // 移除指定元素
      9 size() // 返回元素個數(shù)

      (3)實現(xiàn)大根堆的兩種方式

      java默認的PriorityQueue()是小根堆,也就是按照遞增的順序,那我們想要遞減時怎么辦呢?有兩種方法

      1.使用自定義比較器

      1 PriorityQueue<Integer> maxHeap=new PriorityQueue<Integer>(11, new Comparator<Integer>() {//默認初始大小為11
      2         public int compare(Integer o1, Integer o2) {                
      3             return o2-o1;
      4         }
      5     });

       

      2.將所有數(shù)據(jù)變?yōu)樨摂?shù)再插入

      2.算法思想

      從優(yōu)先隊列(遞增順序)中依次取兩次棧頂元素,相加,再把相加的數(shù)加入隊列中,直到最后只有1個元素,然后ans+=棧頂兩數(shù)之和,最后輸出ans

      posted on 2020-04-20 21:18  生如夏花,死如秋葉  閱讀(278)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产精品一二三中文字幕| 国产久免费热视频在线观看| 国产69精品久久久久久妇女迅雷| 杭锦旗| 久久妇女高潮喷水多| 免费a级毛片无码av| 华阴市| 国产一区二区三区不卡观| 男女性杂交内射女bbwxz| 久久av高潮av无码av喷吹| 亚洲人成网线在线播放VA| 色九九视频| 好男人官网资源在线观看| 通山县| 亚洲偷自拍另类一区二区| 久久99国内精品自在现线 | 国产综合久久99久久| 少妇爽到呻吟的视频| 人妻综合专区第一页| 亚洲日本欧美日韩中文字幕| 国产精品久久国产丁香花| 国产精品va在线观看无码不卡| 视频一区二区不中文字幕| 中文字幕人妻日韩精品| 四虎影视永久在线精品| 亚洲狠狠婷婷综合久久久| 日本亚洲一级中文字幕| 午夜精品福利亚洲国产| 九九视频热最新在线视频| 亚洲国产精品久久久久婷婷老年 | 国内少妇人妻偷人精品| 宣城市| 无遮挡高潮国产免费观看| 国产成人精品无码一区二区老年人| 国产a在视频线精品视频下载| 麻豆亚洲精品一区二区| 亚洲精品欧美综合二区| 亚洲色欲在线播放一区| 丝袜人妻一区二区三区网站| 久9re热视频这里只有精品免费| 成人乱码一区二区三区四区|