链地址法实现一个很简单的hash表

                    链地址法实现一个很简单的hash表
[1]hash函数定义
   根据key,计算出key对应记录的储存位置
   position = f(key)
   函数f就是hash函数

[2]hash冲突定义
    不同的key可能得到相同的position。原因为key值的范围过大。如int.
如果构造一个完全没有冲突的表。那么对应的地址空间就是4G,这是根本不
实现的。为了处理这个问题。就允许不同的key可以有相同的position。

[3]hash表定义
   映射的集合

[4]设计一个好的hash函数非常重要
   由[2]可知,一个好的hash函数可以使positions集中分布在某一段内存地址范围内。
   并且position在这段地址范围内存尽量均匀。这样每个key对应的position就尽可能
  少了,即hash冲突少。查找就会快一点。

[5]所谓的hash桶定义
   就是预分配的一段连续的储存空间

[6]处理冲突的方法
 (1)开放定址法:就是先指定一个桶,然后position = f(key,d),如果postion已经存在了,改变参数d,
     继续计算position = f(key,d),直到postion不存在
    d的不同取值的算法有:线性探测再散列,二次探测再散列,伪随机探测再散列。
     听这名字觉得好高深哦。实际上, 就是为了更高效地计算出没有使用的position
 (2)链地址法
     就是把position相同的item按插入的先后顺序组成一个链表

现用链地址法实现一个很简单的hash表

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值