1.哈希表
哈希表也叫做散列表,它是基于快速存取的角度设计的,是一种典型的“空间换时间”的做法。哈希表是普通数组的一种推广,因为数组可以直接寻址,故可在O(1)时间内访问数组的任意元素。
哈希表是通过关键字而直接进行访问的数据结构。也就是说,它将关键字通过某种映射到数组中某个位置,以加快查找的速度。这个映射规则称为哈希函数,存放记录的数组称为哈希表。哈希表建立了关键字和存储地址之间的一种直接映射关系。
若多个不同的关键字通过哈希函数计算得到相同的数组下标,称其发生了冲突,这些发生冲突的不同关键字称为同义词。
2.处理冲突的方法
任何哈希函数都不可能绝对避免冲突,为此必须考虑冲突发生时应如何进行处理,即为产生冲突的关键字寻找下一个“空”的Hash地址,于是提出了处理冲突的各种方法。
1)链地址法
链地址法是指所有的冲突关键字(同义词)存储在一个线性链表中,这个链表由其散列地址唯一标识。
2)开放定址法
开发定址法是指可存放新表项的空闲地址,既向它的同义词表项开发,又向它的非同义词表项开放。其数学递推公式为:
Hi=(H(key)+di)%m(哈希函数)
式中,i=1,2,…,k(k<=m-1),m为散列表表长,di为增量序列,di通常有以下几种取法:
当di=1,2,3…m-1时,称为线性探测法。其特点是,冲突发生时顺序查看表中下一个单元,直到找出一个空单元或查遍全表。
3&#
哈希表和海量数据处理
最新推荐文章于 2022-12-19 20:40:47 发布