基础概念
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数。
采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。
散列技术既是一种存储方法,也是一种查找方法。
散列技术最适合的求解问题是查找与给定值相等的记录。不适合一对多的查找,也不适合范围查找。
散列技术中的两个关键问题:
- 设计一个简单、均匀、存储利用率高的散列函数;
- 冲突
散列查找中,时常会碰到两个关键字key1!=key2,但是却有f(key1)==f(key2),这种现象称为冲突(collision),并把key1和key2称为这个散列函数的同义词(synonym)。
几种散列函数的构造方法
直接定址法
取关键字的某个线性函数值为散列地址,即
f(key)=a×key+b (a,b为常数)
优点:简单、均匀、不会产生冲突;
确定:需事先知道关键字的分布情况,适合查找表比较小且连续的情况。
不常用。
数字分析法
抽取关键字的一部分来计算散列位置的方法,也可以对抽取出来的数字再进行反转,循环移位&#x