天天看點

散清單查找

定義

通過散列函數尋找某個關鍵字所存在的位置,利用散列技術存儲在一塊連續的存儲空間中,這塊連續的存儲空間稱為散清單,對應的存儲位置成為散列位址。

散清單查找

沖突

在查找存儲位置的時候會存在關鍵字不同,但是存儲位置相同,即對應的散列函數值相同,這種情況即“沖突”。

散列函數的構造

散列函數有很多構造方法,比如直接定址法、除留餘數法等等,但不是都适用,是以好的散列函數應該具有:計算簡單、散列位址分布均勻的特點

構造方法

  • 直接定址法

    這個方法比較直接,就和它的名字一樣,直接。比如年齡統計,一個年齡為66的人,那函數就可以直接以66為值。

  • 平方取中法

    一個值為1234的關鍵字,sqrt(1234)=1522756,在取最後三位即756作為散列位址。這種方法造成沖突的機率比較大。

  • 除留餘數法(最常用)

對表長為m,關鍵字為x的散列函數公式可以表示為:f(x)= x mod p(p<=m),為了盡量避免沖突,選好p是關鍵。通常選取p為小于等于表長m的最小質數。

處理散列沖突

f(x)= x mod p;就比如x=37、47,p等于12的時候,37是不是就和47沖突了,是以就要處理沖突來使散列位址釋出均勻。

可以做一下改變:

散清單查找

這樣f(37)=1,而f(32)=2就避免了沖突,但是光這樣無法達到均勻分布,是以可以改善一下di數組:

散清單查找

繼續閱讀