散列表

作者: 暮想sun | 来源:发表于2019-12-27 15:08 被阅读0次

散列技术是记录的存储位置和它的关键字之间建立一个确定的对应关系,使得每个关键字key对应一个存储位置。这种对应关系又称为散列函数,或者哈希函数。采用散列技术将记录存储在一块连续的存储空间中,这款连续存储空间成为散列表或者哈希表。
散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。
可以说,如果没有数组,就没有散列表。
散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据。

散列表查找步骤:

1.在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记录
2.当查找记录时,我们ton过同样的散列函数计算机路的散列地址,按此散列地址访问该记录。

散列函数的构造方法:

1.直接定址法:f(key) = a*key + b 适合查找表较小且连续的函数
2.数字分析法:使用关键字的一部分来计算散列存储位置。适合处理关键字位数比较大的情况,关键字的若干位分布均匀
3.平方取中法:例1234->1522756,中间三位为227,可做散列地址。适合于不知道关键字的分布,位数又不是很大的情况
4.折叠法:将关键字从左到右分割成位数相等的几部分,然后将这几部分叠加求和,并按散列表表长,取后几位作为散列地址。
关键字位数较多时。
5.除留余数法:f(key)=key%p
6.随机数法:取关键字的随机函数值为散列地址,关键字长度不等时。

散列冲突:

两个关键字key1 !=key2,但却有f(key1) = f(key2),这种现象称为冲突。,并把key1和key2称为这个散列函数的同义词。

处理散列冲突的方法:

1.开放地址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
f(key) =(f(key)+d) % m
当d=1,2,3,4,5...,称为线性探测法
当d=1的平方,2的平方...,称为二次探测法
当d采用随机函数计算得到,称为随机探测法一个散列函数计算。
2.再散列函数法:每当发生散列地址冲突时,就换一个散列函数计算。
3.链地址法:将so有关键字为同义词的记录存储在一个单链表中。
4.公共溢出区法:将有冲突的关键字建立一个公共的溢出区来存放。

相关文章

  • 散列表

    1.啥是散列表及散列函数? 很多语言都提供了散列表的实现方式,python是用dict{ }来实现 2.有啥优势?...

  • 散列表

    基本概念(非严谨) 散列表:按照思考事物本质以及理想状态的思路,那么散列表从本质来讲就是一个表,而理想的散列表应该...

  • 散列表

    散列表:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f...

  • 散列表

    转载请注明出处!https://www.jianshu.com/p/e325578eb512 链表实现 Githu...

  • 散列表

    一、定义 散列表(Hash Table,也叫哈希表),是通过把键值映射成整数来作为数组的索引,并进行访问记录的一种...

  • 散列表

    https://blog.csdn.net/pcwl1206/article/details/83582986

  • 散列表

    散列查找法的两项基本工作 计算位置:构造散列函数直接确定关键词存储位置散列函数的设计,主要目的是构造随机性:计算简...

  • 散列表

    散列表是一种基本的数据结构,那么散列表到底是什么样的一种数据结构呢?又有哪些应用场景呢? 假如我们要从一本电话本中...

  • 散列表

    散列表 认识散列表 是 字典(键 、值对)的一种实现方式。每次在字典中获取一个值,都需要重复遍历字典,如果用散列表...

  • 散列表

    散列函数将被查找的键转换为数组的索引 解决冲突的方法:拉链法和线性探测法 将整数散列最常见的方法是除留余数法,通常...

网友评论

    本文标题:散列表

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