散列表查找

本文介绍了哈希表,又称散列表,是线性表的存储结构之一。主要内容包括哈希函数的设计,如直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机数法,以及解决哈希冲突的方法,如开放定址法、链地址法和公共溢出区法。此外,讨论了哈希冲突的影响因素和哈希表的实现细节,包括查找、删除、插入操作,并强调了哈希表性能分析的重要性。
摘要由CSDN通过智能技术生成

      哈希表(hash)又称散列表,是除顺序表存储结构、链表存储结构和索引表存储结构之外的又一种存储线性表的存储结构。设要存储的对象为n个,在内存中长度为m的连续存储单元,对象的关键字key为索引,通过hash函数hash(key)映射到相应的存储空间存储。

     hash的两个主要问题:(1)设计好的hash函数;(2)设计好的冲突解决办法。

散列函数的构造方法

    那么怎么样才是好的hash函数,一句话,保证散列之后的地址呈均匀分布,不要产生冲突,不要产生堆积。

(1)直接定址法:f(key) = a*key+b,这种定址法由于是线性的,不存在hash冲突。但是我们需要事先知道关键字的分布情况,适合关键字范围较小且几乎连续的情况。

(2)数字分析法:如果我们的关键字是位数较多的数字,而且某几位固定,例如我们的电话号码。那么我们就可以分析数字的规律,取不固定的且分布均匀的那几位做hash。这里用到了一个抽取的方法,这也是在计算hash中经常用到的。这种方法适合关键字的某几位分布均匀,而某几位不均匀

(3)平方取中法:方法很简单,假设关键字是1234,平方后为1522756,我们可以抽取中间的三位数作为hash,即227。平方取中法适合不知道关键字的分布情况,而位数又不大

(4)折叠法:将关键字从左到右分割成位数相等的部分然后求和,例

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值