哈希表

哈希表是一种使用散列技术通过哈希函数将关键字映射到存储位置的数据结构,以提高查找效率。然而,哈希冲突是常见问题,可以通过开放地址法、再哈希法、链地址法和公共溢出区法来解决。哈希函数的构造要考虑计算简单、地址分布均匀等因素,常用的构造方法包括直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机数法。
摘要由CSDN通过智能技术生成

前言

   当我们在编程过程中,往往需要对线性表进行查找操作。在顺序表中查找时,需要从表头开始,依次遍历比较a[i]与key的值是否相等,直到相等才返回索引i;在有序表中查找时,我们经常使用的是二分查找,通过比较key与a[i]的大小来折半查找,直到相等时才返回索引i。最终通过索引找到我们要找的元素。
   但是,这两种方法的效率都依赖于查找中比较的次数。我们有一种想法,能不能不经过比较,而是直接通过关键字key一次得到所要的结果呢?这时,就有了散列表查找(哈希表)。

1、什么是哈希表

    要说哈希表,我们必须先了解一种新的存储方式—散列技术。
    散列技术是指在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每一个关键字都对应一个存储位置。即:存储位置=f(关键字)。这样,在查找的过程中,只需要通过这个对应关系f 找到给定值key的映射f(key)。只要集合中存在关键字和key相等的记录,则必在存储位置f(key)处。我们把这种对应关系f 称为散列函数或哈希函数。
    按照这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为哈希表。所得的存储地址称为哈希地址或散列地址。

2、哈希表查找步骤

   ①、存储数据时,将数据存入通过哈希函数计算所得哪那个地址里面。
   ②、查找时,使用同一个哈希函数通过关键字key计算出存储地址,通过该地址即可访问到查找的记录。

3、哈希冲突

  在理想的情况下,每一个 关键字,通过哈希函数计算出来的地址都是不一样的。但是在实际情况中,我们常常会碰到两个关键字key1≠key2,但是f(key1) = f(key2), 这种现象称为冲突,并把key1和key2称为这个散列函数的同义词。
  冲突的出现会造成查找上的错误,具体解决方法会在后文提到。

4、哈希函数的构造方法

(1)、原则

  ①、计算简单;
  ②、散列地址分布均匀。

(2)、构造方法

  ①、直接定址法:不常用
    取关键字或关键字的某个线性函数值为哈希地址:
    即:H(key) = key 或 H(key) = a*key+b
    优点:简单,均匀,不会产生冲突;
    缺点:需要实现直到关键字

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值