各種hash函式

2022-08-20 04:18:12 字數 3833 閱讀 1807

public

class

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...