常見的一些 Hash 函式

2021-08-27 03:27:10 字數 1434 閱讀 7401

hash的主要原理就是把大範圍對映到小範圍;所以,你輸入的實際值的個數必須和小範圍相當或者比它更小。不然衝突就會很多。

不同的應用對hash函式有著不同的要求;比如,用於加密的hash函式主要考慮它和單項函式的差距,而用於查詢的hash函式主要考慮它對映到小範圍的衝突率。

下面介紹一些常用的用於查詢hash函式。

加法hash

public class additivehash 

/** * 加法hash, 把輸入元素乙個乙個的加起來構成最後的結果

* @param prime 任意的質數。質數可以降低碰撞的概率

* @return 結果在 [0, prime-1]

*/private int additivehash(string key, int prime)

return hash % prime; //除以 乙個prime的目的只是為了保證結果的範圍

}}

位運算hash
@test

public void rotatinghashdemo()

/** * 標準的旋轉hash, 通過先移位,在進行各種位運算。 比如某個學校同一系的新生,學號前5位相同,最後2位不同,

* 將最後2位旋轉放置前兩位,其餘的右移。這樣只要輸入前兩位,就可以快速查出學生的資訊。

* @param key hash key

* @param prime 任意的質數。質數可以降低碰撞的概率

*/private int rotatinghash(string key, int prime)

return (hash % prime); //除以 乙個prime的目的只是為了保證結果的範圍

}

乘法hash
@test

public void bernsteinhashdemo()

@test

public void rshashdemo()

/** * jdk5.0 中 string 的 hashcode() 方法使用的就是這種乘法hash. 乘數可以是31, 131, 1313。。。

* @param key hash key

* @param prime 質數

*/private int bernsteinhash(string key, int prime)

return hash;

}/**

* 乘以乙個不斷該不變的數

* @param key hash key

* @return hash value

*/private int rshash(string key)

return (hash & 0x7fffffff);

}

常見的一些 Hash 函式

hash的主要原理就是把大範圍對映到小範圍 所以,你輸入的實際值的個數必須和小範圍相當或者比它更小。不然衝突就會很多。不同的應用對hash函式有著不同的要求 比如,用於加密的hash函式主要考慮它和單項函式的差距,而用於查詢的hash函式主要考慮它對映到小範圍的衝突率。下面介紹一些常用的用於查詢ha...

一些常見的移位函式

微控制器 crol 字元迴圈左移 cror 字元迴圈右移 irol 整數迴圈左移 iror 整數迴圈右移 lrol 長整數迴圈左移 lror 長整數迴圈右移一些暫存器置位 define gpioc crl unsigned int gpioc base 0x00 define rcc apb2enr...

oracle 一些常見函式操作

1 給出時間,如 2011 7 23 查詢星期幾 select to char to date 2011 7 23 yyyy mm dd day nls date language american from dual 結果 saturday select to char to date 2011 ...