hash表原理?解决冲突方式?

概念:

哈希表(散列表)通过将关键码key映射到表中的某个位置上来存储元素,然后根据关键码来访问元素。

常用hash函数

  • 除留余数法
  • 线性探测
  • 二次探测
  • 开链法,在大部分情况下基本就是用开链法

解决方式

  1. 开放地址法
    基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。
    如:线性探测再散列、二次探测再散列

  2. 再哈希法
    当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时。缺点:计算时间增加。比如上面第一次按照姓首字母进行哈希,如果产生冲突可以按照姓字母首字母第二位进行哈希,再冲突,第三位,直到不冲突为止。

  3. 链地址法
    将所有关键字为同义词的记录存储在同一线性链表中。

  4. 建立一个公共溢出区
    假设哈希函数的值域为[0,m-1],则设向量HashTable[0..m-1]为基本表,另外设立存储空间向量OverTable[0..v]用以存储发生冲突的记录。

你可能感兴趣的:(hash表原理?解决冲突方式?)