Hash相关信息整理

Hash概念

hash也叫散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出.这个输出叫做散列值.这种转换是一种压缩映射.也就是散列值的空间通常远小于输入空间.不同的输入有可能会被映射成相同的散列值.所以是单向的映射.散列值相关联的表,称为哈希表

常用的散列算法(hash函数)

1 求余

       index = value % 范围

2 斐波那契散列

       index = (value*斐波那契) >>28

       a 对于16位整数而言,这个乘数是40503

       b 对于32位整数而言,这个乘数是2654435769

       c 对于64位整数而言,这个乘数是11400714819323198485

3 MD5

       index = md5(value)

       a输出是128位,由4个32位字的级联组成

       b具有很高的离散性

4 SHA1 (安全哈希算法)

       index = SHA1(value)

       aSHA可将一个最大2^64位(2305843009213693952字节)信息,转换成一串160位(20字节)的散列值

       b具有很高的离散性

5 CRC32

       index = CRC32(value)

       a 4个字节(32位)长的CRC-32值

       b 实际使用比较少

解决冲突的主要方法

冲突发生的原因

       当输入的量级远大于哈希表的长度

解决方法

1 开放定址法

       公式: hashindex = (hash(key) + di)%m

       其中:

              m= 哈希表长度

              i= 1,2,3,…,k(k<=m-1)

              di:  增量序列  线性探测再散列

                     向后移动  二次探测再散列

                     为随机数  随机探测再散列

2 拉链法

       将冲突的记录放在同一个hash  index线性链表里面

                             

3 多次哈希法

       用不同哈希函数多次哈希

       缺点:插入和查找时计算时间增加

4 建立一个公共溢出区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值