哈希函数

来源:互联网 发布:幸运星 知乎 编辑:程序博客网 时间:2024/06/04 17:52

在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:

hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_SIZE 

                              = (97* 333 + 98 * 332 + 99 * 33 +100) % HASH_SIZE

                              = 3595978 % HASH_SIZE

其中HASH_SIZE表示哈希表的大小(可以假设一个哈希表就是一个索引0 ~ HASH_SIZE-1的数组)。

给出一个字符串作为key和一个哈希表的大小,返回这个字符串的哈希值。

说明

For this problem, you are not necessary to design your own hash algorithm or consider any collision issue, you just need to implement the algorithm as described.

样例

对于key="abcd" 并且 size=100, 返回 78

解题思路:必须进行预处理,否则会超时,用一数组记录33^n取模的值,然后按定义进行计算即可。

解题代码:

class Solution {
public:
    /**
     * @param key: A String you should hash
     * @param HASH_SIZE: An integer
     * @return an integer
     */
     
     long long a[100000];
         void init(long long mod){
            a[0]=1;
            for(long long i=1;i<100000;i++)a[i]=(a[i-1]*33)%mod;
        }
    long long hashCode(string key,long long HASH_SIZE) {
        // write your code here
        init(HASH_SIZE);
        long long ans=0;
       long long t=key.size();
       for(long long i=0;i<t;i++){
           long long x=key[i];
           ans=(ans+x*a[t-i-1])%HASH_SIZE;
           }
       return ans;
    }
};

原创粉丝点击