python 資料結構 詳解雜湊表 雜湊碰撞 hashSet與字典
阿新 • • 發佈:2020-07-03
雜湊表 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
負載因子和完美雜湊函式
負載因子負載因子