20162311 2017-2018-1 《程序設計與數據結構》第九周學習總結

20162311 2017-2018-1 《程序設計與數據結構》第九周學習總結

教材學習內容總結

  • 堆的概念以及相關方法的實現
  • 本身實現最大堆的findMax方法,即獲取堆的根元素
  • 利用堆進行排序:將一組元素插入最大堆中,再依次刪除最大元素(也就是根元素),便可獲得這組元素的降序排列;相似地,可用最小堆獲得升序排列
  • 優先隊列:根據優先級進行排序,若優先級相同,則聽從FIFO的規則

代碼調試中的問題和解決過程

  • 問題1:教材上的PriorityQueue,找不到addElement方法和removeMin方法
  • 問題1解決方案:html

    出錯的方法都是super調用的父類的方法,而這個類是繼承了LinkedMaxHeap類, 我去查找LinkedMaxHeap類,發現它有add方法,我想應該是書上代碼有誤,並且按照註釋的意思這個addElement和add的功能應該是同樣的,因此我將其改爲了add,這樣就沒問題了;而removeMin(),在LinkedMaxHeap中只有removeMax()方法,我又看了下注釋,git

    //-----------------------------------------------------------------
    
        //  Removes the next highest priority element from this queue and
    
        //  returns a reference to it.
    
        //-----------------------------------------------------------------

    我判斷這裏應該是用removeMax。改了以後才符合註釋的描述數據結構

  • 問題2:以前問題1的兩個方法改完後,還有問題
    學習

  • 問題2解決方案:this

詢問老師,老師說在命令行下編譯,看看結果。我試着在命令行下編譯,發現它提示錯誤出在PriorityQueueNode類中,因而我打開PriorityQueueNode類,發現它實現了Comparable接口,用到了泛型,把比較的類型設爲PriorityQueueNode類型,漏了一個<T>

加上以後就 沒問題了加密

代碼託管


(statistics.sh腳本的運行結果截圖)命令行

上週考試錯題總結

  • 錯題1及緣由,理解狀況
  • 錯題2及緣由,理解狀況

結對及互評

本週結對學習狀況

  • 20162325設計

  • 結對學習內容調試

    • 教結對夥伴完成哈夫曼樹的解碼
    • 學習哈夫曼樹

思考

本週主要學習了堆、優先隊列和哈夫曼樹,包括實現哈夫曼樹,用哈夫曼樹進行加密解密等等,學完以後,對於樹結構的認識又加深了一些。我的感受非線性結構應該比線性結構要用的多以寫,應爲不少實際問題並不必定能抽象成線性的,因此非線性結構也應當學習的更深刻,方便咱們之後解決實際問題code

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 10/10
第二週 0/0 0/1 15/25
第三週 721/721 3/4 15/40
第四周 0/721 1/5 15/55
第五週 1234/1955 1/6 16/71
第六週 0/1955 3/9 20/91
第七週 1474/3429 2/11 24/115
第八週 1010/4439 2/13 25/140
第九周 2409/6848 1/14 22/162
  • 計劃學習時間:25小時

  • 實際學習時間:22小時

  • 改進狀況:還要多花時間,增強學習

參考資料

相關文章
相關標籤/搜索