您的位置:首页 > 理论基础 > 数据结构算法

散列表(哈希表)

2017-07-09 12:43 183 查看

散列表

散列表:通常,我们称散列的实现为散列表。散列是一种支持常数时间执行插入,删除,查找的技术,但是散列不支持排序操作。因此,FindMax,FindMin诸如此类的操作都将不支持。看到这里,我相信大家都明白我们为什么需要散列表了吧。(它能实现常数时间执行插入,删除,查找的技术)
理想的散列表数据结构是一个包含有关键字的具有固定大小的数组。关键字就是含有某个相关值的字符串(在这里把数字也当做字符串,即:所有的关键字都认为是字符串)
同时把表的大小记作:TableSize。通常让表从0到TableSize - 1变化。
通常是通过散列函数来把关键字映射到0到TableSize - 1这个范围之内的单元之中。理想情况下,散列函数应该运算简单,并且能保证不会在同一个单元出现两个关键字。不过,从实际来看,我们的关键字可能会非常多,而单元的数目有限。所以,我们需要寻找一个合适的散列函数,解决当两个关键字散列到同一个单元的时候(称为冲突),该怎么处理以及如何确定散列表的大小。

散列函数

如果输入的关键字是整数,一般的合理方法就是直接返回mod(key,TableSize)(取余操作)。但是偶尔会遇到关键字的一些不理想的性质。在这种情况下,散列函数的选择就需要慎重了。(比如:表的大小是30,关键字大多数都是30的倍数。这个时候,关键字就会散列到相同的单元去。)较好的办法使得表的大小是个素数,这样散列函数算起来简单而且关键字分配的比较均匀。通常,关键字是字符串。我们可以去这样做,把字符串的每个字符的ASCII值加起来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息