hash算法总结

本文总结了Hash算法的基础知识,包括Hash简介和常用的字符串Hash方法,如加法、乘法和位运算Hash。通过示例展示了如何使用位运算来混合输入元素,以实现更高效的哈希计算。
摘要由CSDN通过智能技术生成

一.Hash简介

概念
把任意长度的输入,通过hash算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出。
哈希表
若结构中存在和关键字K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为哈希表。
哈希冲突
对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。
解决Hash冲突常用的是拉链法(哈希链表),即hash表中的每个元素是一个链表,相同的hash值构成一个链表。查找时,从hash表中的链表第一个节点开始遍历比较key值,直到key相同查找结束

时间复杂度
使用hash算法对关键字进行查找,理论上时间复杂度是O(1),但实际取决于散列函数的的选取,最坏的情况是O(n)。

二.常用字符串hash

关键字是字符串。

常用hash函数:

1.加法hash

unsigned additiveHash(string key, unsigned prime)
{
        unsigned hash, i;
        for (hash = key.length(), i = 0; i < key.length(); i++)
                hash += key[i];


        return (hash % prime);
}

2. 乘法hash

unsigned bernstein(string key, unsigned prime)
{
        unsigned hash, i;
        for (hash=0, i=0; i < key.length(); ++i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值