哈希表
哈希表又称散列表,是为了加快元素查询而设计的一种数据结构。基本原理是:把需要查询的关键字通过映射函数(散列函数)映射到相应的存储地址,然后直接访问元素。需要存储或者查询的元素一般称为关键字(Key value),而这个映射函数一般称为散列函数,映射到的存储地址一般称为散列表。
用散列表数据结构和其他数据结构的优劣区别
与数组相比较:数组通过数组名和数组下标可以很快的查询、插入和修改。但删除时,要把删除元素后面的元素都往前移动一个单元。
与列表相比较:列表则和数组相反,删除操作时非常容易。但插入,查询和修改都要从列表头开始遍历、比较,然后才能做操作。
而散列表则既有两种数据结构的优点,不管是查询、插入、修改还是删除,都可以由关键字通过散列函数直接找到要操作的元素,然后就可以直接操作了。当然了以上散列表的分析是基于没有冲突碰撞,或者是冲突碰撞处理的比较好的情况。
散列函数
散列函数:不确定长度的元素(数据,信息等)通过散列函数压缩成信息摘要,形成固定格式的信息。关键字key,则hash = f(key),则f(key)是散列函数,存放hash值的地址集为哈希表。不同的关键字key,可以映射到同一个哈希值;但不可以是一个关键字映射到多个哈希值。即:函数可以一对一,也可以多对一,但不能一对多。当多对一(多个关键字散列到一个地址上)时,称为冲突碰撞现象。
构造散列函数的几种方法
一个好的散列函数可以减少散列表中的冲突碰撞现象。下面介绍几种散列函数的构造方法:
直接寻址法:把散列函数构造成线性函数,这种方法可以彻底杜绝冲突碰撞现象。一般表达为:hash = kx + b;其实要