[数据结构]从散列(Hash)表、哈希函数的构造到解决冲突

本文介绍了散列表的概念,强调了哈希函数设计的重要性,并详细阐述了处理散列冲突的开放定址法、再散列函数法、链地址法和公共溢出区法。内容包括哈希函数的构造方法,如直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机数法。
摘要由CSDN通过智能技术生成

一、什么是散列表?

散列表(Hash table,也叫哈希表),是根据关键字码值而直接进行访问的数据结构,也就是通过把关键字码值映射到表中一个位置来访问记录,以加快查找的速度。
哈希函数也叫做散列函数,是将记录的关键字值与记录的存储位置对应起来的关系f,f(关键字)的结果称位哈希地址。

哈希地址(记录的存储位置)= f(关键字),这里对应的关系就叫哈希函数,也可叫散列函数。

在运用散列表来解决问题时,我们务必考虑好下面因素:

(1) 设计一个简单、均匀、存储效率高的散列函数是散列技术中最关键的问题。
(2)冲突问题:在理想的情况下,每一个关键字,通过散列函数计算出来的地址都是不一样的,可现实中,这只是一个理想。但是我们经常会碰到两个关键字k1=k2,但是却有f(k1)=f(k2),这种现象我们称为冲突,并把k1和k2称为这个散列函数的同义词。

散列表的应用:
(1)主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做Hash值. 也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。
(2)查找:当我们知道key值就可以知道关键字对应的位置。

二、哈希函数的构造方法

构造散列函数的目标是使散列地址尽可能均匀地分布在散列空间上,同时使计算尽可能简单,以节省计算时间。
下面让我们一起来了解一下几种常用的散列函数构造方法。
1、直接定址法:取关键字或关键字的某个线性函数为哈希地址

f(key)=key或f(key)=a*key+b

其中a,b为常数,调整a与b的值可以使哈希地址取值范围与存储空间范围一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值