20172315 2018-2019-1 《程序設計與數據結構》第八週學習總結

20172315 2018-2019-1 《程序設計與數據結構》第八週學習總結

教材學習內容總結

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

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

  • 問題1:爲何要維持該樹的徹底性,那麼只有一個能替換根的合法元素,且它是存儲在樹中最末一片葉子上的元素
  • 問題1解決方案:因爲堆是隊列結構,只能從堆中刪除堆頂元素。移除堆頂元素以後,用堆的最後一個節點填補取走的堆頂元素,並將堆的實際元素個數減1。但用最後一個元素取代堆頂元素以後有可能破壞堆,所以須要將對自頂向下調整,使其知足最大或最小堆。
    html

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

  • 問題1:對於pp12.1說的堆中的比較操做必須依照進入該隊列的順序來進行是什麼意思
  • 問題1解決方案:優先級隊列把優先級改成同樣便可解決

代碼託管

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

上週考試錯題總結

  • 錯題1及緣由,理解狀況
    Insertion sort is an algorithm that sorts a list of values by repetitively putting a particular value into its final, sorted, position.

A . true
B . false
正確答案: B
你的答案: A
insertion sort:插入排序一種排序算法,經過反覆地把某個元素插入到以前已排序的子列表中,實現元素的排序。web

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 對於教材內容解析到位
    • 對於問題探討不夠
  • 代碼中值得學習的或問題:
    • 代碼簡潔,一目瞭然
    • 代碼註釋過少

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172318算法

    • 結對學習內容
      • 第12章
  • 上週博客互評狀況

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 0/0 0/0
第二週 800/800 2/2 18/18
第三週 600/1400 3/5 22/40
第四周 700/1300 3/8 22/62
第五週 400/1700 3/11 22/84
第六週 200/1900 2/13 20/94
第七週 400/2300 2/15 20/114
第八週 600/2900 2/17 20/134

參考資料

相關文章
相關標籤/搜索