20172322 《程序设计与数据结构》第八周学习总结
生活随笔
收集整理的這篇文章主要介紹了
20172322 《程序设计与数据结构》第八周学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
20172322 《程序設計與數據結構》第八周學習總結
教材學習內容總結
本章的內容主要講堆的知識,而所謂堆就是一種具有一些特殊屬性的樹,就像二叉查找樹一樣。而堆也有兩種分類,分別是
最大堆
最小堆
但是無論是最大堆還是最小堆的第一個特殊屬性均為:
- 堆必須是一棵完全樹。
第二個特殊屬性是:
- 對于每一個結點,它小于或等于/大于其左右孩子。
但本章的內容主要以最小堆為例,學會了最小堆可以類比退出最大堆的性質。
因為堆是一種含有特殊屬性的樹,所以在本章中堆繼承了以前二叉樹的所有性質,本章僅僅是在BinaryTreeADT基礎上添加了addElement、removeMin、findMin方法。
- addElemnt方法:因為堆是一個完全樹,所以說所添加元素的位置必定為堆的最后一層或最后一層之后的左邊第一個位置。但在添加元素后還需要考慮整個堆的屬性是否保持完成,所以說需要考慮重新排序。
- removeMin方法:刪除堆的根結點后重新排序。
- findMin方法:簡單的返回根結點的操作。
與以往類似,本次分別利用鏈表和數組實現堆。
- 鏈表實現堆:創建HeapNode類繼承BinaryTreeNode類,但由于BinaryTreeNode無雙親結點的存在,所以在HeapNode中添加了一個雙親指針。(值得注意的是,添加雙親結點的原因是:在我們插入元素之后我們需要向上遍歷該樹,所以必須存在一個指向雙親的指針)
- addElement方法的復雜度是O(logn),與此方法同時存在的是getNextParentAdd和heapifyAdd方法,他們用于返回插入結點的雙親的引用和對添加元素后的堆進行重排序。
- removeMin方法的復雜度同為O(logn),與此方法同時存在的是getNewLastNode和heapifyRemove方法,他們用于返回新插入的節點和對刪除元素后的堆進行重排序。
- findMin方法:return root.element
- 數組實現堆:與二叉樹相同,對于任一結點n,n的左孩子將位于數組的2n+1位置處,n的右孩子將位于數組的2(n+1) 處,而對于任一非根結點m,m的雙親結點位于 (n-1)/2處,這意味著我們利用數組實現堆不需要建立一個HeapNode類。
- 利用數組實現堆的addElement、removeMin、findMin方法的解釋與利用鏈表實現堆類似,個人覺得無需過多言語。
- 堆排序:這是一種全新的排序算法。這種排序算法完全是根據堆的性質而思考出來的排序算法。以最小堆為例,每次將根結點與最后一個結點互換后,將最后一個結點提出樹,這樣就得到了一個最小的元素。在提出最小結點過后對樹重新排序,之后重復以上兩步操作直到排序完成。如圖所示:
教材學習中的問題和解決過程
本章的內容就是對之前內容的簡單拓展,實在是找不到什么問題。如果真的要我找一個問題就是:
- 問題一:在書P265中偏下部有一句話“n的右孩子將位于數組的2(n+1)位置處當然,反過來......”,這句話一讀就有問題。
- 問題一解決方案:這句話應該為“n的右孩子將位于數組的2(n+1)位置處,當然反過來......”
代碼調試中的問題和解決過程
- 問題一:在完成PP12.1時,自己最初只是簡單的以為利用書上的優先隊列的代碼就可以完成,但是這好像是我沒有認真讀題。
- 問題一解決方案:在結對伙伴范雯琪提醒下,自己重寫了隊列,在書上優先隊列PriorityQueue的基礎上刪除了實現優先級的代碼,就實現啦。
代碼托管“點這里跳轉到碼云”
上周考試錯題總結
- 錯題1:A binary search tree is a binary tree with the added property that the left child is greater than the parent, which is less than or equal to the right child.
- A.True
- B.False
- 錯題1解析:二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹,
- 若左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
- 若右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
- 左、右子樹也分別為二叉排序樹;
- 沒有鍵值相等的節點。
- 錯題2:A binary search capitalizes on the fact that the list is not sorted.
- A.True
- B.False
- 錯題2解析:二叉查找樹正式利用列表是被排序過才能進行搜索。
- 錯題3:A binary search can only be performed if the search pool is sorted.
- A.True
- B.False
- 錯題3解析:當查找池被排序好了以后就只能利用二叉查找樹來搜索。
結對及互評
- 博客中值得學習的或問題:
- 范雯琪同學的博客課本上的學習內容總結部分寫得十分詳細,值得學習。
- 范雯琪同學在博客中展示的圖都很直觀。
- 代碼中值得學習的或問題:
- commit提交的解釋清晰明了,我覺得我應該學習。
點評過的同學博客和代碼
- 本周結對學習情況
20172303
- 結對學習內容
- 她提醒了我的PP12.1有點問題,感謝。
其他
- 感悟:這周的知識僅僅是之前知識的一點點拓展,不難,但是也需要認真對待。
課本單詞
(本部分用于收集本章節后的生詞)
- heap:堆
- minheap:最小堆
- maxheap:最大堆
- complete binary tree:完全二叉樹
- priority tree:優先樹
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 0/5000 | 2/2 | 8/8 | 認真學習!積極向上 |
| 第二周 | 812/812 | 1/3 | 22/30 | |
| 第三周 | 814/1626 | 1/4 | 20/50 | |
| 第四周 | 1386/3012 | 2/6 | 20/70 | 愉快的國慶節就要結束了... |
| 第五周 | 1222/3234 | 1/7 | 30/100 | |
| 第六周 | 1327/4561 | 2/7 | 30/100 | 啦啦啦啦啦 |
| 第七周 | 1170/5631 | 1/8 | 33/133 | |
| 第八周 | 1250/6881 | 2/10 | 30/163 |
計劃學習時間:25小時
實際學習時間:30小時
改進情況:根據學姐的建議改進了commit。
參考資料
- 《Java軟件結構與數據結構》
- 《二叉排序樹》
轉載于:https://www.cnblogs.com/zhangyeye233/p/9940512.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的20172322 《程序设计与数据结构》第八周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前段框架——VueX
- 下一篇: 表单验证AngularJs