一、问题
什么是散列法?
二、解答
散列法是⼀种将字符组成字符串,转换为固定长度(⼀般是更短长度)的数值或索引值的⽅法,也叫哈希法,⼜可以称为杂凑法或关键码⼀地址转换法。 那么,通过散列函数得到的散列地址与原始关键码是⼀⼀对应的吗?
答案是否定的,即不是⼀⼀对应的,如图所示。
⼀般来说,散列函数是⼀个压缩映像函数。通常关键码集合⽐散列表地址集合⼤得多。 因此,有可能经过散列函数的计算,把不同的关键码映射到同⼀个散列地址上,这就不是 ⼀⼀对应的了。于是就产⽣了冲突。
如果表项按计算出的地址加⼊散列表时产⽣了冲突, 必须再找⼀个地⽅来存放它,这就产⽣了解决冲突的问题。因此就要构造⼀个不容易产⽣冲突的函数,即构造⼀个地址分布⽐较均匀的散列函数,使关键码集合中的任何⼀个关键码经过这个散列函数的计算,映射到地址集合中所有地址的概率相等,以减少冲突。但实际上,由于关键码集合⽐地址集合⼤得多,冲突很难避免,所以对于散列⽅法需要注意两个问题:
(1)对于给定的⼀个关键码集合,选择⼀个计算简单且地址分布⽐较均匀的散列函数,避免或者尽量减少冲突;
(2)拟定解决冲突的⽅案。
三、总结
散列法⼀般⽤于在数据库中建⽴索引并进⾏搜索,同时还⽤于各种解密算法中。