1. 程式人生 > >20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結

20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結

插入元素 替換 小堆 列表 代碼調試 text 二叉樹 add 置0

20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結

教材學習內容總結

  • 堆是一棵完全二叉樹,其中的每一結點都小於或等於它的兩個孩子。
  • 最小堆將其最小元素存儲在該二叉樹的根處,且其根的兩個孩子同樣也是最小堆。
  • addElement方法將給定的Comparable元素添加到堆中的恰當位置處,且維持該堆的完全性屬性和有序屬性。
  • 因為一個堆就是一棵完全樹,所以對於插入的新結點而言,只存在一個正確的位置,且它要麽是h層左邊的一個空位置,要麽是h+1層左邊的第一個位置(如果h層是滿的話)。
  • 通常,在堆實現中,我們會對樹中的最末一個結點,或更為準確的是,最末一片葉子進行跟蹤記錄。
  • 要維持該樹的完全性,那麽只有一個能替換根的合法元素,且它是存儲在樹中最末一片葉子上的元素。
  • 雖然最小堆根本就不是一個隊列,但是它卻提供了一個高效的優先級隊列實現。
  • 因為我們要求在插入元素後能夠向上遍歷該樹,所以堆中結點必須存儲指向其雙親的指針。
  • 在二叉樹的數組實現中,樹的根位於位置0處,對於每一結點n,n的左孩子將位於數組的2n+1位置處,n的右孩子位於數組的2(n+1)位置處。
  • 鏈表實現和數組實現的addElement操作的時間復雜度同為O(logn)。
  • 鏈表實現和數組實現的removeMin操作的復雜度同為O(logn)。
  • heapSort方法的兩部分構成:添加列表的每一個元素,然後一次刪除一個元素。
  • 堆排序的復雜度為O(nlogn)。

教材學習中問題和解決過程

  • 問題1:如何創建一個泛型方法

  • 問題1解決方案:創建一個泛型方法,需在方法頭的返回類型前插入一個泛型聲明
    例:
public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
  IllegalAccessException{
        T instance = tClass.newInstance();
        return instance;
}

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

  • 問題1:
  • 問題1解決方案:

代碼托管

技術分享圖片

上周考試錯題總結

本周沒有錯題。

結對及互評

  • 本周結對學習情況
    • 20172311
    • 對課本上的諸多疑問點進行了討論,同時對代碼實現過程中遇到的一些問題也通過討論得以解決。
  • 上周博客互評情況
    • 20172311

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0/0 1/1 6/6
第二周 612/612 1/2 18/24
第三周 516/1128 1/3 16/40
第四周 702/1830 2/5 16/56
第五周 1926/3756 1/6 18/74
第六周 948/4304 1/7 18/92

參考資料

  • 《java 泛型詳解-絕對是對泛型方法講解最詳細的,沒有之一》

  • 《Java程序設計與數據結構教程(第二版)》

  • 《Java程序設計與數據結構教程(第二版)》學習指導

20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結