20162317 2017-2018-1 《程序設計與數據結構》第11周學習總結

20162317 2017-2018-1 《程序設計與數據結構》第11周學習總結

教材學習內容總結

  1. 哈希方法的概念
  2. 鍵值對——Entry
  3. 哈希方法中存在的問題——衝突
  4. 哈希方法的好處
  5. 裝載因子的定義
  6. 哈希函數(7種)
  7. 解決衝突的辦法(兩大種)
  8. 從哈希種刪除元素的方法(兩種)
  9. Java Collections API中的幾種哈希表html

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

  • 問題1:我在看哈希函數中的摺疊方法的時候,看到書本中將98七、654和321相加獲得1962後,它後面寫道:「咱們想要一個3位的關鍵字,此時能夠再用除法方法或是抽取方法獲得須要的下標」我有兩個問題:使用除法方法的話表長是多少?抽取方法的話是從哪裏抽3位?
  • 問題1解決方案:再看完整章而後再回來解決的時候,發現本身當時是對哈希不瞭解不熟悉。抽取方法是從1962中任意抽取3位做爲關鍵字;使用除法方法只是取三位作關鍵字方法的建議,至於表長這個無所謂。
  • 問題2:在課本後面列舉的哈希方法中說到一些方法是同步的,有一些則是不一樣步的,同步是什麼意思?同步與不一樣步有什麼差異?
  • 問題2解決方案:XXXXXX
  • 問題3:雙哈希方法中第二個哈希函數中的位置自變量用的是原來的仍是經過第一個獲得的新位置??
  • 問題3解決方案:經過網上查閱資料以及查閱資料後對書本的再理解,兩個都講的是:「若是關鍵字x哈希到已經被佔用的位置P,則要常識下一個位置P',若P'也被佔用,則用P經過第二種哈希函數得到P''」所以用的是初次得到的位置P

代碼託管

上週考試錯題總結

其餘(感悟、思考等,可選)

  • 哈希函數是將插入的數據看成自變量,經過一種算法來儘量地使每一個數都有一個獨有的值,這個值會成爲哈希表的下標。git

  • 弱關鍵字:弱引用是用來描述非必需對象的,被弱引用關聯的對象只能生存到下一次垃圾收集發生以前,當垃圾收集器工做時,不管當前內存是否足夠,都會回收掉只被弱引用關聯的對象。算法

.數組

  • 關於哈希方法中解決衝突的方法的學習:
  1. 鏈式方法
  • 使用溢出區的鏈式方法

該鏈式方法是將哈希表總體劃分爲元素儲存區和溢出區。例如像這樣子的:數據結構

哈希表中的每一個位置不只保存元素,也保存鏈表中下一個衝突元素爲於溢出區的下標。函數

侷限性:當一個數組做爲哈希表的時候,數組會有滿的可能,須要用到動態擴容的方法。這種方法最壞的狀況是:元素不能很好地分散在列表中,會致使哈希表的插入和查找的複雜度都變爲O(n)性能

  • 使用鏈
    該鏈式方法是哈希表中保存的是一個鏈表,使哈希表中的每個位置可以既保存元素,又可以保存下一個結點的引用。當發生衝突的時候,衝突的元素會放在下一個結點中且該結點爲空。

這個方法一個比上面使用溢出區的鏈式方法好的地方在於動態擴容的難度變小,由於衝突的元素不會放在主哈希表中,擴容的標準看主哈希表便可。學習

  1. 開放地址方法
  • 線性探測方法

經過哈希函數得到的哈希表下標,若是該位置已經佔用,則在哈希函數中對自變量進行遞增,直到找到位置。ui

侷限性:這樣作的同時也會將其餘元素的位置給佔用。並且若是哈希函數比較簡單,會致使元素在哈希表中匯聚,從而影響到插入以及查找的性能。設計

  • 二次探測方法

經過對哈希函數進行調整使衝突元素在當前位置的周圍找到空位插入。

公式:newhashcode(x) = hashcode(x) + (-1)^(i-1)((i+1)/2)^2(i的取值是1到 表長-1)

假設當前被佔用的位置是p,使用該方法就會對p,p+1,p-1,p+4,p-4,p+9,p-9...這些位置進行查找,將元素插入在空位置中,從而實現衝突的解決。

相比線性探測方法,這種方法引起彙集的趨勢沒那麼強。

  • 雙哈希方法

.

取模運算:index = HashCode(Key) % Length

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 15篇 400小時
第一週 200/200 2/2 20/20
第二週 20/220 1/3 20/40
第三週 645/865 1/4 14/54
第五週 654/1519 1/5 18/72
第六週 436/1955 1/6 16/88
第七週 839/2794 2/8 20/108
第八週 2143/4937 2/10 25/133
第九周 1368/6305 2/12 18/151
第十週 2452/8757 1/13 16/167
第十一週 795/9552 1/14 18/185
  • 計劃學習時間:16小時

  • 實際學習時間:18小時

相關文章
相關標籤/搜索