哈希表

同词典一样,散列表是通过关键码(key)进行索引的广义类线性表。不同的是,词典索引项中的关键码key直接对应记录(或表项)的存储位置address,需要通过顺序查找或者二分查找检索词典中的记录(或表项)。而哈希表是记录(或表项)的存储位置address与它的关键吗key值之间建立一个对应的函数关系address=hash(key),使得每个关键码与结构中唯一的一个存储位置相对应。查找记录(或表项)时,首先计算addres=hash(key),并在结构中取address位置的记录(或表项)。若关键码相同,则搜索成功。存储记录(或表项)时也同样计算address=hash(key),并在存储记录(或表项)存入address位置。这种方法叫做散列方法,在散列方法中使用的函数即为散列函数。按照此方法构造出来的表或结构即为散列表。

问题是:不同的关键字经散列函数可能计算出同一个散列值。如果当一个元素被插入时另一个元素已经存在(散列值相同),那么就产生了一个冲突,这个冲突就得消除。消除冲突一般有两种方法:

1)分离链接法:散列表T采用分离连接技术,即把散列函数值相同的关键字串成链表(使用邻接表)。

2)开放寻址法:散列表T的数据结构一般为一维数组,直接使用散列函数寻址。如果有冲突发生,那么就尝试选择另外的单元,直到找到空单元为止。散列函数一般按照线性探测法或二次线性探测法设计。

例题:poj3349  poj1840 uva246 

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/80091963