博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构哈希表(散列表)理解
阅读量:3952 次
发布时间:2019-05-24

本文共 814 字,大约阅读时间需要 2 分钟。

定义

哈希表(Hash table,也叫散列表),是根据关键码值(key value)来直接进行访问数据的数据结构,也就是一个关键码值通过散列函数映射到表中一个位置来进行访问数据,来加快查找的速度。

数组的特点:寻址容易,插入和删除困难;

链表的特点:寻址困难,插入和删除困难。
而哈希表综合两者的特性,实现了寻址容易,插入删除也容易的数据结构。

实现方法

1:拉链法(链表的数组)

左边为一个数组,数组的每个成员包括一个指针,指向一个链表的头,我们根据元素的一些特性把元素分配到不同的链表中去,也是根据这些特性找到正确的链表,再从链表中找出这个元素。

Hash的应用

1、用于信息安全领域中加密算法,把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做hash值;

2、查找:当我们知道这个key值后,可以直接通过哈希函数计算出这个元素在集合中的地址,从而找到这个元素,不需要一次又一次地查找;
3、Hash表在海量数据处理中有着广泛应用

优缺点

优点:一对一的查找效率很高,查找,插入,删除只需要接近常量的时间

缺点:一个关键字可能对应多个地址,可能会产生冲突,基于数组的,创建后难于扩展,当某些哈希表被基本填满时,性能下降的非常严重。

冲突的解决方案

1、建立一个缓冲区,把凡是查找的结果全部放到缓冲区中,当通过键查找的结果不对时,直接在缓冲区里找。

2、进行再探测(在其他的位置查找)
(1)线性再探测:在找到查找位置的index的index-1,index+1位置查找,index-2,index+2查找,以此类推;
(2)随机再探测 :在查找位置index周围随机的查找;
(3)再哈希:就是当冲突产生时,采用另外一种映射函数来查找。

测试题

题目:海量日志数据,提取出某日访问百度次数最多的那个IP

方案:

IP的数目是有限的,最多为2^32个,所以可以考虑使用hash将IP直接存入内存,然后进行统计。

转载地址:http://wzwzi.baihongyu.com/

你可能感兴趣的文章
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>
高效率的危害
查看>>
寻找边缘性创新
查看>>
让创意瞄准市场
查看>>
高效经理人应具有的八个重要习惯
查看>>