【数据结构与算法】哈希表

来源:互联网 发布:cosplay的软件 编辑:程序博客网 时间:2024/06/06 00:41

哈希表是一种查询速度非常快的数据结构,通常的数据结构比如链表,查询速度都会与数据结构的大小有关,而哈希表则是O(1)的速度,基本接近于常量。

1,大致思路:

 *采用数组作为容器,因为访问数组只要给定了下标就能立即得到数据,速度很快,不存在遍历查相等的问题

 *对于要存取的数据,通常都会有关键字,用于检索容器中的数据,这个很好理解,类似于数据库持久层中的primary key的概念。现在为了查询速度,就要把数据存放于数组中,那么必须为存入的数据指定下标才行。也就是一个从key到index映射。key的类型不做限定,可以使int或者string。这个映射叫做哈希函数,哈希函数必定会涉及两个过程:

   (1)将关键字转化为数字,如果是string可以考虑通过string的ascii码,采取平方取中发,再取余。

    (2)将数字压缩,使其小于数组.length,这个可以通过取余函数实现。

2,冲突:

就拿采用了取余函数作为哈希函数的情况来说,可能两个不同的关键字会得到相同的下标,这就是冲突。处理冲突有很多方法,比如开放地址法和拉链法:

*开放地址法:先设置一个偏移量,一旦发生冲突,就要往加一个偏移量的下标侦测,如果没有数据,那么就可以在这个位置添新的数据,如果已有数据,那么继续增加偏移量。相应的在查询数据的时候,就要先看index处有没有数据,如果没有,返回null,如果有,还要看数据的key和要查询的key是否相同,如果相同,那么返回这个数据项,如果不同,那么继续查加偏移量的下标的数据,再次继续上面的过程。

*拉链法:数组的index存一个指针或者链表表头,用于指向下标为index的全部数据组成的链表

1 0
原创粉丝点击