一、什么是散列表?
散列表(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的值可以使哈希地址取值范围与存储空间范围一致。