關於Hash雜湊的集中查重方式

2021-09-12 18:04:53 字數 721 閱讀 4008

這裡總結一下hash雜湊當出現不能插入位置的幾種位移和計算方式,以免遺忘和出現不知道都在講些神馬;

當我們key1和key2衝突的時候,主要有三種方式進行衝突解決;

先來說兩種開放定址法,所謂開放定址法就是重新計算了hash值;

1.線性探查法:

當我們插入key的位置,產生衝突之後,加1,檢視該位置是否可以使用。如果不可以使用,再次+1,重複到找到位置,或者查完沒有滿足的位置,並且在這個途中,可以越過尾部,從hash序列頭部進行列舉。

但是該方法有乙個缺點,就是容易造成元素扎堆;

2.平方探查法:

插入時,當h(key)的位置被佔時,將檢查下列位置:h(key)+1^2,h(key)-1^2,h(key)+2^2,h(key)-2^2...。如果在這個途中h(key)+k^2超過了表長,則進行取模操作;如果h(key)-k^2<0時,則進行((h(key)-k^2)%tsize+tsize)%tsize,從而保證索引為正;

這兩個方向的操作稱為正向和負向操作,為了避免計算麻煩,往往可以採用正向操作;注意一點,尋找的次數k在[0,tsize]內,當k超過這個範圍,必不可能插入,停止計算;

第三中時拉鍊法則:

3.拉鍊法:

拉鍊法不計算新的hash值,而是在重複hash值的地方構建乙個單鏈表,從而將所有重複的節點連線起來,查詢的時候遍歷該鍊錶中的所有元素;

關於Hash雜湊的集中查重方式

這裡總結一下hash雜湊當出現不能插入位置的幾種位移和計算方式,以免遺忘和出現不知道都在講些神馬 當我們key1和key2衝突的時候,主要有三種方式進行衝突解決 先來說兩種開放定址法,所謂開放定址法就是重新計算了hash值 1.線性探查法 當我們插入key的位置,產生衝突之後,加1,檢視該位置是否可...

雜湊(hash)表以及解決衝突的方式

把查詢表中的關鍵字對映成該關鍵字對應位址的函式,雜湊函式可能會把兩個或兩個以上的不同關鍵字對映到同一位址,稱這種情況為衝突,這些發生碰撞的不同關鍵字成為同義詞。1 直接定址法 直接取關鍵字的摸個現行函式值為雜湊位址,雜湊函式為h key a key b,其中a和b是常數,這種方法最簡單,並且不會產生...

C語言開篇 關於對陣列元素的查重

傳入乙個陣列指標 陣列元素的個數 假如陣列arr 5 int checkrank int player,int n return res 0x3e 這裡的移位操作,可能會出現不太清楚的地方 a b 這個 的a是被移位的數,而後面的b是要移動的位數 e 所以說這裡的player i 的不同就意味著要移...