美文网首页
数据结构之hash表

数据结构之hash表

作者: 落雨松 | 来源:发表于2018-11-25 14:03 被阅读0次

一、hash表理解

将一组数据按照顺序存储的存储结构存储在:以数据通过一个特定的函数func(关键字),我们称之为“散列函数”,以这个散列函数作为索引存储在一个较长的数组中,查询的时候,可以直接根据关键字查询,速度较数组和链表要快得多。

二、散列函数的设计

遵循原则:计算简单、分布均匀

① 直接定址法:直接利用数据作为散列函数
②数字分析法:比如电话号码前三位是运营商标识,接着四位是省市,最后的4位才是标识,所以同一运营商,同一省市的用户号码信息,可以利用最后这四位作为散列函数。
③平方取中法:比如13,15,16、、、13的平方为169,取中 6 作为散列函数。
④平方取余法:类似于平方取中,拿到13,用13%10 = 3 ,所以13的散列函数为3。

三、hash冲突的解决方案

11、12、20 、、、,假如采用取余法求散列函数,那么12和20与10求余的余数都为2,那么这样就会产生hash冲突,解决hash冲突的方式主要有以下几种:

①开放地址法:

也分为:

1、线性探测法

在求得相同余数后,将后者存储在前者紧跟着的后面一个位置。

2、二次探测法

线性探测法使得在数组中某一段的数据会过于的集中。
二次探测法也就是将线性探测法中一次只移动一个位置改成一次移动平方个位置,比如,上面的12和20,20的散列函数就变成:2的平方+2,也就是6 这个位置。这种方法优化了线性探测法,解决掉了数据聚集的问题。

3、再hash法

利用多个hash函数:func(关键字),作为存储依据。

②链地址法:

将因为hash函数求得相同hashcode的数据存储在hash表的同一下标位置,多个数据采用链表的形式存储,也就是说,hash表中存储链表,查找的时候就可以根据hashcode找到hash表的下标索引位置,然后根据这个索引位置去找到这个数组元素,这个数组元素就是链表,对链表进行相应的操作。

相关文章

  • redis数据结构(三):字典 dict

    redis的字典使用哈希表作为底层实现。hash表的数据结构 hash表节点数据结构 这里看到链表了吧。redis...

  • 我的HashMap果然有问题

    1.HashMap数据结构 HashMap底层数据结构为hash表,也称散列表。hash表是根据键值key直接访问...

  • 什么是哈希(Hash)表

    什么是哈希(Hash)表 Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表...

  • 数据结构

    哈希hash(键:值) Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以...

  • php 实现Hash表

    php 实现Hash表功能Hash表作为最重要的数据结构之一,也叫做散列表。使用PHP实现Hash表的功能。PHP...

  • 数据结构之 HASH表

    什么是hash表 hash表又名为散列表,中文有直接译为哈希表,是一种存取速度非常高效的线性数据结构。把任意长度的...

  • 数据结构之hash表

    一、hash表理解 将一组数据按照顺序存储的存储结构存储在:以数据通过一个特定的函数func(关键字),我们称之为...

  • leetcode138.复制带随机指针的链表

    题目链接 题目描述: 思路一:Hash 使用hash表这种数据结构。hash-key存储原链表的节点,hash-v...

  • 数据结构与算法之美笔记——散列表(上)

    摘要: 「散列表」(Hash Table)或「Hash 表」是基于数组扩展的数据结构,能够将复杂信息通过「Hash...

  • redis笔记

    redis基础知识 数据结构 底层数据结构 SDS 双向链表 压缩列表 跳跃表 Hash表 整数数组 对外数据结构...

网友评论

      本文标题:数据结构之hash表

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