1. 程式人生 > 實用技巧 >python 資料結構 詳解雜湊表 雜湊碰撞 hashSet與字典

python 資料結構 詳解雜湊表 雜湊碰撞 hashSet與字典

雜湊表 hashtable

hashfunc構造方法:

  取餘法,

  平方留中法,平方後留中間的數再取餘

  非數項(字串雜湊)# 轉換為ascii碼,分組,轉換,相加求和再取餘,記得因為字串的特性,hashfunc還要加權重因子,不然‘cat’ ‘atc’會雜湊碰撞

雜湊碰撞解決方法:

  開放定址

 (線性探測 skip = 1)(跳躍探測 skip = 3 或質數)(再雜湊 skip = 1 ,3 ,5,7,9)

  # 線性探測會導致資料聚集,同樣設定散列表槽的長度時應選質數,這樣會迴避週期問題導致的分佈不均勻

  # 一般java和python設定的長度為 2^i -1

  鏈定址

  hash碰撞時,java會把重複的元素加到原來元素的指標下,陣列指標實現,如果長度大於8 ,會用紅黑樹優化

  #例 77 44在長度為11的散列表裡,hashfunc後的索引都為0 ,此時鏈定址不會在原散列表上尋找空位,而是把77指向44

  同理 當存入55時,索引也為0,此時44指向55

負載因子和完美雜湊函式

  負載因子負載因子