微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二次探测哈希函数 C++

如何解决二次探测哈希函数 C++

我目前正在用 C++ 实现一个带有二次探测的哈希表。我首先实现了一个相当简单的哈希函数:将我的键(=字符串)的每个字母的 ASCII 值相加。因为我知道这根本不是一个好的散列函数,所以我现在正在寻找一个更好的散列函数。我一直在谷歌搜索一段时间,但我似乎发现的都是类似的简单的。有人可以建议我一个好的哈希函数吗?使用 ASCII 值计算索引是否有意义?还是应该改用词的长度?

像我一样在一个单独的函数中实现碰撞处理是否有意义,还是我应该在 hashtfunction 本身中执行这一步?

感谢您的帮助!

int Hash::quadSond(int index,int i)
{
    int newIndex = index + (int)pow(i,2); 
    return newIndex;
}


int Hash::hashFunction(std::string key) 
{
    int hash = 0;
    int index;
    int k = 1; 

    for (size_t i = 0; i < key.length(); i++) 
    {
        hash += (int)key[i]*5; 
    }
    
    index = hash % m_tableSize;  
    
    if (m_table[index] != nullptr) {
        while (m_table[index] != nullptr) { 
            int newIndex = quadSond(hash,k); 
            index = newIndex % m_tableSize;
            k++;
        }
    }
    
    return index;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。