美文网首页
数据结构-散列表-概要

数据结构-散列表-概要

作者: TioSun | 来源:发表于2020-08-13 20:22 被阅读0次

散列表(Hash Table)也称哈希表,散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。

散列函数

散列表的核心就是散列函数了,散列函数就是把key值经过某种散列算法后的得到的散列值,记为hash(key)。常见的散列算法有MD5、SHA、CRC等。哈希算法需要满足以下特征1. key可以是任意长度,但是hash(key)之后的散列值其长度是固定的

  1. key1 == key2时,hash(key1) == hash(key2)
  2. 隐匿性,即不能通过hash(key)的值反推出key的值

散列冲突

由于散列函数可能出现key1 != key2时,hash(key1) == hash(key2)的情况,这种情况被称为散列冲突。常见的解决散列冲突的方法主要分为两类

  1. 开放寻址法
  2. 链表法

开放寻址法的主要思想是当发生散列冲突时,我们在数组中再次查找一个空余的位置插入数据。比较简单的方法是线性探测法,即当发生散列冲突时,在当前位置开始,依次向后查找(到尾部了则回到头部)直到查找到空余位置为止。同样,查找动作也是先查看散列值所在位置的key是否和待查找的key一致,不一致的话依次往后查找,直到找到空闲位置为止。删除动作会有点不同,为了查找动作能够顺利进行,删除动作只是标记删除。
可以感知到线性探测法是比较低效的,极端情况下,需要遍历整个数组,时间复杂度为O(n)。除了线性探测法之外,比较常见的探测法还有双重散列法和二次探测法(可以自行搜索)。

相对于开放寻址法,链表法是更常见易用的一种方法。链表法是指当发生散列冲突时,在冲突位置形成链表结构,这个很好理解,就不过多解释了。

相关文章

  • 数据结构-散列表-概要

    散列表(Hash Table)也称哈希表,散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的...

  • 学习JavaScript数据结构与算法(第2版)

    二维和多维数组 栈数据结构 队列数据结构(排队) 链表数据结构 双向链表 集合 字典和散列表 散列表 树 二叉树 ...

  • 算法图解-散列表

    1. 散列表 散列表由键和值组成,散列表将键映射到值。 在复杂数据结构中,散列表可能是最有用的,也被称为散列映射、...

  • 散列表

    什么是散列表 散列表也叫哈希表,输入某一关键字输出其对应的数值的数据结构 散列表的生成依赖于散列函数,散列函数的要...

  • 散列表下

    为什么散列表和链表经常会一起使用? 散列表这种数据结构虽然支持非常高效的数据插入、删除、查找操作,但是散列表中的数...

  • 散列表下

    为什么散列表和链表经常会一起使用? 散列表这种数据结构虽然支持非常高效的数据插入、删除、查找操作,但是散列表中的数...

  • 基础概念

    散列表 散列表是一种将键(Key)映射为值(Value)从而快速查找的数据结构 散列表包含一个底层数组和一个散列函...

  • Java HashMap原理解析

    本文分析HashMap的实现原理。 数据结构(散列表) HashMap是一个散列表(也叫哈希表),用来存储键值对(...

  • 数据结构与算法JavaScript描述(6) —— 散列(Has

    散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用。散列使用的数据结构叫做散列表。在散列表上插入...

  • 散列表面面观

    引子 散列的概念应用很广泛,比如加密,散列表,几何散列等。而散列表更是日常工作中常见的数据结构,同时也是面试中最常...

网友评论

      本文标题:数据结构-散列表-概要

      本文链接:https://www.haomeiwen.com/subject/numidktx.html