【数据结构】哈希表 Hash Table

1. Hash Table的定义

在线性表,树等数据结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。查找的效率依赖于查找过程中所进行的比较次数。

理想的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此,不需要进行比较便可以直接取得所查记录.这个对应关系f为哈希(Hash)函数.

哈希函数是一个映像,只要使得任何关键字由此所得的的哈希函数值都落在表长允许范围之内即可.

另外,对于不同的关键字可能得到同一个哈希地址,这种现象称为冲突.一般情况下,冲突只能尽可能地少,而不能完全避免.因此,在建立哈希表时不仅要设定一个好的哈希函数,而且要设定一种处理冲突的方法.

根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的"像"作为记录在表中的存储位置,这种表便成为哈希表,这一映像过程成为散列,所得存储位置称为哈希地址或散列地址。


2. 哈希函数的构造方法


3. 处理冲突的方法

3.1. 链地址法

将关键字为同义词的记录存储在同一个线性链表中,



Hash Table的特点及引用

Hash Table是一种高效的数据结构,其高效主要体现在把数据的存储和查找的时间大大降低,几乎可以看成是常数时间,而代价是消耗较多的内存。

  • 统计值出现的次数/频率

相关文章

【啊哈!算法】算法3:最常用的排序——快速排序       ...
匿名组 这里可能用到几个不同的分组构造。通过括号内围绕的正...
选择排序:从数组的起始位置处开始,把第一个元素与数组中其...
public struct Pqitem { public int priority; ...
在编写正则表达式的时候,经常会向要向正则表达式添加数量型...
来自:http://blog.csdn.net/morewindows/article/details/6...