20172319 《程序設計與數據結構》 第八週學習總結

20172319 2018.11.04-11.11

《程序設計與數據結構》第8周學習總結

目錄


教材學習內容總結

第十二章 優先隊列與堆

  • 12.1 堆:html

  • 堆(heap) : 具備兩個附加屬性 的二叉樹;是一棵徹底二叉樹。
  • 最小堆(minheap) : 每一結點小於或等於其兩個孩子;其根的兩個孩子一樣爲最小堆。
    git

  • 最大堆(maxheap) : 每一結點大於或等於其兩個孩子;其根的兩個孩子一樣爲最大堆。
    數組

  • 元素相同,構造的堆也能夠不一樣:
    數據結構

  • 堆的操做
  • 操做 說明
    addElement 將給定元素添加到該堆中
    removeMin 刪除堆的最小元素
    findMin 返回一個指向堆中最小元素的引用
  • 12.1.1 addElement操做:
  • 將給定的元素添加至適當位置,並維持好該堆的徹底性和有序性
  • 對於堆而言,由於其是一棵徹底二叉樹,因此在插入時會保持其徹底性,因此對於新插入的結點來講,只存在一個正確的位置:要麼其爲h層左邊的下一個空位置,要麼其爲h+1層左邊的第一個位置。
  • 12.1.2 removeMin操做:
  • 刪除堆的最小元素並返回;
  • 用最末端的葉子替代根;
  • 重構堆。
    學習

  • 12.1.3 findMin操做:
  • 堆的根處存儲的是堆中的最小元素,所以只需返回其便可。.net

  • 12.2 使用堆:優先級隊列
  • 優先級隊列(priority queue) 和一般的棧和隊列同樣,但裏面的每個元素都有一個優先級 ,在處理的時候,首先處理優先級最高的。若是兩個元素具備相同的優先級,則按照他們插入到隊列中的前後順序處理。設計

  • 雖然堆並不是一個隊列,但其提供了一個高效 的優先級隊列實現。3d

  • 12.3 使用鏈表實現堆
  • 爲能向上遍歷樹,每一個結點存儲了指向雙親的指針。指針

  • 12.3.1 addElement操做:
  • 在恰當位置添加一個新元素
  • 對堆進行重排序以維持其排序屬性
  • lastNode指針從新設定爲指向最新的最末結點
  • 時間複雜度O(log n)調試

  • 12.3.2 removeMin操做:

  • 用存儲在最末結點處的元素替換存儲在根處的元素
  • 對堆進行重排序
  • 返回初始根元素
  • 時間複雜度O(log n)
  • 12.3.3 findMin操做:

  • 返回指向存儲在堆根處元素的引用
  • 時間複雜度爲O(1)

  • 12.4 使用數組實現堆

  • 樹根位於位置0處;
  • 左孩子位於2n+1處
  • 右孩子位於2(n+1)處

  • 12.4.1 addElement操做:
  • 在恰當位置添加一個新元素
  • 對堆進行重排序以維持其排序屬性
  • count遞增長1
  • 時間複雜度O(log n)

  • 12.4.2 removeMin操做:

  • 用存儲在最末結點處的元素替換存儲在根處的元素
  • 對堆進行重排序
  • 返回初始根元素
  • 時間複雜度O(log n)
  • 12.4.3 findMin操做:

  • 返回指向存儲在堆根處元素的引用(該引用指向存儲在堆的根處或數組位置0處的元素)
  • 時間複雜度爲O(1)

  • 12.5 使用堆:堆排序

  • 添加列表中的每一個元素
  • 一次刪除一個元素

  • 時間複雜度爲O(n log n)

返回目錄


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

  • 問題1:2-3-4樹?
  • 解決:

返回目錄


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

  • 問題1:如何刪除某一指定結點的子樹。

  • 解決:

返回目錄


代碼託管

返回目錄


上週考試錯題總結

  • 錯題1:上週無任何錯題。
  • 解決:
  • 錯題2:
  • 解決:
  • 錯題3:
  • 解決:

返回目錄


結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172316趙乾宸
    • 博客中值得學習的或存在問題:
    • 20172329王文彬
    • 博客中值得學習的或存在問題:
    • 博客內容充實、排版整齊、對教材內容有通過一番認真思考、繼續保持。
    • 代碼截圖作標註時應儘可能避免遮擋代碼。
    • Markdown的部分縮進有誤。
    • 教材問題2提出得很好,能夠看出近斷時間來反覆使用鏈表、數組去實現同一類型的數據結構起得了必定的成效。

返回目錄


學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 3000行 15篇 300小時
第一週 0/0 1/1 12/12
第二週 935/935 1/2 24/36
第三週 849/1784 1/3 34/70
第四周 3600/5384 1/5 50/120
第五週 2254/7638 1/7 50/170
第六週 2809/10447 1/9 45/215
第七週 3700/14147 1/10 40/255
第八週 3422/17569 1/11 36/291

返回目錄


參考資料

相關文章
相關標籤/搜索