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

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

教材學習內容總結

第十二章

1.堆:具備兩個附加屬性的一顆二叉樹,它是一顆徹底二叉樹,對每一結點,它小於或等於其左右孩子(或大於等於其左右孩子)數組

2.最小堆:對每一結點,它小於或等於其左右孩子,將其最小元素存儲在二叉樹的根處,且其根的兩個孩子一樣也是最小堆
網絡

3.最大堆:對每一結點,它大於或等於其左右孩子,將其最大元素存儲在二叉樹的根處,且其根的兩個孩子一樣也是最大堆數據結構

操做                          說明                              

    addElement                往堆的合適位置添加一個元素                      

    removeElement             從堆中刪除一個元素                      

    removeAllOccurrences      從堆中刪除所指定元素的任何存在            

    removeMin                 刪除堆中的最小元素並返回它                        

    removeMax                 刪除樹堆的最大元素並返回它                       

    findMin                   返回一個指向堆中最小元素的引用            

    findMax                   返回一個指向堆中最大元素的引用

堆的使用:優先級隊列

 

1.優先級隊列就是遵循兩個排序規則的集合:具備更高優先級的項目在;具備相同優先級的項目使用先進先出方法來肯定其排序學習

2.優先級隊列具備多種應用(好比,操做系統中的任務調度,網絡中的通訊調度,甚至是汽車維修處的做業調度)字體

3.能夠使用某一隊列列表(其中每一隊列都表示了給定優先級的項目)來實現一個優先級隊列操作系統

4.按照優先級對堆排序完成了第一次排序(高優先級的項目在先)。可是,咱們必須對具備相同優先級項目的先進先出排序進行操縱:
解決方案是建立一個 PriorityQueueNode對象,它存儲的是將被放置在隊列中的元素,該元素的優先級,以及元素放進隊列的順序
而後,咱們只需爲 PriorityNode類定義個 compareTo方法,以便先對優先級進行比較,而後在優先級同樣的時候再對階進行比較設計

堆的實現

1.列表實現堆:堆的鏈表實現要求在插入元素後可以向上遍歷該樹,因此堆中的結點必須存儲指向其雙親的指針。指針

2.數組實現堆:樹的根位於位置0,對於每一結點n,n的左孩子將位於數組的2n+1位置處,n的右孩子將位於數組的2(n+1)位置處(反過來一樣也是對的)
對於任何除了根以外的結點n,n的雙親位於(n-1)/2位置處,由於咱們可以計算雙親和孩子的位置,因此與鏈表實現不一樣的是,數組實現不須要建立一個 Heap Node類調試

堆的使用:堆排序

1.使用堆來對某個數字列表進行排序:將列表的每一元素添加到堆中,而後次一個地將它們從根中刪除,在最小堆的情形下,排序結果將是該列表以升序排列;在最大堆的情形下,排序結果將是該列表以降序排列。code

2.因爲添加和刪除操做的複雜度都爲O(log n),所以能夠得出堆排序的複雜度也是O(log n),可是,這些操做的複雜度爲O(log n)指的是在含有n個元素的列表中添加和刪除一個元素。

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

  • 問題1:教材中有這樣一句話:「一般在堆的實現中,咱們會對二叉樹的最後一片葉子進行跟蹤記錄。」那麼爲什麼要對二叉樹的最後一片葉子進行追蹤記錄?
  • 問題1解決方案:在對堆進行插入和刪除操做的時候須要將根結點與最後一片葉子結點進行交換位置。

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

  • 問題1:無

碼雲連接

結對及互評

博客中值得學習的或問題:

  • 博客排版工整,界面很美觀,而且本週還對博客排版、字體作了調整,很用心
  • 問題總結作得很全面:對課本上不懂的代碼會作透徹的分析,即使能夠直接拿過來用而不用管他的含義

本週結對學習狀況

  • 20172315
  • 20172318

結對學習內容

  • p12.3 
  • 堆排序
相關文章
相關標籤/搜索