hash算法

164 阅读1分钟
  • 参考 ELFhash - 优秀的字符串哈希算法
  • ELFHash
    • 字符串hash的常用算法
    • 原理是通过将字符串散列,计算出一个key(数字型),然后这个key就是对应的数组的下标,然后取出value
    • 实现如下
    #define MAX_HASH_SIZE 102400
    size_t TestHash::Hash(const char* k) 
    {
        register size_t h = 0;
        register size_t g;
        while (*k) {
            h = (h << 4) + *k++;    // hash左移4位,当前字符ASCII存入hash低四位
            g = h & 0xf0000000L;    // 取出高四位
            if (g) {                // 如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出            
                h ^= g >> 24;       // 如果对于字符串(a-z 或者 A-Z)就会仅仅影响5-8位,否则会影响5-31位
            }
            h &= ~g;                // 清空28-31位
        }
        return h % MAX_HASH_SIZE;   // 映射到 [0, MAX_HASH_SIZE] 范围内
    }