MurmurHash算法是google公司开发的一种hash算法,
它的用途并不是在于加密,
而是用于哈希检索,
相比于md5和sha算法,
它的计算速度是后两者的十倍以上.
MurmurHash算法可以返回32位和128位两种长度的结果,
32位的哈希值可以表达高达43亿的整数值,
所以可以利用它来做网址缩短,
只需要把长网址使用MurmurHash算法计算一下它的哈希值,
然后在数据表里做一下长网址和短网址的对照表,
当有用户访问短网址时,
直接跳转到对应的长网址,
这就是网址缩短的思路.
MurmurHash算法的C语言源码如下:
uint32_t murmur3_32( const uint8_t* key, size_t len, uint32_t seed )
{
uint32_t h = seed;
if ( len > 3 )
{
const uint32_t * key_x4 = (const uint32_t *) key;
size_t i = len >> 2;
do
{
uint32_t k = *key_x4++;
k *= 0xcc9e2d51;
k = (k << 15) | (k >> 17);
k *= 0x1b873593;
h ^= k;
h = (h << 13) | (h >> 19);
h = (h * 5) + 0xe6546b64;
}
while ( --i );
key = (const uint8_t *) key_x4;
}
if ( len & 3 )
{
size_t i = len & 3;
uint32_t k = 0;
key = &key[i - 1];
do
{
k <<= 8;
k |= *key--;
}
while ( --i );
k *= 0xcc9e2d51;
k = (k << 15) | (k >> 17);
k *= 0x1b873593;
h ^= k;
}
h ^= len;
h ^= h >> 16;
h *= 0x85ebca6b;
h ^= h >> 13;
h *= 0xc2b2ae35;
h ^= h >> 16;
return(h);
}