20162313苑洪銘 2017-2018-1 《程序設計與數據結構》第11周學習總結
20162313苑洪銘 2017-2018-1 《程序設計與數據結構》第11周學習總結
教材學習內容總結
哈希方法
哈希算法將任意長度的二進制值映射為較短的固定長度的二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的,所以數據的哈希值可以檢驗數據的完整性。一般用於快速查找和加密算法。
哈希函數
哈希表中元素是由哈希函數確定的。將數據元素的關鍵字K作為自變量,通過一定的函數關系(稱為哈希函數),計算出的值,即為該元素的存儲地址。表示為:
Addr = H(key)
方法分為除法算法、折疊算法、平方取中方法、基數轉換方法、數字分析方法、長度依賴方法。
解決沖突
鏈式方法:拉出一個動態鏈表代替靜態順序存儲結構,可以避免哈希函數的沖突,不過缺點就是鏈表的設計過於麻煩,增加了編程復雜度。此法可以完全避免哈希函數的沖突。
開放地址方法:開放地址法有一個公式:Hi=(H(key)+di) MOD m i=1,2,...,k(k<=m-1)其中,m為哈希表的表長。di是產生沖突的時候的增量序列。如果di值可能為1,2,3,...m-1,稱線性探測再散列。如果di取1,則每次沖突之後,向後移動1個位置.如果di取值可能為1,-1,4,-4,9,-9,16,-16,...kk,-kk(k<=m/2)稱二次探測再散列。如果di取值可能為偽隨機數列。稱偽隨機探測再散列。
從哈希表中刪除元素
從鏈表刪除、從開放地址實現中刪除
Java Collection API中的哈希表
教材學習中的問題和解決過程
- 問題1:哈希與二叉樹什麽時候用的問題
- 問題1解決方案:哈希表:哈希表查找速度比較快,但是要耗比較多的內存。所以比較適用於對查找速度要求比較高、且內存空間足夠的時候 平衡二叉樹:如果想在以後用二分法查找的時候查找速度比較快的話用建立平衡二叉樹的方法
代碼托管
結對及互評
博客中值得學習的或問題
代碼中值得學習的或問題
本周結對學習情況
-20162309
- 結對學習內容
- 課本第20章
- 老師提供在藍墨雲班課的PPT
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 0/0 | 1/1 | 11/11 | |
第三周 | 387/387 | 2/3 | 14/25 | |
第五周 | 1232/1619 | 3/6 | 13/38 | |
第七周 | 454/2073 | 4/7 | 11/49 | |
第九周 | 526/2599 | 2/9 | 10/59 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法
計劃學習時間:14小時
實際學習時間:10小時
參考資料
《Java程序設計與數據結構教程(第二版)》
- 《Java程序設計與數據結構教程(第二版)》學習指導
...
20162313苑洪銘 2017-2018-1 《程序設計與數據結構》第11周學習總結