(原创)散列表 hash table
来源:互联网 发布:知乎乌金木和赤金檀木 编辑:程序博客网 时间:2024/05/21 11:10
一、什么是散列表
散列表是一种结合了散列函数和数组的数据结构。
二、散列函数
散列函数是一种将输入映射到数字的函数,它的执行时间为O(1)。散列函数需要满足一下要求:
a. 映射必须是一致的,即相同的输入,必须得到相同的输出。
b. 它应当尽可能的将不同的输入映射到不同的输出。
为什么是尽可能呢?后面我们会在冲突部分提到。那么,散列函数输出的数字有什么用呢?我们可以将该数字对应到数组的地址,并在该地址存放散列函数的输入对应的最终值,又因为数组的查询时间也为O(1),所以,散列表的查询运行时间为O(1)。例如,向散列函数输入"oysq",散列函数将其对应到03,那么将值"hello"存放到数组的#03位置,以后我们查询"oysq"的运行时间即为O(1)。
三、冲突和填装因子
因为数组的空间(长度)是在一开始就设定好的。假设长度为10,当有11个时,就不可避免的会有两个输入被散列函数映射到同一个位置,这种情况就叫冲突。为了避免原先的值被后来的值覆盖,我们在该位置存储了一张链表的起始位置,以后凡是映射到这个位置的值都存放在该位置对应的链表内。
注意!!
如果散列函数将所有的输入都映射到同一个位置,那么会导致什么情况呢?该位置的链表会非常的长~~~而数组的其他位置又都为空,这样和单纯的一张链表有什么区别呢?所以,散列函数非常的重要,就如上面提到的,它要尽可能的让键均匀的映射到数组的不同位置,这样的散列函数才是好函数!!
这里提一下一个概念:填装因子 = 散列表中的数组被占用的位置数 / 数组的位置总数。它度量的是散列表中的数组有多少位置是空的。
因此,换句话说,好的散列表,需要有:
a. 较低的填装因子
b. 好的散列函数
四、散列表的性能优势
由此可见,想要好的散列表,散列函数至关重要!!
尊重原创,转载请注明出处!!
阅读全文
0 0
- (原创)散列表 hash table
- 散列表(hash table)
- 散列表(Hash table)
- 散列表(Hash Table)
- 散列表 hash table
- 散列表 - Hash Table
- 散列表(Hash Table)
- 算法导论---------------散列表(hash table)
- 哈希表(散列表 Hash Table)
- hash table 哈希表(散列表)
- 算法导论之散列表(哈希表)详解(hash table)
- 数据结构—散列表(Hash table,也叫哈希表)
- 数据结构与算法____散列表(hash table)
- hash table——散列表
- Lisp语言:散列表(hash table)
- 散列表(Hash Table)全解析
- Lisp语言:散列表(hash table)
- 数据结构之---散列表(hash table)
- 6.6整存零取
- RabbitMQ Work queues
- 微信小程序获取手机号授权登录
- 51nod 1810 连续区间
- JSONObject和JSONArray
- (原创)散列表 hash table
- HTML标题 段落
- C语言练习11.4
- 一、SSH(1)
- JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书
- Java 访问控制符
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求三门
- 温度转换表:
- List的三种遍历