常用的两种hash算法

  • string hash算法
/*
 * A simple string hash algorithm
 *
 * (Java is using the same algorithm)
 *
 * */
unsigned int string_hash_calculate(char *key)
{   
    char *p = key; 
    unsigned int h = 0;

    printf("using string hash algo!\n");
    
    while(*p) {
        h = (h << 5) - h + (unsigned int) (*p); // h = h * 31 + val
        p++;
    }
    return h;
}
  • elf hash算法
/*
 * elf hash algorithm
 *
 * Another good hash algorithm
 */

unsigned int elf_hash_calculate(char *key)
{
    unsigned int h = 0, g;
    char *p = key;

    printf("using elf hash algo!\n");

    while(*p) {
        h = (h << 4) + *p++;                //core calculate
        if ((g = (h & 0xF0000000U)) != 0)   //handle overflow case (which means top 4 bits are used)
            h ^= (g >> 24);                 //XOR top 4 bits and low 4 bits
        h &= ~g;                            //clean top 4 bits for next calculate
    }
    return h;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值