什么是散列表(哈希表)?

散列表是一种利用散列函数实现快速查找、插入和删除操作的数据结构。通过取模运算确定关键字在固定大小数组中的位置,理想情况下避免冲突。冲突解决方法包括拉链法、开放定址法(如线性探测、平方探测和双散列)以及再散列。散列表广泛应用于文件校验、数字签名和快速查询,如Redis中的字典结构。设计良好的散列表能实现近乎常数时间复杂度的操作。
摘要由CSDN通过智能技术生成

本文文末有福利,不要错过奥!

前言

假设你们班级100个同学每个人的学号是由院系-年级-班级和编号组成,例如学号为01100168表示是1系,10级1班的68号。为了快速查找到68号的成绩信息,可以建立一张表,但是不能用学号作为下标,学号的数值实在太大。因此将学号除以1100100取余,即得到编号作为该表的下标,那么,要查找学号为01100168的成绩的时候,只要直接访问表下标为68的数据即可。这就能够在O(1)时间复杂度内完成成绩查找。

实际上这里就用到了散列的思想。本文重在介绍散列的思想以及散列需要考虑的问题。

散列表(哈希表)

理想散列表(哈希表)是一个包含关键字的具有固定大小的数组,它能够以常数时间执行插入,删除和查找操作

  • 每个关键字被映射到0到数组大小N-1范围,并且放到合适的位置,这个映射规则就叫散列函数

  • 理想情况下,两个不同的关键字映射到不同的单元,然而由于数组单元有限,关键字范围可能远超数组单元,因此就会出现两个关键字散列到同一个值得时候,这就是散列冲突

实例演示

通过前面的描述,我们已经了解了一些基本概念,现在来看一个实例。
假设有一个大小为7的表,现在,要将13,18,19,50,20散列到表中。

  • 选择散列函数,例如使用hash(x)=x%7作为散列函数

  • 计算数据散列值,并放到合适的位置

计算13 % 7得到6,因此将13放到下标为6的位置:

0 1 2 3 4 5 6
            13

计算18 % 7得到4,因此将18放到下标为4的位置:

0 1 2 3 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值