哈希散列技术:存储位置=f(关键字)
这样就可以通过查找关键字不需要比较就可以获得需要的记录的存储位置。
哈希技术是在记录的存储位置和他的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key)。
把对应关系f称作散列函数,又称哈希函数。采用散列技术将记录存储在一块连续的储存空间中,这块连续的存储空间称为散列表或哈希表,关键字对应的记录存储位置称为散列地址。
哈希表查找步骤
(1)存储时,通过散列函数计算记录的散列地址,并按照此散列地址存储该记录。
(2)查找记录时,通过散列函数计算记录的散列地址,按照此散列地址来访问记录。
因此散列技术既是一种存储技术,也是一种查找技术。它与线性表,二叉树,图等数据结构不同的是,他们的元素之间都存在某种逻辑关系,而散列技术的记录之间不存在什么逻辑关系,只与关键字有关,因此散列技术主要是面向查找的存储结构。
设计一个简单,均匀,存储利用率高的散列函数是散列技术中最关键的问题。
冲突:2个关键字key1!=key2,但却有f(key1)=f(key2),这就是冲突,并把key1和key2称为散列函数的同义词。
散列函数构造方法
设计散列函数的2个原则
(1)计算简单:散列函数的计算时间不应该超过其他查找技术与关键字比较的时间。
(2)散列地址分布均匀:解决冲突的最好办法就是尽量让散列地址均匀分布在存储空间,这样可以保证存储空间的有效利用,并减少为处理冲突而耗费的时间。
1 直接定址法
f(key)=key;
f(key)=a*key+b; (a,b为常数)
就是取关键字的某个线性函数值为散列地址。
优点:简单均匀,不会产生冲突。
缺点:需要事先知道关键字分布情况,适合查找较小且连续的情况。
现实生活中不常用。
2 数字分析法
关键字的位数较多时,我们可以抽取关键字的一部分来计算散列存储地址。
譬如:手机号码作为关键字时,由于手机号前7位重复的概率比较大,采用前7位来计算哈希地址很容易冲突&#