20182331 2019-2020-1 《數據結構與面向對象程序設計》第8周學習總結
教材學習內容總結
- 查找
常見查找方式:線性查找,折半查找,哈希表查找,分塊查找。html
哈希函數構造方法:直接定址法,數字分析法,平方取中法,摺疊法,除留餘數法。git
解決衝突的辦法:開放定址法,再哈希法,鏈地址法。程序員
查找目標:高效地完成查找,用最小化比較操做。一般查找池中項目數目定義了該問題的大小。算法
靜態方法(類方法):可經過類名激活數組
在方法聲明中,經過static修飾符就能夠把它聲明爲靜態的。數據結構
泛型方法:與泛型類類似,不是建立引用泛型參數的類,而是建立一個引用泛型的方法。函數
線性查找:從表頭開始依次比較每一個值,直到找到該目標元素。學習
二分查找將利用查池已經是排序的這一事實,每次比較都會刪除一半的可行候選項。測試
線性查找時間複雜度是O(n),二分查找時間複雜度爲log2n,因此n值較大時,二分查找要快的多。ui
- 排序
- 排序算法一般也分爲兩類:選擇排序,插入排序,冒泡排序,快速排序,歸併排序,
選擇排序法:
- 初始時在序列中找到最小(大)元素,放到序列的起始位置做爲已排序序列;而後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。
- selectionSort方法實現兩個循環,外層循環控制下一個最小值存儲在那個位置,內層循環經過掃描全部大於等於外層循環指定索引的位置來找出剩餘列表的最小值
插入排序法:
- 插入排序在實現上,一般採用in-place排序(即只需用到O(1)的額外空間的排序),於是在從後向前掃描過程當中,須要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。
- insertionSort方法使用了兩個循環來對某個對象數組進行排序,外層循環控制下一個插入值在數組中的索引,內層循環將前插入值和儲存在更小索引處的值進行比較。
- 冒泡排序法:
- 它重複地走訪過要排序的元素,依次比較相鄰兩個元素,若是他們的順序錯誤就把他們調換過來,直到沒有元素再須要交換,排序完成。這個算法的名字由來是由於越小(或越大)的元素會經由交換慢慢「浮」到數列的頂端。
- bubbleSort方法中的外層for循環表示n-1輪數據遍歷,內層for循環將從頭到尾掃描該數據,對相鄰數據進行成對比較,若是必要將其交換。
快速排序法:
- 快速排序算法經過將列表分區,而後對這兩個分區進行遞歸式排序,從而完成對整個列表的排序。
- quicksort方法很是依賴partition方法,起初用其將排序區域分開。partition方法的兩個內層while循環用於尋找位於錯誤分區的交換元素。第一個循環從左邊掃描到右邊,以尋找大於分區元素的元素,第二個循環從右邊掃描到左邊,以尋找小於分區元素的元素。
- 歸併排序法:
- 歸併排序算法經過將列表遞歸式分紅兩半直至每一個子列表都含有一個元素,而後將這些子列表歸併到一個排序順序中,從而完成對列表的排序。
- 歸併排序的實現分爲遞歸實現與非遞歸(迭代)實現。遞歸實現的歸併排序是算法設計中分治策略的典型應用,咱們將一個大問題分割成小問題分別解決,而後用全部小問題的答案來解決整個大問題。非遞歸(迭代)實現的歸併排序首先進行是兩兩歸併,而後四四歸併,而後是八八歸併,一直下去直到歸併了整個數組。
- 基數排序法
- 將全部待比較數值(正整數)統一爲一樣的數位長度,數位較短的數前面補零. 而後,從最低位開始,依次進行一次排序.這樣從最低位排序一直到最高位排序完成之後, 數列就變成一個有序序列.
教材學習中的問題和解決過程
問題1:@SuppressWarnings是什麼?它怎麼用?
問題1解決方案:
1.指示應該在註釋元素(以及包含在該註釋元素中的全部程序元素)中取消顯示指定的編譯器警告。注意,在給定元素中取消顯示的警告集是全部包含元素中取消顯示的警告的超集。例如,若是註釋一個類來取消顯示某個警告,同時註釋一個方法來取消顯示另外一個警告,那麼將在此方法中同時取消顯示這兩個警告。
2.根據風格不一樣,程序員應該始終在最裏層的嵌套元素上使用此註釋,在那裏使用纔有效。若是要在特定的方法中取消顯示某個警告,則應該註釋該方法而不是註釋它的類。
代碼調試中的問題和解決過程
問題1:對於歸併排序和快速排序的循環次數該如何計算。
問題1解決方案:有兩種方法能夠解決,一種是直接經過引入times,來在循環中經過計算最後times相加的和。還有一種是設一個變量,循壞執行一次,變量自增一次。
上週考試錯題總結
結對及互評
- 博客中值得學習的或問題:
- 學習深入,本身有方法
- 代碼中值得學習的或問題:
- 使用繼承減小代碼的重複編寫
- 基於評分標準,我給本博客打分:8分。得分狀況以下:
- 正確使用Markdown語法(加1分)
- 模板中的要素齊全(加1分)
- 教材學習中的問題和解決過程, 一個問題加1分
- 代碼調試中的問題和解決過程, 一個問題加1分
- 有動手寫新代碼的加1分
- 結對學習狀況真實可信的加1分
點評過的同窗博客和代碼
- 本週結對學習狀況
- 20182309
- 結對學習內容
- 閱讀教材第13章章節內容
- 代碼託管到碼雲上
- 完成課後自測題,並參考答案學習
- 完成課後練習題
- 完成程序設計項目,至少完成pp13.2,pp13.6
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
109/109 |
2/2 |
20/20 |
|
第2、三週 |
729/838 |
2/4 |
47/67 |
|
第四周 |
750/1588 |
2/6 |
22/89 |
|
第五週 |
1588/2698 |
2/7 |
34/133 |
|
第六週 |
1350/4035 |
2/9 |
24/157 |
|
第九周 |
4701/7399 |
5/14 |
97/254 |
|
第十週 |
618/8017 |
1/15 |
22/276 |
|
參考資料