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的目的只是為了保證結果的範圍
}}
@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的目的只是為了保證結果的範圍
}
@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 ...