publicclass
hashalgorithms /*
* * 旋轉hash
* @param key 輸入字串
* @param prime 質數
* @return hash值
*/public
static
int rotatinghash(string key, int
prime) //
替代:
//使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask;
//替代:hash %= prime;
/**
* mask值,隨便找乙個值,最好是質數
*/static
int m_mask = 0x8765fed1
; /*
* * 一次乙個hash
* @param key 輸入字串
* @return 輸出hash值
*/public
static
intonebyonehash(string key)
hash += (hash << 3
); hash ^= (hash >> 11
); hash += (hash << 15
); //
return (hash & m_mask);
return
hash;
} /*
* * bernstein's hash
* @param key 輸入位元組陣列
* @param level 初始hash常量
* @return 結果hash
*/public
static
intbernstein(string key) //
//// pearson's hash
//char pearson(charkey, ub4 len, char tab[256]) //
//// crc hashing,計算crc,具體**見其他
//ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab[256]) //
/**
* universal hashing
*/public
static
int universal(charkey, int mask, int
tab)
return (hash &mask);
} /*
* * zobrist hashing
*/public
static
int zobrist( char key,int mask, int
tab) //
lookup3
//見bob jenkins(3).c檔案
//32位fnv演算法
static
int m_shift = 0
; /*
* * 32位的fnv演算法
* @param data 陣列
* @return int值
*/public
static
int fnvhash(byte
data) /*
* * 改進的32位fnv演算法1
* @param data 陣列
* @return int值
*/public
static
int fnvhash1(byte
data) /*
* * 改進的32位fnv演算法1
* @param data 字串
* @return int值
*/public
static
intfnvhash1(string data) /*
* * thomas wang的演算法,整數hash
*/public
static
int inthash(int
key) /*
* * rs演算法hash
* @param str 字串
*/public
static
intrshash(string str)
return (hash & 0x7fffffff
); }
/*end of rs hash function
*//*
* * js演算法
*/public
static
intjshash(string str)
return (hash & 0x7fffffff
); }
/*end of js hash function
*//*
* * pjw演算法
*/public
static
intpjwhash(string str) }
return (hash & 0x7fffffff
); }
/*end of p. j. weinberger hash function
*//*
* * elf演算法
*/public
static
intelfhash(string str) }
return (hash & 0x7fffffff
); }
/*end of elf hash function
*//*
* * bkdr演算法
*/public
static
intbkdrhash(string str)
return (hash & 0x7fffffff
); }
/*end of bkdr hash function
*//*
* * sdbm演算法
*/public
static
intsdbmhash(string str)
return (hash & 0x7fffffff
); }
/*end of sdbm hash function
*//*
* * djb演算法
*/public
static
intdjbhash(string str)
return (hash & 0x7fffffff
); }
/*end of djb hash function
*//*
* * dek演算法
*/public
static
intdekhash(string str)
return (hash & 0x7fffffff
); }
各種hash函式的實現
其中比較有名的是elfhash函式。它對字串陣列的算hash方式為
將乙個字串的陣列中的每個元素依次按前四位與上乙個元素的低四位相與,組成乙個長整形,如果長整的高四位大於零,那麼就將它折回再與長整的低四位相異或,這樣最後得到的長整對hash表長取餘,得到在hash中的位置。
/** * elf演算法
*/public
static
intelfhash(string str)
}}
下面這個是所有最靠近2的冪次方的質數表,這些質數可以用來做hash表的擴增
glib質數表static
const gint prime_mod =;
各種hash 函式
常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有 bkdrhash,aphash,djbhash,jshash,rs...
各種hash 函式實現
常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用 位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rs...
各種字串Hash函式比較
文章 自 常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用 位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有bkdrhash,aphash,djbhash,jsha...