哈希是什么?为什么哈希存取比较快?
来源:互联网 发布:python 循环读取csv 编辑:程序博客网 时间:2024/04/30 17:21
本内容为本人学习《大话数据结构》一文的总结摘要:
哈希算法存取之所以快,是因为其 直接通过关键字key得到要存取的记录内存存储位置
试想这样的场景,你很想学太极拳,听说学校有个叫张三丰的人打得特别好,于
是你到学校学生处找人,学生处的工作人员可能会拿出学生名单,一个一个的查找,
最终告诉你,学校没这个人,并说张三丰几百年前就已经在武当山作古了。可如果你
找对了人,比如在操场上找那些爱运动的同学,人家会告诉你,"哦,你找张三丰呀,
有有有,我带你去。于是他把你带到了体育馆内,并告诉你,那个教大家打太极的小
伙子就是张三丰',原来"张三丰.是因为他太极拳打得好而得到的外号。
学生处的老师找张三丰,那就是顺序表查找,依赖的是姓名关键字的比较。而通
过爱好运动的同学询问时,没有遍历,没有比较,就凭他们"欲找太极'张三丰',必
在体育馆当中"的经验,直接告诉你位置。
也就是说,我们只需要通过某个函数f,使得
存储位置=f (关键字)
那样我们可以通过查找关键字不需要比较就可获得需要的记录的存储位置。这就
是一种新的存储技术一一散列技术(哈希算法)。
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得
每个关键字key 对应一个存储位置f (key)。查找时,根据这个确定的对应关系找到
给定值key 的映射f (key) ,若查找集合中存在这个记录,则必定在f (key) 的位
置上。
这里我们把这种对应关系f 称为散列函数, 又称为哈希(Hash) 函数。按这个思
想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列
表或哈希表(Hash table)。 那么关键字对应的记录存储位置我们称为散列地址。
整个散列过程其实就是两步。
(1) 在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记
录。
(2) 当查找记录时,我们通过同样的散列函数计算记录的散列地址,按此散列地
址访问该记录。由于存取用的是同一个散列函数, 因此结果当然也是相同的。
所以说,散列技术既是一种存储方法,也是一种查找方法。然而它与线性表、
树、图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用
连线图示表示出来,而散列技术的记录之间不存在什么逻辑关系,它只与关键字有关
联。因此,散列主要是面向查找的存储结构。
我们时常会碰到两个关键字key1 != key2,但是却有f(key1) = f(key2),这种现象
我们称为哈希冲突,如果没有哈希冲突,散列表是一种非常高效的查找数据结构,
其时间复杂度为O(1);
1 0
- 哈希是什么?为什么哈希存取比较快?
- java面试题之 哈希是什么?为什么哈希存取比较快?
- 哈希算法为什么存取速度快?
- 哈希的存取为何快?
- 哈希为什么查询速度 快
- hbase 为什么查询比较快
- 迅雷下载会员账户为什么比较快?
- Oracle expdp为什么比exp快,原理是什么
- 为什么使用了哈希算法的字典查集合找速度比全局遍历字典查集合速度快?
- 哈希值是什么? 哈希概念
- 栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?
- 栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?
- 快排为什么那样快
- 快排为什么那样快
- 快排为什么那样快
- 快排为什么那样快
- 快排为什么那么快
- 铃声快剪 是什么
- Android开发获取联系人信息&根据姓名查找电话%根据电话查找姓名
- 一个直播例子:快速集成iOS基于RTMP的视频推流
- ssm项目中使用mybatis配置连表查询
- ID3算法
- C# .NET内置委托
- 哈希是什么?为什么哈希存取比较快?
- Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
- 执行应用程序出现: No such file or directory
- iOS异常捕获-堆栈信息的解析
- Map集合的遍历及比较
- docker
- HBase学习笔记——基本操作:shell和java API
- 新建线程五种方法
- mysql中字符集 utf8 和utf8mb4 有什么区别?