Hash演算法與散列表基礎演算法
阿新 • • 發佈:2019-02-15
把一個較大集合P對映到一個較小集合Q中,其中對映演算法位H,即Q=H(P),每一個p對應一個q,一個q可能對應多個p,這就是Hash編碼的初步理解。其中散列表,可以認為是一種特殊的資料結構,有|Q|個所謂的槽,儲存相應的Q值,其中P中的元素出現,就在Q中相對應的結果中進行記錄,對於不同p1,p2對應到同一個槽時,即h(p1)=h(p2)=q1則,q1的槽對應一個list,儲存p1、p2的值。一個好的雜湊函式應該儘可能的將|P|個元素儘可能評價的分為|Q|個槽中。幾個較為經典雜湊演算法如下:
除法雜湊法
其實就是取餘,h(p)=p mod m,其中m小於|Q|的值,但不一定是|Q|的值。使用該方法時,m儘量取一個質數,因為如果m取2或者10的冪,相當於p中的最後幾位起作用,之前的幾位都荒廢了,而m取質數時,所有的元素,都起作用,得到結果可能更為分散。
乘法雜湊法
全域雜湊
如果雜湊演算法確定,對於某一個hash值q可能對應多個p,即集合
說白了,就是如果演算法固定,就可以得到集合
其中,t是一個預先設定的數,其中對於P中的所有元素,都落在[0,t-1]之間,m是編碼集合Q的個數,