1. 程式人生 > >lintcode 128哈希函數

lintcode 128哈希函數

out imp 應該 而不是 spa implement 解決問題 根據 size

描述

在數據結構中,哈希函數是用來將一個字符串(或任何其他類型)轉化為小於哈希表大小且大於等於零的整數。一個好的哈希函數可以盡可能少地產生沖突。一種廣泛使用的哈希函數算法是使用數值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.

樣例

技術分享

思路

根據描述以及哈希函數和哈希表的定義,並且根據已經給的樣例,就能解決問題。另外,所給的樣例中應該返回978,而不是78,這個也在lintcode的運行數據處得到了證實。

class Solution {
public:
    /**
     * @param key: A String you should hash
     * @param HASH_SIZE: An integer
     * @return an integer
     */
    int hashCode(string key,int HASH_SIZE) {
        if (key.empty())
            return 0;
        int len = key.size();
        long int accout = (int)key[0
]; for (int i = 1; i < len; ++i) { accout =accout*33%HASH_SIZE+(int)key[i]; } return accout%HASH_SIZE; } };

lintcode 128哈希函數